本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在本教學課程中,您將了解如何使用工作流程、Amazon ECS 和其他一些 AWS 服務,將無伺服器應用程式部署至 Amazon Elastic Container Service (Amazon ECS)。部署的應用程式是建置在 Apache Web 伺服器 Docker 映像上的簡單 Hello World 網站。本教學課程會逐步引導您完成必要的準備工作,例如設定叢集,然後說明如何建立工作流程來建置和部署應用程式。
提示
您不必完成本教學課程,而是可以使用藍圖為您完成 Amazon ECS 設定。您需要搭配 使用 Node.js API AWS Fargate 或搭配藍圖的 Java API AWS Fargate。如需詳細資訊,請參閱使用藍圖建立專案。
主題
先決條件
開始之前:
-
您需要具有連線 AWS 帳戶的 CodeCatalyst 空間。如需詳細資訊,請參閱建立空間。
-
在您的空間中,您需要一個名為 的空專案:
codecatalyst-ecs-project
使用從頭開始選項來建立此專案。
如需詳細資訊,請參閱在 Amazon CodeCatalyst 中建立空專案。
-
在您的專案中,您需要名為 的 CodeCatalyst 環境:
codecatalyst-ecs-environment
設定此環境,如下所示:
-
選擇任何類型的,例如非生產。
-
將您的帳戶連接到該 AWS 帳戶。
-
針對預設 IAM 角色,選擇任何角色。稍後您將指定不同的角色。
如需詳細資訊,請參閱部署至 AWS 帳戶 和 VPC VPCs。
-
步驟 1:設定 AWS 使用者和 AWS CloudShell
本教學課程的第一步是在 中建立使用者 AWS IAM Identity Center,並以此使用者身分啟動 AWS CloudShell 執行個體。在本教學課程中,CloudShell 是您的開發電腦,也是您設定 AWS 資源和服務的地方。完成教學課程後刪除此使用者。
注意
請勿將您的根使用者用於本教學課程。稍後在 AWS Command Line Interface (CLI) 中執行動作時,您必須建立個別的使用者,否則可能會遇到問題。
如需 IAM Identity Center 使用者和 CloudShell 的詳細資訊,請參閱 AWS IAM Identity Center 使用者指南和 AWS CloudShell 使用者指南。
建立 IAM Identity Center 使用者
登入 AWS Management Console ,並在 https://https://console.aws.amazon.com/singlesignon/
開啟 AWS IAM Identity Center 主控台。 注意
請務必使用連線至 CodeCatalyst 空間 AWS 帳戶 的 登入。您可以透過導覽至您的空間並選擇 AWS 帳戶索引標籤來驗證哪個帳戶已連線。如需詳細資訊,請參閱建立空間。
-
在導覽窗格中,選擇 使用者,然後選擇 新增使用者。
-
在使用者名稱中,輸入:
CodeCatalystECSUser
-
在密碼下,選擇產生您可以與此使用者共用的一次性密碼。
-
在電子郵件地址和確認電子郵件地址中,輸入 IAM Identity Center 中尚未存在的電子郵件地址。
-
在名字和姓氏中,輸入:
CodeCatalystECSUser
-
在顯示名稱中,保留自動產生的名稱:
CodeCatalystECSUser CodeCatalystECSUser
-
選擇 Next (下一步)。
-
在新增使用者至群組頁面上,選擇下一步。
-
在檢閱和新增使用者頁面上,檢閱資訊,然後選擇新增使用者。
一次性密碼對話方塊隨即出現。
-
選擇複製,然後貼上登入資訊,包括 AWS 存取入口網站 URL 和一次性密碼。
-
選擇關閉。
建立許可集合
您將將此許可集指派給CodeCatalystECSUser
稍後的 。
-
在導覽窗格中,選擇許可集,然後選擇建立許可集。
-
選擇預先定義的許可集,然後選取 AdministratorAccess。此政策為所有 提供完整許可 AWS 服務。
-
選擇 Next (下一步)。
-
在許可集名稱中,輸入:
CodeCatalystECSPermissionSet
-
選擇 Next (下一步)。
-
在檢閱和建立頁面上,檢閱資訊,然後選擇建立。
將許可集指派給 CodeCatalystECSUser
-
在導覽窗格中,選擇 AWS 帳戶,然後選取 AWS 帳戶 您目前登入之 旁的核取方塊。
-
選擇指派使用者或群組。
-
選擇使用者索引標籤。
-
選取 旁的核取方塊
CodeCatalystECSUser
。 -
選擇 Next (下一步)。
-
選取 旁的核取方塊
CodeCatalystECSPermissionSet
。 -
選擇 Next (下一步)。
-
檢閱資訊,然後選擇提交。
您現在已將
CodeCatalystECSUser
和CodeCatalystECSPermissionSet
指派給您的 AWS 帳戶,並將它們繫結在一起。
以 CodeCatalystECSUser 身分登出並重新登入
-
登出之前,請確定您擁有 AWS 存取入口網站 URL 以及 的使用者名稱和一次性密碼
CodeCatalystECSUser
。您應該已稍早將此資訊複製到文字編輯器。注意
如果您沒有此資訊,請前往 IAM Identity Center 的詳細資訊
CodeCatalystECSUser
頁面,選擇重設密碼、產生一次性密碼 【...】 和再次重設密碼,以在畫面上顯示資訊。 -
登出 AWS。
-
將 AWS 存取入口網站 URL 貼到瀏覽器的地址列。
-
使用 的使用者名稱和一次性密碼登入
CodeCatalystECSUser
。 -
在新密碼中,輸入密碼,然後選擇設定新密碼。
畫面上會出現一個AWS 帳戶方塊。
-
選擇 AWS 帳戶,然後選擇 AWS 帳戶 您指派
CodeCatalystECSUser
使用者和許可集的 名稱。 -
在 旁
CodeCatalystECSPermissionSet
,選擇 管理主控台。AWS Management Console 隨即出現。您現在已以 身分登入,
CodeCatalystECSUser
並具有適當的許可。
啟動 AWS CloudShell 執行個體
-
作為
CodeCatalystECSUser
,在頂端導覽列中,選擇 AWS 圖示 ()。
隨即 AWS Management Console 出現 的主頁面。
-
在頂端導覽列中,選擇 AWS CloudShell 圖示 (
)。
CloudShell 隨即開啟。等待 CloudShell 環境建立。
注意
如果您沒有看到 CloudShell 圖示,請確定您位於 CloudShell 支援的區域中。本教學假設您位於美國西部 (奧勒岡) 區域。
驗證 AWS CLI 是否已安裝
-
在 CloudShell 終端機中,輸入:
aws --version
-
檢查版本是否出現。
AWS CLI 已為目前使用者 設定
CodeCatalystECSUser
,因此不需要設定 AWS CLI 金鑰和登入資料,通常也是如此。
步驟 2:將預留位置應用程式部署至 Amazon ECS
在本節中,您會手動將預留位置應用程式部署至 Amazon ECS。此預留位置應用程式將由工作流程部署的 Hello World 應用程式取代。預留位置應用程式是 Apache Web Server。
如需 Amazon ECS 的詳細資訊,請參閱《Amazon Elastic Container Service 開發人員指南》。
完成下列一系列程序以部署預留位置應用程式。
建立任務執行角色
此角色會授予 Amazon ECS 和 AWS Fargate 許可,以代表您進行 API 呼叫。
-
建立信任政策:
-
在 中 AWS CloudShell,輸入下列命令:
cat > codecatalyst-ecs-trust-policy.json
CloudShell 終端機中會出現閃爍提示。
-
在提示中輸入下列程式碼:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
將游標放在最後一個大括號 () 之後
}
。 -
按
Enter
,然後按Ctrl+d
儲存檔案並退出貓。
-
-
建立任務執行角色:
aws iam create-role \ --role-name codecatalyst-ecs-task-execution-role \ --assume-role-policy-document file://codecatalyst-ecs-trust-policy.json
-
將 AWS 受管
AmazonECSTaskExecutionRolePolicy
政策連接至角色:aws iam attach-role-policy \ --role-name codecatalyst-ecs-task-execution-role \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
-
顯示角色的詳細資訊:
aws iam get-role \ --role-name codecatalyst-ecs-task-execution-role
-
請記下角色
"Arn":
的值,例如arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role
。稍後您將需要此 Amazon Resource Name (ARN)。
建立 Amazon ECS 叢集
此叢集將包含 Apache 預留位置應用程式,以及稍後的 Hello World 應用程式。
-
作為
CodeCatalystECSUser
,在 中 AWS CloudShell建立空叢集:aws ecs create-cluster --cluster-name codecatalyst-ecs-cluster
-
(選用) 確認叢集已成功建立:
aws ecs list-clusters
codecatalyst-ecs-cluster
叢集的 ARN 應該會出現在清單中,表示成功建立。
建立任務定義檔案
任務定義檔案指出 要執行從 DockerHub 提取的 Apache 2.4 Web 伺服器httpd:2.4
)。 DockerHub
-
作為
CodeCatalystECSUser
,在 中 AWS CloudShell建立任務定義檔案:cat > taskdef.json
-
在提示中貼上下列程式碼:
{ "executionRoleArn": "
arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role
", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", "image": "httpd:2.4", "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "family": "codecatalyst-ecs-task-def", "memory": "512", "networkMode": "awsvpc" }在上述程式碼中,取代
arn:aws:iam::111122223333:role/codecatalyst-ecs-task-execution-role
與您在 中記下之任務執行角色的 ARN建立任務執行角色。
-
將游標放在最後一個大括號 () 之後
}
。 -
按
Enter
,然後按Ctrl+d
儲存檔案並退出貓。
向 Amazon ECS 註冊任務定義檔案
-
作為
CodeCatalystECSUser
,在 中 AWS CloudShell註冊任務定義:aws ecs register-task-definition \ --cli-input-json file://taskdef.json
-
(選用) 確認任務定義已註冊:
aws ecs list-task-definitions
codecatalyst-ecs-task-def
任務定義應該會出現在清單中。
建立 Amazon ECS 服務
Amazon ECS 服務會執行 Apache 預留位置應用程式的任務 (和相關聯的 Docker 容器),以及稍後的 Hello World 應用程式。
-
身為
CodeCatalystECSUser
,如果您尚未切換到 Amazon Elastic Container Service 主控台,請切換到該主控台。 -
選擇您先前建立的叢集
codecatalyst-ecs-cluster
。 -
在服務索引標籤中,選擇建立。
-
在建立頁面中,執行下列動作:
-
保留所有預設設定,除了接下來列出的設定。
-
針對 Launch type (啟動類型),選擇 FARGATE。
-
在任務定義下,在系列下拉式清單中,選擇:
codecatalyst-ecs-task-def
-
針對服務名稱,輸入:
codecatalyst-ecs-service
-
針對所需的任務,輸入:
3
在本教學課程中,每個任務都會啟動單一 Docker 容器。
-
展開聯網區段。
-
對於 VPC,請選擇任何 VPC。
-
針對子網路,選擇任何子網路。
注意
僅指定一個子網路。這就是本教學課程所需的一切。
注意
如果您沒有 VPC 和子網路,請建立它們。請參閱《Amazon VPC 使用者指南》中的建立 VPC 和在您的 VPC 中建立子網路。
-
針對安全群組,選擇建立新的安全群組,然後執行下列動作:
-
針對安全群組名稱,輸入:
codecatalyst-ecs-security-group
-
針對安全群組描述,輸入:
CodeCatalyst ECS security group
-
選擇新增規則。在類型中,選擇 HTTP,在來源中,選擇任何地方。
-
-
在底部,選擇建立。
-
等待服務建立。這可能需要幾分鐘的時間。
-
-
選擇任務索引標籤,然後選擇重新整理按鈕。確認這三個任務的上次狀態欄都設定為執行中。
(選用) 驗證您的 Apache 預留位置應用程式是否正在執行
-
在任務索引標籤中,選擇三個任務中的任何一個。
-
在公有 IP 欄位中,選擇開啟的地址。
It Works!
頁面隨即出現。這表示 Amazon ECS 服務已成功啟動使用 Apache 映像啟動 Docker 容器的任務。在本教學課程中,您已手動部署 Amazon ECS 叢集、服務和任務定義,以及 Apache 預留位置應用程式。所有這些項目都就緒後,您現在可以建立工作流程,以教學課程的 Hello World 應用程式取代 Apache 預留位置應用程式。
步驟 3:建立 Amazon ECR 映像儲存庫
在本節中,您會在 Amazon Elastic Container Registry (Amazon ECR) 中建立私有映像儲存庫。此儲存庫會存放教學課程的 Docker 映像,以取代您先前部署的 Apache 預留位置映像。
如需 Amazon ECR 的詳細資訊,請參閱《Amazon Elastic Container Registry 使用者指南》。
在 Amazon ECR 中建立映像儲存庫
-
作為
CodeCatalystECSUser
,在 中 AWS CloudShell,在 Amazon ECR 中建立空儲存庫:aws ecr create-repository --repository-name codecatalyst-ecs-image-repo
-
顯示 Amazon ECR 儲存庫的詳細資訊:
aws ecr describe-repositories \ --repository-names codecatalyst-ecs-image-repo
-
請記下
“repositoryUri”:
值,例如111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
。稍後將儲存庫新增至工作流程時需要它。
步驟 4:建立 AWS 角色
在本節中,您會建立 CodeCatalyst AWS 工作流程運作所需的 IAM 角色。這些角色包括:
-
組建角色 – 授予 CodeCatalyst 組建動作 (在工作流程中) 存取 AWS 您的帳戶和寫入 Amazon ECR 和 Amazon EC2 的許可。
-
部署角色 – 授予 CodeCatalyst 部署到 ECS 動作 (在工作流程中) 存取 AWS 您的帳戶、Amazon ECS 和其他一些 AWS 服務的許可。
如需 IAM 角色的詳細資訊,請參閱AWS Identity and Access Management 《 使用者指南》中的 IAM 角色。
注意
若要節省時間,您可以建立稱為角色的單一CodeCatalystWorkflowDevelopmentRole-
角色,而不是先前列出的兩個角色。如需詳細資訊,請參閱為您的帳戶和空間建立 CodeCatalystWorkflowDevelopmentRole-spaceName角色。了解該spaceName
CodeCatalystWorkflowDevelopmentRole-
角色具有非常廣泛的許可,這可能會構成安全風險。我們建議您只在不太擔心安全性的教學課程和案例中使用此角色。本教學假設您正在建立先前列出的兩個角色。spaceName
若要建立建置和部署角色,您可以使用 AWS Management Console 或 AWS CLI。
若要建立建置和部署角色,請完成下列一系列程序。
建立建置角色
-
建立角色的政策,如下所示:
-
登入 AWS。
開啟位於 https://console.aws.amazon.com/iam/
的 IAM 主控台。 -
在導覽窗格中,選擇政策。
-
選擇 Create policy (建立政策)。
-
請選擇 JSON 標籤。
-
刪除現有的程式碼。
-
貼上以下程式碼:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:*", "ec2:*" ], "Resource": "*" } ] }
注意
第一次使用角色執行工作流程動作時,請在資源政策陳述式中使用萬用字元,然後在資源名稱可用後縮小政策的範圍。
"Resource": "*"
-
選擇下一步:標籤。
-
選擇下一步:檢閱。
-
在名稱中,輸入:
codecatalyst-ecs-build-policy
-
選擇 建立政策。
您現在已建立許可政策。
-
-
建立建置角色,如下所示:
-
在導覽窗格中,選擇角色,然後選擇建立角色。
-
選擇自訂信任政策。
-
刪除現有的自訂信任政策。
-
新增下列自訂信任政策:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
選擇 Next (下一步)。
-
在許可政策中,搜尋
codecatalyst-ecs-build-policy
,選取其核取方塊。 -
選擇 Next (下一步)。
-
針對角色名稱,輸入:
codecatalyst-ecs-build-role
-
針對角色描述,輸入:
CodeCatalyst ECS build role
-
選擇建立角色。
您現在已建立具有許可政策和信任政策的建置角色。
-
-
取得建置角色 ARN,如下所示:
-
在導覽窗格中,選擇角色。
-
在搜尋方塊中,輸入您剛建立的角色名稱 (
codecatalyst-ecs-build-role
)。 -
從清單中選擇角色。
角色的摘要頁面隨即出現。
-
在頂端複製 ARN 值。供稍後使用。
-
建立部署角色
-
建立角色的政策,如下所示:
-
登入 AWS。
開啟位於 https://console.aws.amazon.com/iam/
的 IAM 主控台。 -
在導覽窗格中,選擇政策。
-
選擇 Create Policy (建立政策)。
-
請選擇 JSON 標籤。
-
刪除現有的程式碼。
-
貼上以下程式碼:
{ "Version": "2012-10-17", "Statement": [{ "Action":[ "ecs:DescribeServices", "ecs:CreateTaskSet", "ecs:DeleteTaskSet", "ecs:ListClusters", "ecs:RegisterTaskDefinition", "ecs:UpdateServicePrimaryTaskSet", "ecs:UpdateService", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:ModifyListener", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:ModifyRule", "lambda:InvokeFunction", "lambda:ListFunctions", "cloudwatch:DescribeAlarms", "sns:Publish", "sns:ListTopics", "s3:GetObject", "s3:GetObjectVersion", "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment" ], "Resource":"*", "Effect":"Allow" },{"Action":[ "iam:PassRole" ], "Effect":"Allow", "Resource":"*", "Condition":{"StringLike":{"iam:PassedToService":[ "ecs-tasks.amazonaws.com", "codedeploy.amazonaws.com" ] } } }] }
注意
第一次使用角色執行工作流程動作時,請在資源政策陳述式中使用萬用字元。然後,您可以使用資源名稱縮小政策的範圍。
"Resource": "*"
-
選擇下一步:標籤。
-
選擇下一步:檢閱。
-
在名稱中,輸入:
codecatalyst-ecs-deploy-policy
-
選擇 建立政策。
您現在已建立許可政策。
-
-
建立部署角色,如下所示:
-
在導覽窗格中,選擇角色,然後選擇建立角色。
-
選擇自訂信任政策。
-
刪除現有的自訂信任政策。
-
新增下列自訂信任政策:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
選擇 Next (下一步)。
-
在許可政策中,搜尋
codecatalyst-ecs-deploy-policy
,選取其核取方塊。 -
選擇 Next (下一步)。
-
針對角色名稱,輸入:
codecatalyst-ecs-deploy-role
-
針對角色描述,輸入:
CodeCatalyst ECS deploy role
-
選擇建立角色。
您現在已使用信任政策建立部署角色。
-
-
取得部署角色 ARN,如下所示:
-
在導覽窗格中,選擇角色。
-
在搜尋方塊中,輸入您剛建立的角色名稱 (
codecatalyst-ecs-deploy-role
)。 -
從清單中選擇角色。
角色的摘要頁面隨即出現。
-
在頂端複製 ARN 值。供稍後使用。
-
步驟 5:將 AWS 角色新增至 CodeCatalyst
在此步驟中,您會將建置角色 (codecatalyst-ecs-build-role
) 和部署角色 (codecatalyst-ecs-deploy-role
) 新增至您空間中的 CodeCatalyst 帳戶連線。
將建置和部署角色新增至您的帳戶連線
-
在 CodeCatalyst 中,導覽至您的空間。
-
選擇AWS 帳戶。帳戶連線清單隨即出現。
-
選擇代表您建立建置和部署角色 AWS 的帳戶的帳戶連線。
-
從管理主控台選擇 AWS 管理角色。
將 IAM 角色新增至 Amazon CodeCatalyst 空間頁面隨即出現。您可能需要登入才能存取頁面。
-
選取新增您在 IAM 中建立的現有角色。
下拉式清單隨即出現。清單會顯示具有信任政策的所有 IAM 角色,其中包含
codecatalyst-runner.amazonaws.com
codecatalyst.amazonaws.com
和服務主體。 -
在下拉式清單中,選擇
codecatalyst-ecs-build-role
,然後選擇新增角色。注意
如果您看到
The security token included in the request is invalid
,可能是因為您沒有正確的許可。若要修正此問題,請以您建立 CodeCatalyst 空間時使用 AWS 的帳戶登入 AWS 身分登出 。 -
選擇新增 IAM 角色,選擇新增您在 IAM 中建立的現有角色,然後在下拉式清單中選擇
codecatalyst-ecs-deploy-role
。選擇 Add role (新增角色)。您現在已新增建置並將角色部署到您的空間。
-
複製 Amazon CodeCatalyst 顯示名稱的值。您稍後在建立工作流程時需要此值。
步驟 6:建立來源儲存庫
在此步驟中,您會在 CodeCatalyst 中建立來源儲存庫。此儲存庫會存放教學課程的來源檔案,例如任務定義檔案。
如需來源儲存庫的詳細資訊,請參閱 建立來源儲存庫。
建立來源儲存庫
開啟 CodeCatalyst 主控台,網址為 https://https://codecatalyst.aws/
。 -
導覽至您的專案
codecatalyst-ecs-project
。 -
在導覽窗格中,選擇程式碼,然後選擇來源儲存庫。
-
選擇新增儲存庫,然後選擇建立儲存庫。
-
在儲存庫名稱中,輸入:
codecatalyst-ecs-source-repository
-
選擇 Create (建立)。
步驟 7:新增來源檔案
在本節中,您將 Hello World 來源檔案新增至 CodeCatalyst 儲存庫 codecatalyst-ecs-source-repository
。它們包含:
-
index.html
檔案 – 在瀏覽器中顯示 Hello World 訊息。 -
Dockerfile - 描述要用於 Docker 映像的基本映像,以及要套用的 Docker 命令。
-
taskdef.json
檔案 – 定義在叢集中啟動任務時要使用的 Docker 映像。
資料夾結構如下:
. |— public-html | |— index.html |— Dockerfile |— taskdef.json
注意
下列指示說明如何使用 CodeCatalyst 主控台新增檔案,但您可以視需要使用 Git。如需詳細資訊,請參閱 複製來源儲存庫。
index.html
index.html
檔案會在瀏覽器中顯示 Hello World 訊息。
新增 index.html 檔案
-
在 CodeCatalyst 主控台中,前往您的來源儲存庫
codecatalyst-ecs-source-repository
。 -
在檔案中,選擇建立檔案。
-
針對檔案名稱,輸入:
public-html/index.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>
-
選擇遞交,然後再次選擇遞交。
index.html
會新增至public-html
資料夾中的儲存庫。
Dockerfile
Dockerfile 說明要使用的基本 Docker 映像,以及要套用的 Docker 命令。如需 Dockerfile 的詳細資訊,請參閱 Dockerfile 參考
此處指定的 Dockerfile 表示使用 Apache 2.4 基礎映像 (httpd
)。它還包含將名為 的來源檔案複製到提供網頁之 Apache 伺服器上index.html
資料夾的說明。Dockerfile 中的 EXPOSE
指示會告知 Docker 容器正在接聽連接埠 80。
新增 Dockerfile
-
在來源儲存庫中,選擇建立檔案。
-
針對檔案名稱,輸入:
Dockerfile
請勿包含副檔名。
重要
Dockerfile 必須位於儲存庫的根資料夾中。工作流程的
Docker build
命令預期會存在。 -
在文字方塊中,輸入下列程式碼:
FROM httpd:2.4 COPY ./public-html/index.html /usr/local/apache2/htdocs/index.html EXPOSE 80
-
選擇遞交,然後再次選擇遞交。
Dockerfile 會新增至您的儲存庫。
taskdef.json
您在此步驟中新增的檔案與您已在 中指定的taskdef.json
檔案相同,步驟 2:將預留位置應用程式部署至 Amazon ECS但有以下差異:
這裡的任務定義會使用幾個變數來表示影像: $REPOSITORY_URI
和 ,而不是在 image:
欄位 (httpd:2.4
) 中指定硬式編碼的 Docker 影像名稱$IMAGE_TAG
。當您在後續步驟中執行工作流程時,這些變數將取代為工作流程建置動作所產生的實際值。
如需任務定義參數的詳細資訊,請參閱《Amazon Elastic Container Service 開發人員指南》中的任務定義參數。
新增 taskdef.json 檔案
-
在來源儲存庫中,選擇建立檔案。
-
針對檔案名稱,輸入:
taskdef.json
-
在文字方塊中,輸入下列程式碼:
{ "executionRoleArn": "
arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role
", "containerDefinitions": [ { "name": "codecatalyst-ecs-container", # The $REPOSITORY_URI and $IMAGE_TAG variables will be replaced # by the workflow at build time (see the build action in the # workflow) "image": $REPOSITORY_URI:$IMAGE_TAG, "essential": true, "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } ] } ], "requiresCompatibilities": [ "FARGATE" ], "networkMode": "awsvpc", "cpu": "256", "memory": "512", "family": "codecatalyst-ecs-task-def" }在上述程式碼中,取代
arn:aws:iam::account_ID:role/codecatalyst-ecs-task-execution-role
與您在 中記下之任務執行角色的 ARN建立任務執行角色。
-
選擇遞交,然後再次選擇遞交。
taskdef.json
檔案會新增至您的儲存庫。
步驟 8:建立和執行工作流程
在此步驟中,您會建立工作流程來取得來源檔案、將其建置到 Docker 映像中,然後將映像部署到您的 Amazon ECS 叢集。此部署會取代現有的 Apache 預留位置應用程式。
工作流程包含下列依順序執行的建置區塊:
-
觸發條件 – 當您將變更推送至來源儲存庫時,此觸發條件會自動啟動工作流程執行。關於觸發條件的詳細資訊,請參閱 使用觸發程序自動啟動工作流程執行。
-
建置動作 (
BuildBackend
) – 在觸發時,動作會使用 Dockerfile 建置 Docker 映像,並將映像推送至 Amazon ECR。建置動作也會taskdef.json
使用正確的image
欄位值更新 ,然後建立此檔案的輸出成品。此成品會用作部署動作的輸入,接下來是 。如需建置動作的詳細資訊,請參閱 使用工作流程建置。
-
部署動作 (
DeployToECS
) – 完成建置動作後,部署動作會尋找建置動作 (TaskDefArtifact
) 產生的輸出成品,尋找其中的taskdef.json
,並將其註冊至 Amazon ECS 服務。然後,服務會遵循taskdef.json
檔案中的指示,在您的 Amazon ECS 叢集內執行三個 Amazon ECS 任務,以及相關聯的 Hello World Docker 容器。
若要建立工作流程
-
在 CodeCatalyst 主控台的導覽窗格中,選擇 CI/CD,然後選擇工作流程。
-
選擇建立工作流程。
-
針對來源儲存庫,選擇
codecatalyst-ecs-source-repository
。 -
針對分支,選擇
main
。 -
選擇 Create (建立)。
刪除 YAML 範例程式碼。
-
新增下列 YAML 程式碼:
注意
在後續的 YAML 程式碼中,您可以視需要省略這些
Connections:
區段。如果您省略這些區段,您必須確保環境中預設 IAM 角色欄位中指定的角色包含 中所述兩個角色的許可和信任政策步驟 5:將 AWS 角色新增至 CodeCatalyst。如需使用預設 IAM 角色設定環境的詳細資訊,請參閱 建立環境。Name: codecatalyst-ecs-workflow SchemaVersion: 1.0 Triggers: - Type: PUSH Branches: - main Actions: BuildBackend: Identifier: aws/build@v1 Environment: Name:
codecatalyst-ecs-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-ecs-build-role
Inputs: Sources: - WorkflowSource Variables: - Name: REPOSITORY_URI Value:111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-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 taskdef.json - Run: find taskdef.json -type f | xargs sed -i "s|\$REPOSITORY_URI|$REPOSITORY_URI|g" - Run: find taskdef.json -type f | xargs sed -i "s|\$IMAGE_TAG|$IMAGE_TAG|g" - Run: cat taskdef.json # The output artifact will be a zip file that contains a task definition file. Outputs: Artifacts: - Name: TaskDefArtifact Files: - taskdef.json DeployToECS: DependsOn: - BuildBackend Identifier: aws/ecs-deploy@v1 Environment: Name:codecatalyst-ecs-environment
Connections: - Name:codecatalyst-account-connection
Role:codecatalyst-ecs-deploy-role
Inputs: Sources: [] Artifacts: - TaskDefArtifact Configuration: region:us-west-2
cluster: codecatalyst-ecs-cluster service: codecatalyst-ecs-service task-definition: taskdef.json在上述程式碼中,取代:
-
兩個
codecatalyst-ecs-environment
執行個體,其名稱為您在 中建立的環境先決條件。 -
這兩個
codecatalyst-account-connection
執行個體都具有您帳戶連線的顯示名稱。顯示名稱可能是數字。如需詳細資訊,請參閱步驟 5:將 AWS 角色新增至 CodeCatalyst。 -
codecatalyst-ecs-build-role
,內含您在 中建立的建置角色名稱步驟 4:建立 AWS 角色。 -
使用您在 中建立之 Amazon ECR 儲存庫的 URI 的
111122223333.dkr.ecr.us-west-2.amazonaws.com/codecatalyst-ecs-image-repo
(在Value:
屬性中)步驟 3:建立 Amazon ECR 映像儲存庫。 -
具有 Amazon ECR 儲存庫 URI 且不含映像尾碼 () 的
111122223333.dkr.ecr.us-west-2.amazonaws.com
ECR 儲存庫的 (在Run: aws ecr
命令中)/codecatalyst-ecs-image-repo
。 -
codecatalyst-ecs-deploy-role
,內含您在 中建立的部署角色名稱步驟 4:建立 AWS 角色。 -
使用 AWS 區域碼的
us-west-2
執行個體。如需區域代碼的清單,請參閱《》中的區域端點AWS 一般參考。
注意
如果您決定不建立建置和部署角色,請將
codecatalyst-ecs-build-role
和codecatalyst-ecs-deploy-role
取代為CodeCatalystWorkflowDevelopmentRole-
角色的名稱。如需有關此角色的詳細資訊,請參閱 步驟 4:建立 AWS 角色。spaceName
提示
您可以為此目的使用轉譯 Amazon ECS 任務定義動作,而不是使用先前工作流程程式碼中顯示的 和
find
sed
命令來更新儲存庫和映像名稱。如需詳細資訊,請參閱修改 Amazon ECS 任務定義。 -
-
(選用) 選擇驗證,以確保 YAML 程式碼在遞交之前有效。
-
選擇 Commit (遞交)。
-
在遞交工作流程對話方塊中,輸入下列內容:
-
針對遞交訊息,移除文字並輸入:
Add first workflow
-
針對儲存庫,選擇
codecatalyst-ecs-source-repository
。 -
針對分支名稱,選擇主要。
-
選擇 Commit (遞交)。
您現在已建立工作流程。由於工作流程頂端定義的觸發條件,工作流程執行會自動啟動。具體而言,當您將
workflow.yaml
檔案遞交 (並推送) 至來源儲存庫時,觸發會啟動工作流程執行。 -
檢視工作流程執行進度
-
在 CodeCatalyst 主控台的導覽窗格中,選擇 CI/CD,然後選擇工作流程。
-
選擇您剛建立的工作流程
codecatalyst-ecs-workflow
。 -
選擇 BuildBackend 以查看建置進度。
-
選擇 DeployToECS 以查看部署進度。
如需檢視執行詳細資訊的詳細資訊,請參閱 檢視工作流程執行狀態和詳細資訊。
驗證部署
-
開啟 Amazon ECS 傳統主控台,網址為 https://console.aws.amazon.com/ecs/
。 -
選擇您的叢集
codecatalyst-ecs-cluster
。 -
選擇 Tasks (任務) 索引標籤。
-
選擇這三個任務中的任何一個。
-
在公有 IP 欄位中,選擇開啟的地址。
瀏覽器中會出現「Hello World」頁面,指出 Amazon ECS 服務已成功部署您的應用程式。
步驟 9:變更來源檔案
在本節中,您會變更來源儲存庫中的 index.html
檔案。此變更會導致工作流程建立新的 Docker 映像、使用遞交 ID 標記它、將其推送至 Amazon ECR,並將其部署至 Amazon ECS。
變更 index.html
-
在 CodeCatalyst 主控台的導覽窗格中,選擇程式碼,然後選擇來源儲存庫,然後選擇您的儲存庫
codecatalyst-ecs-source-repository
。 -
選擇
public-html
(下一步),然後選擇index.html
(完成)。內容
index.html
隨即出現。 -
選擇編輯。
-
在第 14 行,將
Hello World
文字變更為Tutorial complete!
。 -
選擇遞交,然後再次選擇遞交。
遞交會導致新的工作流程執行開始。
-
(選用) 前往來源儲存庫的主頁面,選擇檢視遞交,然後記下
index.html
變更的遞交 ID。 -
觀看部署進度:
-
在導覽窗格中,選擇 CI/CD,然後選擇工作流程。
-
選擇
codecatalyst-ecs-workflow
以檢視最新執行。 -
選擇 BuildBackend 和 DeployToECS 以查看工作流程執行進度。
-
-
確認您的應用程式已更新,如下所示:
-
開啟 Amazon ECS 傳統主控台,網址為 https://console.aws.amazon.com/ecs/
。 -
選擇您的叢集
codecatalyst-ecs-cluster
。 -
選擇 Tasks (任務) 索引標籤。
-
選擇這三個任務中的任何一個。
-
在公有 IP 欄位中,選擇開啟的地址。
Tutorial complete!
頁面隨即出現。
-
-
(選用) 在 中 AWS,切換到 Amazon ECR 主控台,並確認新的 Docker 映像已使用步驟 6 的遞交 ID 標記。
清除
清除本教學課程中使用的檔案和服務,以避免產生費用。
在 中 AWS Management Console,依此順序清除:
-
在 Amazon ECS 中,執行下列動作:
-
刪除
codecatalyst-ecs-service
。 -
刪除
codecatalyst-ecs-cluster
。 -
取消註冊
codecatalyst-ecs-task-definition
。
-
-
在 Amazon ECR 中,刪除
codecatalyst-ecs-image-repo
。 -
在 Amazon EC2 中,刪除
codecatalyst-ecs-security-group
。 -
在 IAM Identity Center 中,刪除:
-
CodeCatalystECSUser
-
CodeCatalystECSPermissionSet
-
在 CodeCatalyst 主控台中,清除,如下所示:
-
刪除
codecatalyst-ecs-workflow
。 -
刪除
codecatalyst-ecs-environment
。 -
刪除
codecatalyst-ecs-source-repository
。 -
刪除
codecatalyst-ecs-project
。
在本教學課程中,您已了解如何使用 CodeCatalyst 工作流程和部署至 Amazon ECS 動作,將應用程式部署至 Amazon ECS 服務。