教學課程:將應用程式部署到 Amazon EKS - Amazon CodeCatalyst

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

教學課程:將應用程式部署到 Amazon EKS

在本教學中,您將學習如何使用 Amazon CodeCatalyst 工作流程、Amazon 和其他一些服務將容器化應用程式部署到 Amazon 彈性 Kubernetes 服務。EKS AWS 部署的應用程序是一個簡單的「你好,世界!」 建立在 Apache Web 服務器碼頭圖像上的網站。本教學將引導您完成必要的準備工作,例如設定開發機器和 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 帳戶 Connect 到它。

    • 對於「預設」IAM 角色,請選擇任何角色。稍後您將指定不同的角色。

    如需詳細資訊,請參閱部署至 AWS 帳戶 和 VPCs

步驟 1:設定您的開發機器

本教學課程的第一個步驟是使用一些您將在本教學課程中使用的工具來設定開發機器。這些工具是:

  • eksctl公用程式 — 用於建立叢集

  • kubectl實用程序-的先決條件 eksctl

  • 的 AWS CLI -也是一個先決條件 eksctl

您可以在現有的開發電腦上安裝這些工具 (如果有的話),或者您可以使用基於雲的 CodeCatalyst 開發環境。 CodeCatalyst 開發環境的好處在於,它很容易啟動和拆卸,並與其他 CodeCatalyst 服務整合,讓您以更少的步驟完成本教學課程。

本教學課程假設您將使用 CodeCatalyst 開發環境。

以下說明描述了啟動 CodeCatalyst 開發環境並使用所需工具進行配置的快速方法,但是如果您需要詳細說明,請參閱:

若要啟動開發環境
  1. 開啟主 CodeCatalyst 控台,網址為 https://codecatalyst.aws/

  2. 導航到您的項目,codecatalyst-eks-project

  3. 在瀏覽窗格中,選擇 [程式碼],然後選擇 [原始碼儲存庫]。

  4. 選擇來源儲存庫的名稱codecatalyst-eks-source-repository

  5. 在頂部附近選擇創建開發環境,然後選擇 AWS Cloud9 (在瀏覽器中)

  6. 確定已選取 [在現有分支和主要工作],然後選擇 [建立]。

    您的開發環境會在新的瀏覽器索引標籤中啟動,而您的存放庫 (codecatalyst-eks-source-repository) 則會複製到其中。

若要安裝和設定 Kubectl
  1. 在開發環境終端中,輸入:

    curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.18.9/2020-11-02/bin/linux/amd64/kubectl
  2. 輸入:

    chmod +x ./kubectl
  3. 輸入:

    mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
  4. 輸入:

    echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
  5. 輸入:

    kubectl version --short --client
  6. 檢查是否顯示版本。

    您現在已經安裝了kubectl

若要安裝和設定 Eksctl
注意

eksctl不是嚴格要求的,因為你可以使kubectl用。但是,具eksctl有自動化大部分叢集配置的好處,因此是本教學課程建議使用的工具。

  1. 在開發環境終端中,輸入:

    curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
  2. 輸入:

    sudo cp /tmp/eksctl /usr/bin
  3. 輸入:

    eksctl version
  4. 檢查是否顯示版本。

    您現在已經安裝了eksctl

若要確認 AWS CLI 已安裝
  1. 在開發環境終端中,輸入:

    aws --version
  2. 檢查是否顯示版本以確認 AWS CLI 已安裝。

    完成剩餘的程序,以配置 AWS CLI 具有必要的存取權限 AWS。

若要設定 AWS CLI

