自 2025 年 11 月 7 日起,Amazon CodeCatalyst 將不再向新客戶開放。如果您想要使用 服務,請在 2025 年 11 月 7 日之前註冊。如需詳細資訊,請參閱如何從 CodeCatalyst 遷移。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:將應用程式部署至 Amazon EKS
在本教學課程中,您將了解如何使用 Amazon CodeCatalyst 工作流程、Amazon EKS 和其他一些 AWS 服務,將容器化應用程式部署至 Amazon Elastic Kubernetes Service。部署的應用程式是簡單的「Hello, World!」 在 Apache Web 伺服器 Docker 映像上建置的網站。本教學課程會逐步解說必要的準備工作,例如設定開發機器和 Amazon EKS 叢集,然後說明如何建立工作流程來建置應用程式並將其部署到叢集。
初始部署完成後,教學會指示您變更應用程式來源。此變更會導致建立新的 Docker 映像,並使用新的修訂資訊推送到您的 Docker 映像儲存庫。然後,Docker 映像的新修訂會部署到 Amazon EKS。
提示
您可以改用藍圖,為您完成 Amazon EKS 設定,而不是完成本教學課程。您需要使用 EKS 應用程式部署藍圖。如需詳細資訊,請參閱使用藍圖建立專案。
主題
先決條件
開始本教學課程之前:
-
您需要具有連線 AWS 帳戶的 Amazon CodeCatalyst 空間。如需詳細資訊,請參閱建立空間。
-
在您的空間中,您需要一個名為 的空專案:
codecatalyst-eks-project使用從頭開始選項來建立此專案。
如需詳細資訊,請參閱在 Amazon CodeCatalyst 中建立空專案。
-
在您的專案中,您需要名為 的空 CodeCatalyst 來源儲存庫:
codecatalyst-eks-source-repository如需詳細資訊,請參閱將程式碼與 CodeCatalyst 中的來源儲存庫一起存放和協作。
-
在專案中,您需要名為 的 CodeCatalyst CI/CD 環境 (而非開發環境):
codecatalyst-eks-environment設定此環境,如下所示:
-
選擇任何類型的,例如非生產。
-
將您的帳戶連接到該 AWS 帳戶。
-
針對預設 IAM 角色,選擇任何角色。稍後您將指定不同的角色。
如需詳細資訊,請參閱部署至 AWS 帳戶 和 VPCs。
-
步驟 1:設定您的開發機器
本教學課程的第一步是使用您將在本教學課程中使用的幾個工具來設定開發機器。這些工具包括:
-
eksctl公用程式 – 用於建立叢集 -
kubectl公用程式 – 的先決條件eksctl -
AWS CLI - 也是 的先決條件
eksctl
如果您有這些工具,您可以在現有的開發機器上安裝這些工具,也可以使用以雲端為基礎的 CodeCatalyst 開發環境。CodeCatalyst 開發環境的優點是可輕鬆啟動和關閉,並與其他 CodeCatalyst 服務整合,可讓您以較少的步驟完成本教學課程。
本教學假設您將使用 CodeCatalyst 開發環境。
下列指示說明啟動 CodeCatalyst 開發環境並使用必要工具進行設定的快速方法,但如果您需要詳細說明,請參閱:
-
本指南中的 建立開發環境。
-
《Amazon EKS 使用者指南》中的安裝 kubectl。
-
《Amazon EKS 使用者指南》中的安裝或升級 eksctl。
-
AWS Command Line Interface 《 使用者指南》中的安裝或更新最新版本的 AWS CLI。
啟動開發環境
在 https://https://codecatalyst.aws/
開啟 CodeCatalyst 主控台。 -
導覽至您的專案
codecatalyst-eks-project。 -
在導覽窗格中,選擇程式碼,然後選擇來源儲存庫。
-
選擇來源儲存庫的名稱
codecatalyst-eks-source-repository。 -
在最上方選擇建立開發環境,然後選擇 AWS Cloud9 (在瀏覽器中)。
-
確定已選取現有分支和主要分支中的工作,然後選擇建立。
您的開發環境會在新的瀏覽器索引標籤中啟動,您的儲存庫 (
codecatalyst-eks-source-repository) 會複製到其中。
安裝和設定 kubectl
-
在開發環境終端機中,輸入:
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/linux/amd64/kubectl -
輸入:
chmod +x ./kubectl -
輸入:
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin -
輸入:
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc -
輸入:
kubectl version --short --client -
檢查版本是否出現。
您現在已安裝
kubectl。
安裝和設定 eksctl
注意
eksctl 並非嚴格要求,因為您可以kubectl改為使用 。不過, eksctl 具有將大部分叢集組態自動化的好處,因此是本教學課程建議的工具。
-
在開發環境終端機中,輸入:
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp -
輸入:
sudo cp /tmp/eksctl /usr/bin -
輸入:
eksctl version -
檢查版本是否出現。
您現在已安裝
eksctl。
驗證 AWS CLI 是否已安裝
-
在開發環境終端機中,輸入:
aws --version -
檢查版本是否出現,以確認 AWS CLI 已安裝 。
完成其餘程序, AWS CLI 以使用存取所需的許可來設定 AWS。
若要設定 AWS CLI
您必須 AWS CLI 使用存取金鑰和工作階段字符來設定 ,讓它存取 AWS 服務。下列指示提供設定金鑰和字符的快速方法,但如果您想要詳細說明,請參閱AWS Command Line Interface 《 使用者指南》中的設定 AWS CLI 。
-
建立 IAM Identity Center 使用者,如下所示:
登入 AWS 管理主控台 ,並在 https://https://console.aws.amazon.com/singlesignon/
開啟 AWS IAM Identity Center 主控台。 (如果您從未登入 IAM Identity Center,您可能需要選擇啟用。)
注意
請務必使用連線至 CodeCatalyst 空間 AWS 帳戶 的 登入。您可以透過導覽至您的空間並選擇 AWS 帳戶索引標籤來驗證哪個帳戶已連線。如需詳細資訊,請參閱建立空間。
-
在導覽窗格中,選擇 使用者,然後選擇 新增使用者。
-
在使用者名稱中,輸入:
codecatalyst-eks-user -
在密碼下,選擇產生您可以與此使用者共用的一次性密碼。
-
在電子郵件地址和確認電子郵件地址中,輸入 IAM Identity Center 中尚不存在的電子郵件地址。
-
在名字中,輸入:
codecatalyst-eks-user -
在姓氏中,輸入:
codecatalyst-eks-user -
在顯示名稱中,保留:
codecatalyst-eks-user codecatalyst-eks-user -
選擇下一步。
-
在新增使用者至群組頁面上,選擇下一步。
-
在檢閱和新增使用者頁面上,檢閱資訊,然後選擇新增使用者。
一次性密碼對話方塊隨即出現。
-
選擇複製,然後將登入資訊貼到文字檔案。登入資訊包含 AWS 存取入口網站 URL、使用者名稱和一次性密碼。
-
選擇關閉。
-
建立許可集,如下所示:
-
在導覽窗格中,選擇許可集,然後選擇建立許可集。
-
選擇預先定義的許可集,然後選取 AdministratorAccess。此政策提供所有 的完整許可 AWS 服務。
-
選擇下一步。
-
在許可集名稱中,移除
AdministratorAccess並輸入:codecatalyst-eks-permission-set -
選擇下一步。
-
在檢閱和建立頁面上,檢閱資訊,然後選擇建立。
-
-
將許可集指派給
codecatalyst-eks-user,如下所示:-
在導覽窗格中,選擇 AWS 帳戶,然後選取 AWS 帳戶 您目前登入之 旁的核取方塊。
-
選擇指派使用者或群組。
-
選擇使用者索引標籤。
-
選取 旁的核取方塊
codecatalyst-eks-user。 -
選擇下一步。
-
選取 旁的核取方塊
codecatalyst-eks-permission-set。 -
選擇下一步。
-
檢閱資訊,然後選擇提交。
您現在已將
codecatalyst-eks-user和codecatalyst-eks-permission-set指派給您的 AWS 帳戶,並將它們繫結在一起。
-
-
取得
codecatalyst-eks-user的存取金鑰和工作階段字符,如下所示:-
請確定您擁有 AWS 存取入口網站 URL 以及 的使用者名稱和一次性密碼
codecatalyst-eks-user。您應該稍早已將此資訊複製到文字編輯器。注意
如果您沒有此資訊,請前往 IAM Identity Center 的詳細資訊
codecatalyst-eks-user頁面,選擇重設密碼、產生一次性密碼 【...】 和再次重設密碼,以在畫面上顯示資訊。 -
登出 AWS。
-
將 AWS 存取入口網站 URL 貼到瀏覽器的地址列。
-
使用 登入:
-
使用者名稱:
codecatalyst-eks-user -
密碼:
one-time-password
-
-
在設定新密碼中,輸入新密碼,然後選擇設定新密碼。
畫面上會出現一個AWS 帳戶方塊。
-
選擇 AWS 帳戶,然後選擇 AWS 帳戶 您指派
codecatalyst-eks-user使用者和許可集的 名稱。 -
在 旁
codecatalyst-eks-permission-set,選擇命令列或程式設計存取。 -
在頁面中間複製命令。它們看起來類似以下內容:
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" export AWS_SESSION_TOKEN="session-token"...其中
session-token是長隨機字串。
-
-
將存取金鑰和工作階段字符新增至 AWS CLI,如下所示:
-
返回您的 CodeCatalyst 開發環境。
-
在終端機提示中,貼上您複製的命令。按 Enter。
您現在已 AWS CLI 使用存取金鑰和工作階段字符設定 。您現在可以使用 AWS CLI 完成本教學課程所需的任務。
重要
如果您在本教學課程中的任何時間看到類似如下的訊息:
Unable to locate credentials. You can configure credentials by running "aws configure".或者:
ExpiredToken: The security token included in the request is expired...這是因為您的 AWS CLI 工作階段已過期。在此情況下,請勿執行
aws configure命令。請改用此程序步驟 4 中以 開頭的指示Obtain codecatalyst-eks-user's access key and session token來重新整理工作階段。
-
步驟 2:建立 Amazon EKS 叢集
在本節中,您會在 Amazon EKS 中建立叢集。以下指示說明使用 建立叢集的快速方法eksctl,但如果您想要詳細說明,請參閱:
-
《Amazon EKS 使用者指南》中的 eksctl 入門
或
-
主控台入門和《Amazon EKS 使用者指南 AWS CLI》中的 (本主題提供建立叢集
kubectl的說明)
注意
CodeCatalyst 與 Amazon EKS 整合不支援私有叢集。
開始之前
請確定您已在開發機器上完成下列任務:
-
已安裝
eksctl公用程式。 -
已安裝
kubectl公用程式。 -
安裝 並使用存取金鑰 AWS CLI 和工作階段字符進行設定。
如需如何完成這些任務的資訊,請參閱 步驟 1:設定您的開發機器。
建立叢集
重要
請勿使用 Amazon EKS 服務的使用者介面來建立叢集,因為叢集無法正確設定。使用 eksctl公用程式,如下列步驟所述。
-
前往您的開發環境。
-
建立叢集和節點:
eksctl create cluster --namecodecatalyst-eks-cluster--regionus-west-2其中:
-
codecatalyst-eks-cluster會取代為您要提供叢集的名稱。 -
us-west-2已取代為您的 區域。
10-20 分鐘後,會出現類似以下內容的訊息:
EKS cluster "codecatalyst-eks-cluster" in "us-west-2" region is ready注意
建立叢集時 AWS ,您會看到多個
waiting for CloudFormation stack訊息。這是預期的行為。 -
-
確認您的叢集已成功建立:
kubectl cluster-info您將看到類似以下的訊息,指出成功的叢集建立:
Kubernetes master is running at https://long-string.gr7.us-west-2.eks.amazonaws.com CoreDNS is running at https://long-string.gr7.us-west-2.eks.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
步驟 3:建立 Amazon ECR 映像儲存庫
在本節中,您會在 Amazon Elastic Container Registry (Amazon ECR) 中建立私有映像儲存庫。此儲存庫會存放教學課程的 Docker 映像。
如需 Amazon ECR 的詳細資訊,請參閱《Amazon Elastic Container Registry 使用者指南》。
在 Amazon ECR 中建立映像儲存庫
-
前往您的開發環境。
-
在 Amazon ECR 中建立空儲存庫:
aws ecr create-repository --repository-namecodecatalyst-eks-image-repo將
codecatalyst-eks-image-repo取代為您要提供 Amazon ECR 儲存庫的名稱。本教學假設您已將儲存庫命名為
codecatalyst-eks-image-repo。 -
顯示 Amazon ECR 儲存庫的詳細資訊:
aws ecr describe-repositories \ --repository-names codecatalyst-eks-image-repo -
請記下
“repositoryUri”:值,例如111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo。稍後在將儲存庫新增至工作流程時需要它。
步驟 4:新增來源檔案
在本節中,您將應用程式來源檔案新增至來源儲存庫 (codecatalyst-eks-source-repository)。它們包含:
-
index.html檔案 – 顯示「Hello, World!」 瀏覽器中的 訊息。 -
Dockerfile – 描述要用於 Docker 映像的基本映像,以及要套用的 Docker 命令。
-
deployment.yaml檔案 – 定義 Kubernetes 服務和部署的 Kubernetes 資訊清單。
資料夾結構如下所示:
|— codecatalyst-eks-source-repository |— Kubernetes |— deployment.yaml |— public-html | |— index.html |— Dockerfile
index.html
index.html 檔案會顯示「Hello, World!」 瀏覽器中的 訊息。
新增 index.html 檔案
-
前往您的開發環境。
-
在 中
codecatalyst-eks-source-repository,建立名為 的資料夾public-html。 -
在 中
/public-html,index.html使用下列內容建立名為 的檔案:<html> <head> <title>Hello World</title> <style> body { background-color: black; text-align: center; color: white; font-family: Arial, Helvetica, sans-serif; } </style> </head> <body> <h1>Hello, World!</h1> </body> </html> -
在終端機提示中,輸入:
cd /projects/codecatalyst-eks-source-repository -
新增、遞交和推送:
git add . git commit -m "add public-html/index.html" git pushindex.html會新增至public-html資料夾中的儲存庫。
Dockerfile
Dockerfile 說明要使用的基本 Docker 映像,以及要套用的 Docker 命令。如需 Dockerfile 的詳細資訊,請參閱 Dockerfile 參考
此處指定的 Dockerfile 表示使用 Apache 2.4 基礎映像 (httpd)。它還包含將名為 的來源檔案複製到提供網頁之 Apache 伺服器上的index.html資料夾的說明。Dockerfile 中的EXPOSE說明會告知 Docker 容器正在接聽連接埠 80。
新增 Dockerfile
-
在 中
codecatalyst-eks-source-repository,Dockerfile使用下列內容建立名為 的檔案:FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80請勿包含副檔名。
重要
Dockerfile 必須位於儲存庫的根資料夾中。工作流程的
Docker build命令預期會存在。 -
新增、遞交和推送:
git add . git commit -m "add Dockerfile" git pushDockerfile 會新增至您的儲存庫。
deployment.yaml
在本節中,您會將deployment.yaml檔案新增至儲存庫。deployment.yaml 檔案是 Kubernetes 資訊清單,定義兩個要執行的 Kubernetes 資源類型:「服務和「部署」。
-
「服務」會將負載平衡器部署到 Amazon EC2。負載平衡器為您提供面向網際網路的公有 URL 和標準連接埠 (連接埠 80),可用來瀏覽至 'Hello, World!' 應用程式。
-
「部署」會部署三個 Pod,而每個 Pod 都會包含一個具有「Hello, World!」的 Docker 容器 應用程式。這三個 Pod 會部署到您建立叢集時建立的節點。
本教學課程中的資訊清單很簡短;不過,資訊清單可以包含任意數量的 Kubernetes 資源類型,例如 Pod、任務、輸入和網路政策。此外,如果您的部署很複雜,您可以使用多個資訊清單檔案。
新增 deployment.yaml 檔案
-
在 中
codecatalyst-eks-source-repository,建立名為 的資料夾Kubernetes。 -
在 中
/Kubernetes,建立名為 的檔案deployment.yaml,其中包含下列內容:apiVersion: v1 kind: Service metadata: name: my-service labels: app: my-app spec: type: LoadBalancer selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: codecatalyst-eks-container # The $REPOSITORY_URI and $IMAGE_TAG placeholders will be replaced by actual values supplied by the build action in your workflow image: $REPOSITORY_URI:$IMAGE_TAG ports: - containerPort: 80 -
新增、遞交和推送:
git add . git commit -m "add Kubernetes/deployment.yaml" git pushdeployment.yaml檔案會新增至名為 的資料夾中的儲存庫Kubernetes。
您現在已新增所有來源檔案。
花一點時間仔細檢查您的工作,並確保將所有檔案放在正確的資料夾中。資料夾結構如下所示:
|— codecatalyst-eks-source-repository |— Kubernetes |— deployment.yaml |— public-html | |— index.html |— Dockerfile
步驟 5:建立 AWS 角色
在本節中,您會建立 CodeCatalyst AWS 工作流程運作所需的 IAM 角色。這些角色包括:
-
組建角色 – 授予 CodeCatalyst 組建動作 (在工作流程中) 存取 AWS 您的帳戶和寫入 Amazon ECR 和 Amazon EC2 的許可。
-
部署角色 – 授予 CodeCatalyst 部署到 Kubernetes 叢集動作 (在工作流程中) 存取 AWS 您的帳戶和 Amazon EKS 的許可。
如需 IAM 角色的詳細資訊,請參閱AWS Identity and Access Management 《 使用者指南》中的 IAM 角色。
注意
若要節省時間,您可以建立稱為角色的單一CodeCatalystWorkflowDevelopmentRole-角色,而不是先前列出的兩個角色。如需詳細資訊,請參閱為您的帳戶和空間建立 CodeCatalystWorkflowDevelopmentRole-spaceName角色。了解該spaceNameCodeCatalystWorkflowDevelopmentRole-角色具有非常廣泛的許可,這可能會構成安全風險。我們建議您只在安全性較少的教學課程和案例中使用此角色。本教學假設您正在建立先前列出的兩個角色。spaceName
若要建立建置和部署角色,請完成下列一系列程序。
1. 為兩個角色建立信任政策
-
前往您的開發環境。
-
在
Cloud9-目錄中,建立名為 的檔案long-stringcodecatalyst-eks-trust-policy.json,其中包含下列內容:
2. 建立建置角色的建置政策
-
在
Cloud9-目錄中,建立名為 的檔案long-stringcodecatalyst-eks-build-policy.json,其中包含下列內容:注意
第一次使用該角色執行工作流程動作時,請在資源政策陳述式中使用萬用字元,然後在資源名稱可用後縮小政策範圍。
"Resource": "*"
3. 建立部署角色的部署政策
-
在
Cloud9-目錄中,建立名為 的檔案long-stringcodecatalyst-eks-deploy-policy.json,其中包含下列內容:注意
第一次使用該角色執行工作流程動作時,請在資源政策陳述式中使用萬用字元,然後在資源名稱可用後縮小政策範圍。
"Resource": "*"
您現在已將三個政策文件新增至開發環境。您的目錄結構現在如下所示:
|— Cloud9-long-string|— .c9 |— codecatalyst-eks-source-repository |— Kubernetes |— public-html |— Dockerfile codecatalyst-eks-build-policy.json codecatalyst-eks-deploy-policy.json codecatalyst-eks-trust-policy.json
4. 將建置政策新增至 AWS
-
在開發環境終端機中,輸入:
cd /projects -
輸入:
aws iam create-policy \ --policy-name codecatalyst-eks-build-policy \ --policy-document file://codecatalyst-eks-build-policy.json -
按 Enter。
-
在命令輸出中,記下
"arn":值,例如arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy。您稍後需要此 ARN。
5. 將部署政策新增至 AWS
-
輸入:
aws iam create-policy \ --policy-name codecatalyst-eks-deploy-policy \ --policy-document file://codecatalyst-eks-deploy-policy.json -
按 Enter。
-
在命令輸出中,記下部署政策
"arn":的值,例如arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy。您稍後需要此 ARN。
6. 建立建置角色
-
輸入:
aws iam create-role \ --role-name codecatalyst-eks-build-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json -
按 Enter。
-
輸入:
aws iam attach-role-policy \ --role-name codecatalyst-eks-build-role \ --policy-arnarn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy其中
arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy會取代為您先前記下的建置政策的 ARN。 -
按 Enter。
-
在終端機提示中,輸入:
aws iam get-role \ --role-name codecatalyst-eks-build-role -
按 Enter。
-
請記下角色
"Arn":的值,例如arn:aws:iam::111122223333:role/codecatalyst-eks-build-role。您稍後需要此 ARN。
7. 建立部署角色
-
輸入:
aws iam create-role \ --role-name codecatalyst-eks-deploy-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json -
按 Enter。
-
輸入:
aws iam attach-role-policy \ --role-name codecatalyst-eks-deploy-role \ --policy-arnarn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy其中
arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy會取代為您先前記下的部署政策的 ARN。 -
按 Enter。
-
輸入:
aws iam get-role \ --role-name codecatalyst-eks-deploy-role -
按 Enter。
-
請記下角色
"Arn":的值,例如arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role。您稍後需要此 ARN。
您現在已建立建置和部署角色,並記下其 ARNs。
步驟 6:將 AWS 角色新增至 CodeCatalyst
在此步驟中,您將建置角色 (codecatalyst-eks-build-role) 和部署角色 (codecatalyst-eks-deploy-role) 新增至您連線至空間 AWS 帳戶 的 。這可讓角色在您的工作流程中使用。
將建置和部署角色新增至您的 AWS 帳戶
-
在 CodeCatalyst 主控台中,導覽至您的空間。
-
在頂端,選擇設定。
-
在導覽窗格中,選擇AWS 帳戶。帳戶清單隨即出現。
-
在 Amazon CodeCatalyst 顯示名稱欄中,複製 AWS 帳戶 您建立建置和部署角色的 顯示名稱。(可能是數字。) 稍後建立工作流程時,您將需要此值。
-
選擇顯示名稱。
-
從管理主控台選擇 AWS 管理角色。
將 IAM 角色新增至 Amazon CodeCatalyst 空間頁面隨即出現。您可能需要登入才能存取頁面。
-
選取新增您在 IAM 中建立的現有角色。
下拉式清單隨即出現。清單會顯示建置和部署角色,以及具有包含
codecatalyst-runner.amazonaws.com.rproxy.govskope.cacodecatalyst.amazonaws.com和服務主體之信任政策的任何其他 IAM 角色。 -
從下拉式清單中,新增:
-
codecatalyst-eks-build-role -
codecatalyst-eks-deploy-role
注意
如果您看到
The security token included in the request is invalid,可能是因為您沒有適當的許可。若要修正此問題,請以您建立 CodeCatalyst 空間時使用 AWS 的帳戶重新登入 AWS 。 -
-
返回 CodeCatalyst 主控台並重新整理頁面。
建置和部署角色現在應該會出現在 IAM 角色下。
這些角色現在可用於 CodeCatalyst 工作流程。
步驟 7:更新 ConfigMap
您必須將您在 中建立的部署角色新增至 步驟 5:建立 AWS 角色 Kubernetes ConfigMap 檔案,讓部署至 Kubernetes 叢集動作 (在您的工作流程中) 能夠存取叢集並與叢集互動。您可以使用 eksctl或 kubectl 來執行此任務。
使用 eksctl 設定 Kubernetes ConfigMap 檔案
-
在開發環境終端機中,輸入:
eksctl create iamidentitymapping --clustercodecatalyst-eks-cluster--arnarn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role--group system:masters --usernamecodecatalyst-eks-deploy-role--regionus-west-2其中:
-
codecatalyst-eks-cluster會取代為 Amazon EKS 叢集的叢集名稱。 -
arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role會取代為您在 中建立之部署角色的 ARN步驟 5:建立 AWS 角色。 -
codecatalyst-eks-deploy-role( 旁--username) 會取代為您在 中建立的部署角色名稱步驟 5:建立 AWS 角色。注意
如果您決定不建立部署角色,請將
codecatalyst-eks-deploy-role取代為CodeCatalystWorkflowDevelopmentRole-角色的名稱。如需有關此角色的詳細資訊,請參閱 步驟 5:建立 AWS 角色。spaceName -
us-west-2已取代為您的 區域。
如需此命令的詳細資訊,請參閱管理 IAM 使用者和角色
。 類似下列的訊息隨即出現:
2023-06-09 00:58:29 [ℹ] checking arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role against entries in the auth ConfigMap 2023-06-09 00:58:29 [ℹ] adding identity "arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role" to auth ConfigMap
-
使用 kubectl 設定 Kubernetes ConfigMap 檔案
-
在開發環境終端機中,輸入:
kubectl edit configmap -n kube-system aws-authConfigMap 檔案會出現在畫面上。
-
新增紅色斜體的文字:
# Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/eksctl-codecatalyst-eks-cluster-n-NodeInstanceRole-16BC456ME6YR5 username: system:node:{{EC2PrivateDNSName}}- groups: - system:masters rolearn: arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role username: codecatalyst-eks-deploy-rolemapUsers: | [] kind: ConfigMap metadata: creationTimestamp: "2023-06-08T19:04:39Z" managedFields: ...其中:
-
arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role會取代為您在 中建立之部署角色的 ARN步驟 5:建立 AWS 角色。 -
codecatalyst-eks-deploy-role( 旁username:) 會取代為您在 中建立的部署角色名稱步驟 5:建立 AWS 角色。注意
如果您決定不建立部署角色,請將
codecatalyst-eks-deploy-role取代為CodeCatalystWorkflowDevelopmentRole-角色的名稱。如需有關此角色的詳細資訊,請參閱 步驟 5:建立 AWS 角色。spaceName
如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的啟用叢集的 IAM 主體存取權。
-
您現在已提供部署角色,並透過擴充部署至 Amazon EKS 動作,將system:masters許可授予您的 Kubernetes 叢集。
步驟 8:建立和執行工作流程
在此步驟中,您會建立工作流程來取得來源檔案、將其建置到 Docker 映像中,然後將映像部署到 Amazon EKS 叢集中的樹型 Pod。
工作流程包含下列依順序執行的建置區塊:
-
觸發條件 – 當您將變更推送至來源儲存庫時,此觸發條件會自動啟動工作流程執行。關於觸發條件的詳細資訊,請參閱 使用觸發程序自動啟動工作流程執行。
-
建置動作 (
BuildBackend) – 觸發時,動作會使用 Dockerfile 建置 Docker 映像,並將映像推送至 Amazon ECR。建置動作也會使用正確的值更新deployment.yaml檔案中的$REPOSITORY_URI和$IMAGE_TAG變數,然後建立此檔案和Kubernetes資料夾中任何其他檔案的輸出成品。在本教學課程中,Kubernetes資料夾中唯一的檔案是 ,deployment.yaml但您可以包含更多檔案。成品會用作部署動作的輸入,接下來是 。如需建置動作的詳細資訊,請參閱 使用工作流程建置。
-
部署動作 (
DeployToEKS) – 完成建置動作後,部署動作會尋找建置動作 (Manifests) 產生的輸出成品,並在其中尋找deployment.yaml檔案。動作接著會遵循deployment.yaml檔案中的指示來執行三個 Pod,每個都包含單一 'Hello, World!' Docker 容器 - Amazon EKS 叢集內部。
若要建立工作流程
-
前往 CodeCatalyst 主控台。
-
導覽至您的專案 (
codecatalyst-eks-project)。 -
在導覽窗格中,選擇 CI/CD,然後選擇工作流程。
-
選擇建立工作流程。
-
針對來源儲存庫,選擇
codecatalyst-eks-source-repository。 -
針對分支,選擇
main。 -
選擇建立。
-
刪除 YAML 範例程式碼。
-
新增下列 YAML 程式碼以建立新的工作流程定義檔案:
注意
如需工作流程定義檔案的詳細資訊,請參閱 工作流程 YAML 定義。
注意
在後續的 YAML 程式碼中,您可以視需要省略這些
Connections:區段。如果您省略這些區段,您必須確保環境中預設 IAM 角色欄位中指定的角色包含 中所述兩個角色的許可和信任政策步驟 6:將 AWS 角色新增至 CodeCatalyst。如需使用預設 IAM 角色設定環境的詳細資訊,請參閱 建立環境。Name: codecatalyst-eks-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name:codecatalyst-eks-environmentConnections: - Name:codecatalyst-account-connectionRole:codecatalyst-eks-build-roleInputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value:111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo- Name: IMAGE_TAG Value: ${WorkflowSource.CommitId} Configuration: Steps: #pre_build: - Run: echo Logging in to Amazon ECR... - Run: aws --version - Run: aws ecr get-login-password --regionus-west-2| docker login --username AWS --password-stdin111122223333.dkr.ecr.us-west-2.amazonaws.com#build: - Run: echo Build started on `date` - Run: echo Building the Docker image... - Run: docker build -t $REPOSITORY_URI:latest . - Run: docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG #post_build: - Run: echo Build completed on `date` - Run: echo Pushing the Docker images... - Run: docker push $REPOSITORY_URI:latest - Run: docker push $REPOSITORY_URI:$IMAGE_TAG # Replace the variables in deployment.yaml - Run: find Kubernetes/ -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find Kubernetes/ -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat Kubernetes/* # The output artifact will be a zip file that contains Kubernetes manifest files. Outputs: Artifacts: - Name: Manifests Files: - "Kubernetes/*" DeployToEKS: DependsOn: - BuildBackend Identifier: aws/kubernetes-deploy@v1 Environment: Name:codecatalyst-eks-environmentConnections: - Name:codecatalyst-account-connectionRole:codecatalyst-eks-deploy-roleInputs: Artifacts: - Manifests Configuration: Namespace: default Region:us-west-2Cluster: codecatalyst-eks-cluster Manifests: Kubernetes/在上述程式碼中,取代:
-
兩個
codecatalyst-eks-environment執行個體,其名稱為您在 中建立的環境先決條件。 -
這兩個
codecatalyst-account-connection執行個體都具有您帳戶連線的顯示名稱。顯示名稱可能是數字。如需詳細資訊,請參閱步驟 6:將 AWS 角色新增至 CodeCatalyst。 -
codecatalyst-eks-build-role,內含您在 中建立的建置角色名稱步驟 5:建立 AWS 角色。 -
111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo(在Value:屬性中),其中包含您在 中建立的 Amazon ECR 儲存庫的 URI步驟 3:建立 Amazon ECR 映像儲存庫。 -
111122223333.dkr.ecr.us-west-2.amazonaws.com(在Run: aws ecr命令中),不含映像尾碼 () 的 Amazon ECR 儲存庫的 URI/codecatalyst-eks-image-repo。 -
codecatalyst-eks-deploy-role,內含您在 中建立的部署角色名稱步驟 5:建立 AWS 角色。 -
使用 AWS 區域碼的
us-west-2這兩個執行個體。如需區域代碼清單,請參閱《》中的區域端點AWS 一般參考。
注意
如果您決定不建立建置和部署角色,請將
codecatalyst-eks-build-role和codecatalyst-eks-deploy-role取代為CodeCatalystWorkflowDevelopmentRole-角色的名稱。如需有關此角色的詳細資訊,請參閱 步驟 5:建立 AWS 角色。spaceName -
-
(選用) 選擇驗證,以確保 YAML 程式碼在遞交之前有效。
-
選擇 Commit (遞交)。
-
在遞交工作流程對話方塊中,輸入下列內容:
-
針對遞交訊息,移除文字並輸入:
Add first workflow -
針對儲存庫,選擇
codecatalyst-eks-source-repository。 -
針對分支名稱,選擇主要。
-
選擇 Commit (遞交)。
您現在已建立工作流程。由於工作流程頂端定義的觸發條件,工作流程執行會自動啟動。具體而言,當您將
workflow.yaml檔案遞交 (並推送) 至來源儲存庫時,觸發會啟動工作流程執行。 -
檢視工作流程執行進度
-
在 CodeCatalyst 主控台的導覽窗格中,選擇 CI/CD,然後選擇工作流程。
-
選擇您剛建立的工作流程
codecatalyst-eks-workflow。 -
選擇 BuildBackend 以查看建置進度。
-
選擇 DeployToEKS 以查看部署進度。
如需檢視執行詳細資訊的詳細資訊,請參閱 檢視工作流程執行狀態和詳細資訊。
驗證部署
前往 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在左側底部附近,選擇負載平衡器。
-
選取在 Kubernetes 部署中建立的負載平衡器。如果您不確定要選擇哪個負載平衡器,請在標籤索引標籤下尋找下列標籤:
-
kubernetes.io/service-name -
kubernetes.io/cluster/ekstutorialcluster
-
-
選取正確的負載平衡器後,選擇描述索引標籤。
-
將 DNS 名稱值複製並貼到瀏覽器的地址列。
'Hello, World!' 網頁會顯示在瀏覽器中,表示您已成功部署應用程式。
步驟 9:變更來源檔案
在本節中,您會變更來源儲存庫中的 index.html 檔案。此變更會導致工作流程建立新的 Docker 映像、使用遞交 ID 標記它、將其推送至 Amazon ECR,並將其部署至 Amazon ECS。
變更 index.html
-
前往您的開發環境。
-
在終端機提示中,變更至您的來源儲存庫:
cd /projects/codecatalyst-eks-source-repository -
提取最新的工作流程變更:
git pull -
打開
codecatalyst-eks-source-repository/public-html/index.html. -
在第 14 行,將
Hello, World!文字變更為Tutorial complete!。 -
新增、遞交和推送:
git add . git commit -m "update index.html title" git push工作流程執行會自動啟動。
-
(選用) 輸入:
git show HEAD請注意
index.html變更的遞交 ID。此遞交 ID 會標記到您剛啟動的工作流程執行所部署的 Docker 映像。 -
觀看部署進度:
-
在 CodeCatalyst 主控台的導覽窗格中,選擇 CI/CD,然後選擇工作流程。
-
選擇
codecatalyst-eks-workflow以檢視最新的執行。 -
選擇 BuildBackend 和 DeployToEKS 以查看工作流程執行進度。
-
-
確認您的應用程式已更新,如下所示:
前往 https://console.aws.amazon.com/ec2/
開啟 Amazon EC2 主控台。 -
在左側底部附近,選擇負載平衡器。
-
選取在 Kubernetes 部署中建立的負載平衡器。
-
將 DNS 名稱值複製並貼到瀏覽器的地址列。
「教學完成!」 網頁會顯示在瀏覽器中,表示您已成功部署應用程式的新修訂版。
-
(選用) 在 中 AWS,切換到 Amazon ECR 主控台,並確認新的 Docker 映像已標記此程序步驟 7 的遞交 ID。
清除
您應該清除您的環境,以免不必要地向您收取本教學課程使用的儲存和運算資源的費用。
清理方式
-
刪除叢集:
-
在開發環境終端機中,輸入:
eksctl delete cluster --region=us-west-2--name=codecatalyst-eks-cluster其中:
-
us-west-2已取代為您的 區域。 -
codecatalyst-eks-cluster會取代為您建立的叢集名稱。
5-10 分鐘後,會刪除叢集和相關聯的資源,包括但不限於 CloudFormation 堆疊、節點群組 (在 Amazon EC2 中) 和負載平衡器。
-
重要
如果
eksctl delete cluster命令無法運作,您可能需要重新整理登入 AWS 資料或登入kubectl資料。如果您不確定要重新整理哪些登入資料,請先重新整理 AWS 登入資料。若要重新整理您的 AWS 登入資料,請參閱 如何修正「找不到登入資料」和「ExpiredToken」錯誤?。若要重新整理您的kubectl登入資料,請參閱 如何修正「無法連線至伺服器」錯誤?。 -
-
在 AWS 主控台中,如下所示進行清除:
-
在 Amazon ECR 中,刪除
codecatalyst-eks-image-repo。 -
在 IAM Identity Center 中,刪除:
-
codecatalyst-eks-user -
codecatalyst-eks-permission-set
-
-
在 IAM 中,刪除:
-
codecatalyst-eks-build-role -
codecatalyst-eks-deploy-role -
codecatalyst-eks-build-policy -
codecatalyst-eks-deploy-policy
-
-
-
在 CodeCatalyst 主控台中,如下所示進行清除:
-
刪除
codecatalyst-eks-workflow。 -
刪除
codecatalyst-eks-environment。 -
刪除
codecatalyst-eks-source-repository。 -
刪除您的開發環境。
-
刪除
codecatalyst-eks-project。
-
在本教學課程中,您已了解如何使用 CodeCatalyst 工作流程和部署至 Kubernetes 叢集動作,將應用程式部署至 Amazon EKS 服務。