

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將工作負載從 Azure DevOps 管道部署到私有 Amazon EKS 叢集
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters"></a>

*Mahendra Revanasiddappa，Amazon Web Services*

## 摘要
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-summary"></a>

此模式示範如何實作從 Azure DevOps 管道到私有 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集的持續整合和持續交付 (CI/CD)。它解決了組織透過轉換到 Amazon EKS 叢集的私有 API 伺服器端點來增強其安全狀態面臨的關鍵挑戰。

公有端點會將 Kubernetes API 伺服器直接公開至網際網路，進而建立惡意人士可能鎖定的更大攻擊面。透過切換到私有端點，對叢集控制平面的存取僅限於客戶虛擬私有雲端 (VPC) 內。

雖然將 Amazon EKS 叢集轉換為私有 API 端點可大幅增強安全性，但它為 Azure DevOps 等外部 CI/CD 平台帶來連線挑戰。私有端點只能從叢集的 VPC 或對等網路存取。因此，在 AWS 私有網路外操作的標準 Microsoft 託管 Azure DevOps 代理程式無法直接連線到 Kubernetes API 伺服器。這會中斷依賴在這些代理程式上執行之 kubectl 或 Helm 等工具的典型部署工作流程，因為它們無法建立與叢集的連線。

為了克服這個問題，此模式展示了在私有 Amazon EKS 叢集中使用自我託管 Azure DevOps 代理程式的有效方法。此解決方案提供卓越的成本最佳化、營運效率和可擴展性，同時保留安全需求。這種方法特別有利於尋求簡化多雲端 DevOps 程序的企業，而不會影響效能或安全性。

## 先決條件和限制
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-prereqs"></a>