您必須配置使 AWS CLI 用存取金鑰和工作階段權杖,才能授予其對 AWS 服務的存取權。下列指示提供了設定金鑰和權杖的快速方法,但如果您需要詳細指示,請參閱《AWS Command Line Interface 使用者指南》 AWS CLI中的〈設定〉。

  1. 建立IAM身分識別中心使用者,執行方式如下:

    1. 登入 AWS Management Console 並開啟 AWS IAM Identity Center 主控台,位於https://console.aws.amazon.com/singlesignon/

      如果您之前從未登入IAM身分識別中心,您可能需要選擇 [啟用]。)

      注意

      確保您使用連接到您的 CodeCatalyst空間的登錄。 AWS 帳戶 您可以瀏覽至您的空間並選擇 [帳戶] 索引標籤,確認已連結哪個AWS帳戶。如需詳細資訊,請參閱建立空間

    2. 在導覽窗格中,選擇 使用者,然後選擇 新增使用者

    3. 使用者名稱中,輸入:

      codecatalyst-eks-user
    4. 在 [密碼] 下方,選擇 [產生一次性密碼,您可以與此使用者共用]。

    5. 在 [電子郵件地址] 和 [確認電子郵件地址] 中,輸入IAM身分識別中心中尚未存在的電子郵件地址。

    6. 名字中,輸入:

      codecatalyst-eks-user
    7. 姓氏中,輸入:

      codecatalyst-eks-user
    8. [顯示名稱] 中,保留:

      codecatalyst-eks-user codecatalyst-eks-user
    9. 選擇 Next (下一步)

    10. 在 [新增使用者至群組] 頁面上,選擇 [下一步]。

    11. 在 [檢閱並新增使用者] 頁面上,檢閱資訊並選擇 [新增使用者]。

      這時系統顯示一次性密碼對話框。

    12. 選擇「複製」,然後將登錄信息粘貼到文本文件中。登入資訊包含 AWS 存取入口網站URL、使用者名稱和一次性密碼。

    13. 選擇關閉

  2. 建立權限集,執行方式如下:

    1. 在瀏覽窗格中,選擇 [權限集],然後選擇 [建立權限集]。

    2. 選擇預先定義的權限集,然後選取AdministratorAccess。此原則為所有人提供完整權限 AWS 服務。

    3. 選擇 Next (下一步)

    4. [權限集名稱] 中,移除AdministratorAccess並輸入:

      codecatalyst-eks-permission-set
    5. 選擇 Next (下一步)

    6. 在 [檢閱並建立] 頁面上,檢閱資訊並選擇 [建立]。

  3. 將權限集指派給codecatalyst-eks-user,執行方式如下:

    1. 在功 AWS 帳戶 能窗格中,選擇 AWS 帳戶,然後選取您目前登入的對象旁邊的核取方塊。

    2. 選擇 [指派使用者或群組]。

    3. 選擇 Users (使用者) 索引標籤。

    4. 選取旁邊的核取方塊codecatalyst-eks-user

    5. 選擇 Next (下一步)

    6. 選取旁邊的核取方塊codecatalyst-eks-permission-set

    7. 選擇 Next (下一步)

    8. 複查資訊,然後選擇「提交」。

      您現在已經分配codecatalyst-eks-usercodecatalyst-eks-permission-set將 AWS 帳戶它們綁定在一起。

  4. 獲取codecatalyst-eks-user的訪問密鑰和會話令牌,如下所示:

    1. 請確定您擁有的 AWS 存取入口網站以URL及的使用者名稱和一次性密碼codecatalyst-eks-user。您應該先前將此資訊複製到文字編輯器中。

      注意

      如果您沒有此資訊,請前往IAM身分識別中心的codecatalyst-eks-user詳細資料頁面,選擇 [重設密碼]、[產生一次性密碼 [...] ,然後再次重設密碼以在螢幕上顯示資訊。

    2. 登出 AWS。

    3. 將 AWS 訪問門戶粘貼URL到瀏覽器的地址欄中。

    4. 使用以下方式登入:

      • 用戶名

        codecatalyst-eks-user
      • 密碼

        one-time-password

    5. 在 [設定新密碼] 中,輸入新密碼並選擇 [設定新密碼]。

      螢幕上會出現一個AWS 帳戶方塊。

    6. 選擇 AWS 帳戶,然後選擇您 AWS 帳戶 為其指派codecatalyst-eks-user使用者和權限集的名稱。

    7. 在旁邊codecatalyst-eks-permission-set,選擇 [命令列] 或 [程式設計存取]。

    8. 複製頁面中間的命令。它們看起來類似於以下內容:

      export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" export AWS_SESSION_TOKEN="session-token"

      ... 在哪裡 session-token 是一個長的隨機字符串。

  5. 將存取金鑰和工作階段權杖新增至 AWS CLI,如下所示:

    1. 返回您的 CodeCatalyst 開發環境。

    2. 在終端機提示下,貼上您複製的指令。按 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 的 CodeCatalyst 整合不支援私有叢集EKS。

開始之前

請確定您已在開發電腦上完成下列工作:

  • 安裝了該eksctl實用程序。

  • 安裝了該kubectl實用程序。

  • 安裝 AWS CLI 並使用訪問密鑰和會話令牌對其進行配置。

如需如何完成這些工作的資訊,請參閱步驟 1:設定您的開發機器

建立叢集
重要

請勿使用 Amazon EKS 服務的使用者介面建立叢集,因為叢集無法正確設定。使用eksctl公用程式,如下列步驟所述。

  1. 移至您的開發環境。

  2. 建立叢集和節點:

    eksctl create cluster --name codecatalyst-eks-cluster --region us-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訊息。這是預期的行為。

  3. 確認您的叢集已成功建立:

    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 彈性容器註冊表(AmazonECR)中創建一個私有映像存儲庫。此儲存庫會儲存教學課程的 Docker 映像檔。

如需 Amazon 的詳細資訊ECR,請參閱 Amazon 彈性容器登錄使用者指南

在 Amazon 中創建映像存儲庫 ECR
  1. 移至您的開發環境。

  2. 在 Amazon 中創建一個空存儲庫ECR:

    aws ecr create-repository --repository-name codecatalyst-eks-image-repo

    Replace (取代) codecatalyst-eks-image-repo 與你想給 Amazon ECR 存儲庫的名稱。

    本教學課程假設您為儲存庫命名codecatalyst-eks-image-repo

  3. 顯示 Amazon ECR 存儲庫的詳細信息:

    aws ecr describe-repositories \ --repository-names codecatalyst-eks-image-repo
  4. 請注意“repositoryUri”:值,例如,111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-eks-image-repo

    稍後在將存放庫新增至工作流程時需要它。

步驟 4:添加源文件

在本節中,您會將應用程式來源檔案新增至來源儲存庫 (codecatalyst-eks-source-repository)。它們包括:

  • 一個index.html文件-顯示一個「你好,世界!」 在瀏覽器中的消息。

  • Docker 檔案 — 描述要用於 Docker 影像的基本影像,以及要套用到該影像的 Docker 指令。

  • deployment.yaml檔案 — 定義 Kubernetes 服務和部署的 Kubernetes 資訊清單。

資料夾結構如下:

|— codecatalyst-eks-source-repository |— Kubernetes |— deployment.yaml |— public-html | |— index.html |— Dockerfile

index.html

index.html文件顯示一個「你好,世界!」 在瀏覽器中的消息。

若要新增 index.html 檔案的步驟
  1. 移至您的開發環境。

  2. 在中codecatalyst-eks-source-repository,建立名為的資料夾public-html

  3. 在中/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>
  4. 在終端提示下,輸入:

    cd /projects/codecatalyst-eks-source-repository
  5. 添加,提交和推送:

    git add . git commit -m "add public-html/index.html" git push

    index.html新增至資public-html料夾中的儲存庫。

Dockerfile

Docker 文件描述了要使用的基本碼頭圖像以及要應用於它的碼頭命令。如需 Docker 檔案的詳細資訊,請參閱 Doc ker 檔案參考。

此處指定的碼頭文件表示使用 Apache 2.4 基本圖像()httpd。它還包括將名為的源文件複製index.html到服務網頁的 Apache 服務器上的文件夾的說明。碼頭文件中的EXPOSE指令告訴碼頭集裝箱正在接聽端口 80。

添加碼頭文件
  1. 在中codecatalyst-eks-source-repository,建立名為的檔案Dockerfile,其內容如下:

    FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80

    請勿包含副檔名。

    重要

    Docker 文件必須駐留在存儲庫的根文件夾中。工作流程的Docker build命令期望它在那裡。

  2. 添加,提交和推送:

    git add . git commit -m "add Dockerfile" git push

    碼頭文件被添加到您的存儲庫中。

部署. 羊

在本節中,您將deployment.yaml文件添加到存儲庫中。此deployment.yaml檔案是 Kubernetes 資訊清單,可定義要執行的兩種 Kubernetes 資源類型或類:「服務」和「部署」。

  • 「服務」將負載平衡器部署到 Amazon EC2。負載平衡器為您提供面向網際網路的公用URL和標準連接埠 (連接埠 80),您可以使用它來瀏覽「Hello,World!」 應用程式。

  • 「部署」會部署三個網繭,而且每個網繭都會包含具有「Hello,World!」的 Docker 容器 應用程式。這三個網繭會部署到您建立叢集時建立的節點上。

本教學課程中的資訊清單很簡短;不過,資訊清單可以包含任意數量的 Kubernetes 資源類型,例如網繭、工作、入口和網路原則。此外,如果部署很複雜,您可以使用多個資訊清單檔案。

若要新增部署的 .yaml 檔案
  1. 在中codecatalyst-eks-source-repository,建立名為的資料夾Kubernetes

  2. 在中/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
  3. 添加,提交和推送:

    git add . git commit -m "add Kubernetes/deployment.yaml" git push

    deployment.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-spaceName角色,而不是先前列出的兩個角色。如需詳細資訊,請參閱為您的帳戶和空間建立CodeCatalystWorkflowDevelopmentRole-spaceName角色。瞭解CodeCatalystWorkflowDevelopmentRole-spaceName角色具有非常廣泛的權限,可能會造成安全性風險。我們建議您只在不太擔心安全性的教學課程和案例中使用此角色。本教學課程假設您正在建立先前列出的兩個角色。

若要建立建置和部署角色,請完成下列一系列程序。

1. 若要為這兩個角色建立信任原則
  1. 移至您的開發環境。

  2. Cloud9-long-string目錄中,建立名為的檔案codecatalyst-eks-trust-policy.json,其內容如下:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
2. 建立組建角色的組建原則
  • Cloud9-long-string目錄中,建立名為的檔案codecatalyst-eks-build-policy.json,其內容如下:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
    注意

    第一次使用角色執行工作流程動作時,請在資源策略陳述式中使用萬用字元,然後在策略可用之後使用資源名稱縮小策略的範圍。

    "Resource": "*"
3. 建立部署角色的部署原則
  • Cloud9-long-string目錄中,建立名為的檔案codecatalyst-eks-deploy-policy.json,其內容如下:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:ListClusters" ], "Resource": "*" } ] }
    注意

    第一次使用角色執行工作流程動作時,請在資源策略陳述式中使用萬用字元,然後在策略可用之後使用資源名稱縮小策略的範圍。

    "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
  1. 在開發環境終端中,輸入:

    cd /projects
  2. 輸入:

    aws iam create-policy \ --policy-name codecatalyst-eks-build-policy \ --policy-document file://codecatalyst-eks-build-policy.json
  3. Enter

  4. 在命令輸出中,記下"arn":值,例如,arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy。你ARN稍後需要這個。

5. 若要將部署原則新增至 AWS
  1. 輸入:

    aws iam create-policy \ --policy-name codecatalyst-eks-deploy-policy \ --policy-document file://codecatalyst-eks-deploy-policy.json
  2. Enter

  3. 在命令輸出中,記下部署原則的"arn":值,例如arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy。你ARN稍後需要這個。

6. 若要建立建置角色
  1. 輸入:

    aws iam create-role \ --role-name codecatalyst-eks-build-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json
  2. Enter

  3. 輸入:

    aws iam attach-role-policy \ --role-name codecatalyst-eks-build-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy

    位置 arn:aws:iam::111122223333:policy/codecatalyst-eks-build-policy 會取代為您先前提到ARN的組建原則。

  4. Enter

  5. 在終端提示下,輸入:

    aws iam get-role \ --role-name codecatalyst-eks-build-role
  6. Enter

  7. 請記下角色的"Arn":值,例如,arn:aws:iam::111122223333:role/codecatalyst-eks-build-role。你ARN稍後需要這個。

7. 若要建立部署角色
  1. 輸入:

    aws iam create-role \ --role-name codecatalyst-eks-deploy-role \ --assume-role-policy-document file://codecatalyst-eks-trust-policy.json
  2. Enter

  3. 輸入:

    aws iam attach-role-policy \ --role-name codecatalyst-eks-deploy-role \ --policy-arn arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy

    位置 arn:aws:iam::111122223333:policy/codecatalyst-eks-deploy-policy 會取代為您先前所述ARN的部署原則。

  4. Enter

  5. 輸入:

    aws iam get-role \ --role-name codecatalyst-eks-deploy-role
  6. Enter

  7. 請記下角色的"Arn":值,例如,arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role。你ARN稍後需要這個。

您現在已經建立了建置和部署角色,並註明了這些角色ARNs。

步驟 6:將 AWS 角色新增至 CodeCatalyst

在此步驟中,您將組建角色 (codecatalyst-eks-build-role) 和部署 role (codecatalyst-eks-deploy-role) 新增至您連線至空間的角色。 AWS 帳戶 這樣就可以在您的工作流程中使用這些角色。

若要將建置和部署角色新增至 AWS 帳戶
  1. 在 CodeCatalyst 主控台中,導覽至您的空間。

  2. 選擇畫面頂端的 [設定]

  3. 在功能窗格中,選擇 [AWS 帳戶]。此時會顯示帳號清單。

  4. Amazon CodeCatalyst 顯示名稱欄中,複製建立和部署角色的顯示名稱。 AWS 帳戶 (這可能是一個數字。) 建立工作流程時,您將需要此值。

  5. 選擇顯示名稱。

  6. 管理主控台選擇 [ AWS 管理角色]

    將顯示 [新增IAM角色至 Amazon CodeCatalyst 空間] 頁面。您可能需要登入才能存取此頁面。

  7. 選取 [新增您在中建立的現有角色] IAM。

    這時系統顯示下拉列表。此清單會顯示建置和部署角色,以及具有信任原則 (包括codecatalyst-runner.amazonaws.comcodecatalyst.amazonaws.com服務主體) 的任何其他IAM角色。

  8. 從下拉式清單中,新增:

    • codecatalyst-eks-build-role

    • codecatalyst-eks-deploy-role

    注意

    如果您看到The security token included in the request is invalid,可能是因為您沒有正確的權限。若要修正此問題,請使 AWS 用您建立 CodeCatalyst空間時使用的 AWS 帳戶登出以重新登入。

  9. 返回 CodeCatalyst 主控台並重新整理頁面。

    建置和部署角色現在應該會出現在IAM角色下。

    這些角色現在可用於 CodeCatalyst 工作流程。

步驟 7:更新 ConfigMap

您必須將在中建立的部署角色新增步驟 5:建立 AWS 角色至 Kubernetes ConfigMap 檔案,讓「部署至 Kubernetes」叢集動作 (在您的工作流程中) 能夠存取叢集並與叢集互動。您可以使用eksctlkubectl執行此工作。

若要使用 eksctl 來設定庫伯氏檔 ConfigMap 案
  • 在開發環境終端中,輸入:

    eksctl create iamidentitymapping --cluster codecatalyst-eks-cluster --arn arn:aws:iam::111122223333:role/codecatalyst-eks-deploy-role --group system:masters --username codecatalyst-eks-deploy-role --region us-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-roleCodeCatalystWorkflowDevelopmentRole-spaceName角色的名稱。如需有關此角色的詳細資訊,請參閱 步驟 5:建立 AWS 角色

    • 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 規劃庫伯內特斯 ConfigMap 檔案的步驟
  1. 在開發環境終端中,輸入:

    kubectl edit configmap -n kube-system aws-auth

    該 ConfigMap 文件出現在屏幕上。

  2. 添加紅色斜體文本:

    # 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-role
      mapUsers: |
        []
    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-roleCodeCatalystWorkflowDevelopmentRole-spaceName角色的名稱。如需有關此角色的詳細資訊,請參閱 步驟 5:建立 AWS 角色

    如需詳細資訊,請參閱 Amazon EKS 使用者指南中的啟用叢集的IAM主要存取權。

您現在已授予部署角色,並透過擴充「部署到 Amazon」EKS 動作,即可獲得 Kubernetes 叢集的system:masters許可。

步驟 8:建立並執行工作流程

在此步驟中,您會建立一個工作流程,將來源檔案建置到 Docker 映像中,然後將映像部署到 Amazon EKS 叢集中的樹狀網繭中。

工作流程由下列依序執行的建置區塊組成:

  • 觸發器 — 當您將變更推送至來源儲存庫時,此觸發器會自動啟動工作流程執行。關於觸發條件的詳細資訊,請參閱 使用觸發器啟動工作流程自動執行

  • 構建操作(BuildBackend)-在觸發器上,該操作使用 Docker 文件構建 Docker 映像並將圖像推送到 Amazon。ECR建置動作也會以正確的值更新deployment.yaml檔案中的$REPOSITORY_URI$IMAGE_TAG變數,然後建立此檔案和Kubernetes資料夾中任何其他檔案的輸出成品。在本自學課程中,Kubernetes資料夾中唯一的檔案是,deployment.yaml但您可以包含更多檔案。成品會用作下一個部署動作的輸入。

    如需建置動作的詳細資訊,請參閱使用工作流程建置

  • 部署動作 (DeployToEKS) — 建置動作完成後,部署動作會尋找建置動作 (Manifests) 所產生的輸出成品,並尋找其中的deployment.yaml檔案。然後,該操作按照deployment.yaml文件中的說明運行三個 Pods-每個包含一個「你好,世界!」 碼頭容器 — 在您的 Amazon 集群中。EKS

若要建立工作流程
  1. 前往主 CodeCatalyst 控台。

  2. 導航到您的項目(codecatalyst-eks-project)。

  3. 在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。

  4. 選擇建立工作流程

  5. 針對來源儲存庫,選擇codecatalyst-eks-source-repository

  6. 對於「分支」,請選擇main

  7. 選擇 Create (建立)。

  8. 刪除範YAML例程式碼。

  9. 新增下列程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-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-eks-build-role Inputs: 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 --region us-west-2 | docker login --username AWS --password-stdin 111122223333.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-environment Connections: - Name: codecatalyst-account-connection Role: codecatalyst-eks-deploy-role Inputs: Artifacts: - Manifests Configuration: Namespace: default Region: us-west-2 Cluster: 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:屬性中)使用您在中創建URI的 Amazon ECR 存儲庫步驟 3:創建一個 Amazon ECR 映像存儲庫

    • 111122223333.dkr.ecr.us-west-2.amazonaws.com (在Run: aws ecr命令中)使用不帶圖像後綴URI的 Amazon ECR 存儲庫(/codecatalyst-eks-image-repo)。

    • codecatalyst-eks-deploy-role 使用您在中建立的部署角色名稱步驟 5:建立 AWS 角色

    • 的兩個執行個體 us-west-2 使用您的 AWS 區域代碼。如需區域代碼的清單,請參閱 AWS 一般參考.

    注意

    如果您決定不建立建置和部署角色,請取代 codecatalyst-eks-build-role 以及 codecatalyst-eks-deploy-roleCodeCatalystWorkflowDevelopmentRole-spaceName角色的名稱。如需有關此角色的詳細資訊,請參閱 步驟 5:建立 AWS 角色

  10. (選擇性) 選擇「驗證」,以確定YAML程式碼在認可之前是有效的。

  11. 選擇 Commit (遞交)。

  12. 在「提交工作流程」對話方塊中,輸入以下內容:

    1. 對於提交訊息,請移除文字並輸入:

      Add first workflow
    2. 針對「儲存庫」,選擇codecatalyst-eks-source-repository

    3. 選擇「主要」做為「分支名稱」。

    4. 選擇 Commit (遞交)。

    您現在已建立工作流程。工作流程執行會自動啟動,因為工作流程頂端定義了觸發器。具體而言,當您認可 (並推送) workflow.yaml 檔案至來源儲存庫時,觸發程序會啟動工作流程執行。

若要檢視工作流程執行進度
  1. 在 CodeCatalyst 主控台的瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。

  2. 選擇您剛建立的工作流程codecatalyst-eks-workflow

  3. 選擇BuildBackend查看構建進度。

  4. 選擇DeployToEKS以查看部署進度。

    如需檢視執行詳細資訊的詳細資訊,請參閱檢視工作流程執行狀態與詳細

驗證部署的步驟
  1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

  2. 在左側的底部附近,選擇負載平衡器

  3. 選取在 Kubernetes 部署中建立的負載平衡器。如果您不確定要選擇哪個負載平衡器,請在「標籤」索引標籤下尋找下列標籤

    • kubernetes.io/service-name

    • kubernetes.io/cluster/ekstutorialcluster

  4. 選取正確的負載平衡器後,選擇 [說明] 索引標籤。

  5. DNS名稱值複製並粘貼到瀏覽器的地址欄中。

    在 '你好, 世界!' 網頁會出現在瀏覽器中,表示您已成功部署應用程式。

步驟 9:對源文件進行更改

在本節中,您會變更來源儲存庫中的index.html檔案。這項變更會導致工作流程建立新的 Docker 映像、使用提交 ID 加上標記、將其推送到 AmazonECR,然後將其部署到 Amazon ECS。