**先決條件**
+ 作用中 AWS 帳戶。
+ AWS Command Line Interface (AWS CLI) 2.13.17 版或更新版本，[已安裝。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ 已安裝 kubectl 1.25.1 版或更新版本。 [https://kubernetes.io/docs/tasks/tools/](https://kubernetes.io/docs/tasks/tools/)
+ [已建立](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)私有 Amazon EKS 叢集 1.24 版或更新版本，具有建立命名空間、秘密和部署的許可[。](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ Amazon EKS 叢集中的工作者節點具有網際網路的傳出連線，因此在其上執行的 Azure DevOps 代理程式可以連線至 Azure DevOps 代理程式集區。
+ [已建立](https://github.com/signup) GitHub 帳戶。
+ 具有設定服務連線之存取權的 Azure DevOps 專案，這些連線是在 Azure Pipelines 與外部或遠端服務之間[建立](https://learn.microsoft.com/en-us/azure/devops/user-guide/sign-up-invite-teammates?view=azure-devops&tabs=microsoft-account)的驗證連線。
+ 針對前一點所述的 Azure DevOps 專案安裝的 1.15 AWS Toolkit for Azure DevOps 版或更新版本。如需安裝說明，請參閱 Visual Studio Marketplace [AWS Toolkit for Azure DevOps](https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-vsts-tools)中的 。

**限制**
+ 有些 AWS 服務 無法全部使用 AWS 區域。如需區域可用性，請參閱[AWS 依區域的服務](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。如需特定端點，請參閱[服務端點和配額](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)，然後選擇服務的連結。

## Architecture
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-architecture"></a>

此模式會建立下列項目：
+ **Amazon ECR 儲存庫** - Amazon Elastic Container Registry (Amazon ECR) 儲存庫會將 Docker 映像與 Azure DevOps 代理程式和部署的範例應用程式一起存放。
+ **Azure DevOps 代理程式集**區 - Azure DevOps 自我託管代理程式集區會註冊在私有 Amazon EKS 叢集上執行的代理程式。
+ **IAM 角色** - Azure 服務連線的 AWS Identity and Access Management (IAM) 角色，可提供對私有 Amazon EKS 叢集上執行之代理程式的必要存取權。
+ **Azure DevOps 服務連線** - Azure DevOps 帳戶中的服務連線，可使用 IAM 角色，為管道任務提供存取所需的存取權 AWS 服務。

下圖顯示在私有 Amazon EKS 叢集上部署自我託管 Azure DevOps 代理程式，以及在同一叢集上部署範例應用程式的架構。

![\[部署私有 Amazon EKS 叢集上的自我託管 Azure DevOps 代理程式和範例應用程式。\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/images/pattern-img/a965834f-a1e2-4679-bd8c-15eed4f57b55/images/ee22bd3e-311c-46e0-8024-9b7e7752080a.png)


該圖顯示以下工作流程：

1. 將自我託管 Azure DevOps 代理程式部署為 Amazon EKS 叢集內的部署。

1. Azure DevOps 代理程式會使用個人存取字符 (PAT) 進行身分驗證，連線到 Azure DevOps 帳戶上的代理程式集區。

1. Azure Pipelines 會使用來自 GitHub 儲存庫的程式碼，設定要部署的管道。

1. 管道從管道組態中設定的代理程式集區在代理程式上執行。Azure DevOps 代理程式會持續輪詢至 Azure DevOps 帳戶，以取得管道的任務資訊。

1. Azure DevOps 代理程式會在管道任務中建置 Docker 映像，並將映像推送至 Amazon ECR 儲存庫。

1. Azure DevOps 代理程式會將範例應用程式部署在名為 的命名空間中的私有 Amazon EKS 叢集上`webapp`。

## 工具
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-tools"></a>

**工具**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) 是一種受管容器映像登錄服務，安全、可擴展且可靠。
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) 可協助您在 上執行 Kubernetes， AWS 而無需安裝或維護您自己的 Kubernetes 控制平面或節點。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 透過控制已驗證並獲授權使用的人員，協助您安全地管理對 AWS 資源的存取。

**其他工具**
+ [Docker](https://www.docker.com/) 是一組平台即服務 (PaaS) 產品，可在作業系統層級使用虛擬化在容器中交付軟體。
+ [kubectl](https://kubernetes.io/docs/tasks/tools/) 是一種命令列界面，可協助您針對 Kubernetes 叢集執行命令。

**程式碼儲存庫**
+ 此模式的程式碼可在 GitHub [deploy-kubernetes-resources-to-amazon-eks-using-azure-devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops) 儲存庫中使用。

## 最佳實務
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-best-practices"></a>
+ 如需 Amazon EKS，請參閱 [Amazon EKS 最佳實務指南](https://docs.aws.amazon.com/eks/latest/best-practices/introduction.html)。
+ 遵循最低權限原則，並授予執行任務所需的最低許可。如需詳細資訊，請參閱 IAM 文件中的[授予最低權限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv)和[安全最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 史詩
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-epics"></a>

### 建立服務連線
<a name="create-a-service-connection"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 尋找 Azure DevOps 組織 GUID。 | 登入您的 Azure DevOps 帳戶，然後使用下列 URL 來尋找組織 GUID：在 URL `https://dev.azure.com/{DevOps_Org_ID}/_apis/projectCollections?api-version=6.0` 中，將 取代`{DevOps_org_ID}`為您的 Azure DevOps 組織 ID。 | AWS DevOps | 
| 在 中設定 IdP AWS 帳戶。 | 若要在 中設定 Azure 服務連線 AWS 帳戶 的身分提供者 (IdP)，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)如需詳細資訊，請參閱[如何使用 OpenID Connect AWS 從 Azure DevOps 聯合到](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/) 。 | AWS DevOps | 
| 在 中建立 IAM 政策 AWS 帳戶。 | 若要建立 IAM 政策，為 Azure DevOps 管道使用的 IAM 角色提供必要的許可，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| 在 中建立 IAM 角色 AWS 帳戶。 | 若要在 中 AWS 帳戶 為 Azure 服務連線設定 IAM 角色，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Federated": "arn:aws:iam::{account_id}:oidc-provider/vstoken.dev.azure.com/{OrganizationGUID}"<br />      },<br />      "Action": "sts:AssumeRoleWithWebIdentity",<br />      "Condition": {<br />        "StringEquals": {<br />          "vstoken.dev.azure.com/{OrganizationGUID}:aud": "api://AzureADTokenExchange",<br />          "vstoken.dev.azure.com/{OrganizationGUID}:sub": "sc://{OrganizationName}/{ProjectName}/{ServiceConnectionName}"<br />        }<br />      }<br />    }<br />  ]<br />}</pre>在政策中，提供下列預留位置的資訊：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| 在 Azure DevOps 帳戶中建立服務連線。 | 若要設定 Azure 服務連線，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)如需詳細資訊，請參閱 Microsoft 文件中的[建立服務連線](https://learn.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops#create-a-service-connection)。 | AWS DevOps | 
| 將 IAM 角色新增至 Amazon EKS 組態檔案。 | IAM 角色必須具有必要的許可，才能在 Amazon EKS 叢集上執行必要的操作。由於它是管道角色，IAM 角色必須能夠管理叢集上幾乎所有類型的資源。因此，`system:masters`群組許可適用於此角色。若要將必要的組態新增至 Kubernetes `aws-auth ConfigMap`中的 ，請使用下列程式碼：<pre>- groups:<br />  - system:masters<br />  rolearn: arn:aws:iam::{account_id}:role/ADO-role<br />  username: ADO-role</pre>`{account_id}` 以您的 AWS 帳戶 ID 取代 。如需詳細資訊，請參閱 [Amazon EKS 文件中的 Amazon EKS 如何與 IAM 搭配使用](https://docs.aws.amazon.com/eks/latest/userguide/security-iam-service-with-iam.html#security-iam-service-with-iam-roles)。 | AWS DevOps | 

### 建立代理程式集區
<a name="create-an-agent-pool"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立自我託管代理程式集區。 | 若要在 Azure DevOps 帳戶中設定自我託管代理程式集區，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)如需詳細資訊，請參閱 Microsoft 文件中的[建立和管理代理程式集區](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/pools-queues?view=azure-devops&tabs=yaml%2Cbrowser)。 |  | 

### 建置 Azure DevOps 代理程式映像並推送至 Amazon ECR
<a name="build-azure-devops-agent-image-and-push-to-ecr"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立 Amazon ECR 儲存庫。 | 用於在私有 Amazon EKS 叢集上部署 Azure DevOps 代理程式和範例應用程式 (`webapp`) 的 Docker 映像必須存放在 Amazon ECR 儲存庫中。若要建立 Amazon ECR 儲存庫，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)如需詳細資訊，請參閱 [Amazon ECR 文件中的建立 Amazon ECR 私有儲存庫以存放映像](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)。 | AWS DevOps | 
| 建立 Dockerfile 以建置 Azure DevOps 代理程式。 | 建立 Dockerfile 以建置已安裝 Azure DevOps 代理程式的 Docker 映像。將下列內容存放在名為 的檔案中`Dockerfile`：<pre><br />FROM ubuntu:22.04 <br />ENV TARGETARCH="linux-x64"<br />RUN apt update && apt upgrade -y && apt install -y curl git jq libicu70 unzip wget<br /><br />RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />RUN unzip awscliv2.zip<br />RUN ./aws/install<br />RUN rm -rf aws awscliv2.zip<br /><br />RUN curl -sSL https://get.docker.com/ | sh<br /><br />RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash<br />RUN mkdir -p azp <br />WORKDIR /azp/<br /><br />COPY ./start.sh ./ <br />RUN chmod +x ./start.sh<br /><br />RUN useradd -m -d /home/agent agent <br />RUN chown -R agent:agent /azp /home/agent<br />RUN groupadd -f docker <br />RUN usermod -aG docker agent<br />USER agent<br /><br />ENTRYPOINT [ "./start.sh" ]</pre> | AWS DevOps | 
| 建立 Azure DevOps 代理程式的指令碼。 | 若要建立`start.sh`指令碼，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| 使用 Azure DevOps 代理程式建置 Docker 映像。 | 若要建立 Docker 映像以安裝 Azure DevOps 代理程式，請使用您先前建立的 Dockerfile 來建置映像。在存放 Dockerfile 的相同目錄中，執行下列命令：<pre>aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com<br /><br />docker build --platform linux/amd64 -t ado-agent:latest .<br /><br />docker tag ado-agent:latest aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br /><br />docker push aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest</pre>`region` 以您的 AWS 帳戶 ID `aws_account_id`和 取代 和 AWS 區域。 | AWS DevOps | 

### 將 Azure DevOps 代理程式部署到私有 Amazon EKS 叢集
<a name="deploy-the-azure-devops-agent-to-a-private-eks-cluster"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 產生 Azure 個人存取字符。 | 在私有 Amazon EKS 叢集上執行的代理程式需要個人存取字符 (PAT)，以便可以向 Azure DevOps 帳戶進行身分驗證。若要產生 PAT，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>apiVersion: v1<br />kind: Secret<br />metadata:<br />  name: azdevops-pat<br />  namespace: default<br />type: Opaque<br />stringData:<br />  AZP_TOKEN: <PAT Token></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>kubectl create -f ado-secret.yaml</pre>如需詳細資訊，請參閱 Microsoft 文件中的[使用個人存取字符 (PAT) 註冊代理](https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/personal-access-token-agent-registration?view=azure-devops)程式。 | AWS DevOps | 
| 使用 Kubernetes 資訊清單檔案進行代理程式部署。 | 若要在私有 Amazon EKS 叢集上部署 Azure DevOps 代理程式，請複製下列資訊清單檔案，並將檔案儲存為 `agent-deployment.yaml`：<pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: azure-pipelines-agent-eks<br />  labels:<br />    app: azure-pipelines-agent<br />spec:<br />  replicas: 1<br />  selector:<br />    matchLabels:<br />      app: azure-pipelines-agent<br />  template:<br />    metadata:<br />      labels:<br />        app: azure-pipelines-agent<br />    spec:<br />      containers:<br />      - name: docker<br />        image: docker:dind<br />        securityContext: <br />          privileged: true<br />        volumeMounts:<br />        - name: shared-workspace<br />          mountPath: /workspace<br />        - name: dind-storage<br />          mountPath: /var/lib/docker<br />        env:<br />        - name: DOCKER_TLS_CERTDIR<br />          value: ""<br />      - name: azure-pipelines-agent<br />        image: aws_account_id.dkr.ecr.region.amazonaws.com/webapp:latest<br />        env:<br />        - name: AZP_URL<br />          value: "<Azure account URL>"<br />        - name: AZP_POOL<br />          value: "eks-agent"<br />        - name: AZP_TOKEN<br />          valueFrom:<br />            secretKeyRef:<br />              name: azdevops-pat<br />              key: AZP_TOKEN<br />        - name: AZP_AGENT_NAME<br />          valueFrom:<br />            fieldRef:<br />              fieldPath: metadata.name<br />        - name: DOCKER_HOST<br />          value: tcp://localhost:2375<br />        volumeMounts:<br />        - mountPath: /workspace<br />          name: shared-workspace<br />      volumes:<br />      - name: dind-storage<br />        emptyDir: {}<br />      - name: shared-workspace<br />        emptyDir: {}</pre>將 `aws_account_id` 和 取代`<Azure account URL>`為您的 AWS 帳戶 ID 和 Azure DevOps 帳戶 URL。 | AWS DevOps | 
| 在私有 Amazon EKS 叢集上部署代理程式。 | 若要在私有 Amazon EKS 叢集上部署 Azure Devops 代理程式，請使用下列命令：<pre>kubectl create -f agent-deployment.tf</pre> | AWS DevOps | 
| 驗證代理程式是否正在執行。 | 若要驗證 Azure DevOps 代理程式是否正在執行，請使用下列命令：<pre>kubectl get deploy azure-pipelines-agent-eks<br /></pre>預期的輸出應類似於以下內容：<pre><br />NAME                        READY   UP-TO-DATE   AVAILABLE   AGE<br />azure-pipelines-agent-eks   1/1     1            1           58s</pre>請確定資料`READY `欄顯示 `1/1`。 | AWS DevOps | 
| 確認代理程式已向 Azure DevOps 代理程式集區註冊。 | 若要確認代理程式已部署在私有 Amazon EKS 叢集上，並已向代理程式集區 註冊`eks-agent`，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)您應該會看到一個以**線上****狀態**列出的代理程式，而代理程式的名稱應以 **azure-pipelines-agent-eks-\$1** 開頭。 | AWS DevOps | 

### 部署範例應用程式
<a name="deploy-sample-application"></a>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 將範例應用程式儲存庫授與您的 GitHub 帳戶。 | 將下列 AWS 範例儲存庫授與您的 GitHub 帳戶：[https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops](https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops) | AWS DevOps | 
| 建立管道。 | 若要在您的 Azure DevOps 帳戶中建立管道，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)<pre>pool:<br />  name: eks-agent<br />#pool: self-hosted # If you are running self-hosted Azure DevOps Agents<br /><br />stages:<br /># Refering the pipeline template, input parameter that are not specified will be added with defaults<br />- template: ./pipeline_templates/main_template.yaml<br />  parameters:<br />    serviceConnectionName: aws-sc<br />    awsRegion: <your region><br />    awsEKSClusterName: <name of your EKS cluster><br />    projectName: webapp<br /></pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | AWS DevOps | 
| 確認範例應用程式已部署。 | 管道完成後，請檢查 Amazon ECR 儲存庫和 Amazon EKS 叢集，以驗證範例應用程式是否成功部署。若要驗證 Amazon ECR 儲存庫中的成品，請使用下列步驟：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html)例如，`20250501.1-image` 和 `20250501.1-helm`。若要驗證命名空間 中私有 Amazon EKS 叢集上的部署`webapp`，請使用下列命令：<pre>kubectl get deploy -n webapp </pre>預期的輸出如下：<pre><br />NAME     READY   UP-TO-DATE   AVAILABLE<br />webapp   1/1     1            1           </pre>注意：如果這是您的第一個管道執行，您可能需要授權服務連線和代理程式集區。在 Azure DevOps 管道界面中尋找許可請求，並核准它們以繼續。 | AWS DevOps | 

## 疑難排解
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-troubleshooting"></a>


| 問題 | 解決方案 | 
| --- | --- | 
| 當 Amazon ECR 儲存庫名稱不相符時管道失敗 `webapp` | 範例應用程式預期 Amazon ECR 儲存庫名稱符合 中的 `projectName: webapp` 參數`azure_pipeline.yml`。若要解決此問題，請將 Amazon ECR 儲存庫重新命名為 `webapp`，或更新下列項目：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 
| 錯誤：Kubernetes 叢集無法連線：伺服器已要求用戶端提供登入資料 | 如果您在 Azure 管道的「提取和部署 Helm Chart」步驟中遇到此錯誤，根本原因通常是來自 Amazon EKS 叢集 中的不正確 IAM 角色組態`aws-auth ConfigMap`。若要解決此問題，請檢查下列項目：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/patterns/deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters.html) | 

## 相關資源
<a name="deploy-workloads-from-azure-devops-pipelines-to-private-amazon-eks-clusters-resources"></a>

**AWS 部落格**
+ [如何使用 OpenID Connect AWS 從 Azure DevOps 聯合到](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-federate-into-aws-from-azure-devops-using-openid-connect/)

**AWS 服務 文件**
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)

**Microsoft 文件**
+ [什麼是 Azure DevOps？](https://learn.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops?view=azure-devops)
+ [什麼是 Azure Pipelines？](https://learn.microsoft.com/en-us/azure/devops/pipelines/get-started/what-is-azure-pipelines?view=azure-devops)