若要變更 index.html 的步驟
  1. 移至您的開發環境。

  2. 在終端機提示符下,切換到源存儲庫:

    cd /projects/codecatalyst-eks-source-repository
  3. 提取最新的工作流程變更:

    git pull
  4. 打開 codecatalyst-eks-source-repository/public-html/index.html.

  5. 在第 14 行中,將Hello, World!文字變更為Tutorial complete!

  6. 添加,提交和推送:

    git add . git commit -m "update index.html title" git push

    工作流程執行會自動啟動。

  7. (選擇性) 輸入:

    git show HEAD

    記下index.html變更的提交 ID。此提交 ID 將標記為 Docker 映像檔,該映像檔將由您剛開始的工作流程執行部署。

  8. 觀看部署進度:

    1. 在 CodeCatalyst 主控台的功能窗格中,選擇 CI/CD,然後選擇 [工作流程]。

    2. 選擇codecatalyst-eks-workflow檢視最新執行。

    3. 選擇BuildBackendDeployToEKS以查看工作流程執行進度。

  9. 確認您的應用程式已更新,如下所示:

    1. 在打開 Amazon EC2 控制台https://console.aws.amazon.com/ec2/

    2. 在左側的底部附近,選擇負載平衡器

    3. 選取在 Kubernetes 部署中建立的負載平衡器。

    4. DNS名稱值複製並粘貼到瀏覽器的地址欄中。

      「教程完成!」 網頁會出現在瀏覽器中,表示您已成功部署應用程式的新修訂版本。

  10. (選擇性) 在中 AWS,切換至 Amazon ECR 主控台,並確認新的 Docker 映像已使用本程序步驟 7 的提交 ID 標記。

清除

您應該清理環境,以免針對本教學所使用的儲存和運算資源不必要的費用。

清理方式
  1. 刪除您的叢集:

    1. 在開發環境終端中,輸入:

      eksctl delete cluster --region=us-west-2 --name=codecatalyst-eks-cluster

      其中:

      • us-west-2 已取代為您的地區。

      • codecatalyst-eks-cluster 會以您建立的叢集名稱取代。

      5-10 分鐘後,會刪除叢集和相關資源,包括但不限於 AWS CloudFormation 堆疊、節點群組 (在 Amazon 中EC2) 和負載平衡器。

    重要

    如果命eksctl delete cluster令不起作用,您可能需要重新整理 AWS 認證或kubectl認證。如果您不確定要重新整理哪些認證,請先重新整理 AWS 認證。若要重新整理 AWS 認證,請參閱如何修復「找不到憑據」和「ExpiredToken」錯誤?。若要重新整理kubectl認證,請參閱如何修復「無法連接到服務器」錯誤?

  2. 在 AWS 主控台中,進行清理,如下所示:

    1. 在 AmazonECR,刪除codecatalyst-eks-image-repo

    2. 在IAM身分識別中心中,刪除:

      1. codecatalyst-eks-user

      2. codecatalyst-eks-permission-set

    3. 在中IAM,刪除:

      • codecatalyst-eks-build-role

      • codecatalyst-eks-deploy-role

      • codecatalyst-eks-build-policy

      • codecatalyst-eks-deploy-policy

  3. 在 CodeCatalyst 主控台中,進行清理,如下所示:

    1. 刪除codecatalyst-eks-workflow

    2. 刪除codecatalyst-eks-environment

    3. 刪除codecatalyst-eks-source-repository

    4. 刪除您的開發環境。

    5. 刪除codecatalyst-eks-project

在本教學中,您學習瞭如何使用 CodeCatalyst 工作流程和「部署到 Kubernetes」叢集動作將應用程式部署到 Amazon EKS 服務。