本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 開始使用 AWS Batch 和 Fargate AWS CLI
本教學課程示範如何使用 AWS Fargate 協調 AWS Batch 設定 ,並使用 AWS Command Line Interface () 執行簡單的「Hello World」任務AWS CLI。您將了解如何建立運算環境、任務佇列、任務定義,以及向其提交任務 AWS Batch。
先決條件
開始本教學課程之前,請確定您有下列項目。
-
AWS CLI。若需安裝,請根據 AWS CLI 安裝指南進行操作。您也可以使用 AWS CloudShell ,其中包含 AWS CLI。
-
AWS CLI 使用適當的登入資料設定您的 。若尚未設定憑證,請執行
aws configure。 -
基本熟悉命令列界面和容器化概念。
-
AWS Batch 如何使用 IAM 在 中建立和管理 AWS Batch 資源、IAM 角色和 VPC 資源 AWS 帳戶。
來自 中 VPC 的子網路 ID 和安全群組 ID AWS 帳戶。如果您沒有 VPC,您可以建立一個。如需使用 AWS CLI 擷取這些資源 IDs的詳細資訊,請參閱《 AWS CLI 命令參考》中的 describe-subnets
和 describe-security-groups 。
所需時間:完成本教學課程約需 15-20 分鐘。
成本:本教學課程使用 Fargate 運算資源。完成本教學課程的預估成本低於 0.01 USD,假設您遵循清除指示,在完成後立即刪除資源。Fargate 定價是以使用的 vCPU 和記憶體資源為基礎,最低收費為每秒 1 分鐘。如需目前定價資訊,請參閱 AWS Fargate 定價
建立 IAM 執行角色
AWS Batch 需要一個執行角色,允許 Amazon Elastic Container Service (Amazon ECS) 代理程式代表您進行 AWS API 呼叫。Fargate 任務需要此角色,才能提取容器映像並將日誌寫入 Amazon CloudWatch。
建立信任政策文件
首先,建立允許 Amazon ECS 任務服務擔任角色的信任政策。
cat > batch-execution-role-trust-policy.json << EOF{ "Version":"2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }EOF
建立執行角色
下列命令BatchEcsTaskExecutionRoleTutorial會使用您剛建立的信任政策來建立名為 的 IAM 角色。
aws iam create-role \ --role-name BatchEcsTaskExecutionRoleTutorial \ --assume-role-policy-document file://batch-execution-role-trust-policy.json
連接必要的政策
連接提供 Amazon ECS 任務執行必要許可的 AWS 受管政策。
aws iam attach-role-policy \ --role-name BatchEcsTaskExecutionRoleTutorial \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
角色現在已準備好供 AWS Batch 用於 Fargate 任務執行。
建立運算環境
運算環境會定義批次任務將執行的運算資源。在本教學課程中,您將建立受管 Fargate 運算環境,根據任務需求自動佈建和擴展資源。
建立運算環境
下列命令會建立 Fargate 運算環境。根據 將範例子網路和安全群組 IDs 取代為您自己的先決條件。
aws batch create-compute-environment \ --compute-environment-name my-fargate-compute-env \ --type MANAGED \ --state ENABLED \ --compute-resources type=FARGATE,maxvCpus=128,subnets=subnet-a123456b,securityGroupIds=sg-a12b3456
以下顯示當命令成功執行時,輸出的外觀。
{ "computeEnvironmentName": "my-fargate-compute-env", "computeEnvironmentArn": "arn:aws:batch:us-west-2:123456789012:compute-environment/my-fargate-compute-env" }
等待運算環境就緒
檢查運算環境的狀態,確保在繼續之前已準備就緒。
aws batch describe-compute-environments \ --compute-environments my-fargate-compute-env \ --query 'computeEnvironments[0].status'
"VALID"
當狀態顯示 時VALID,您的運算環境已準備好接受任務。
建立任務佇列
任務佇列會儲存提交的任務,直到 AWS Batch 排程器在運算環境中的資源上執行它們為止。任務會在佇列中依優先順序處理。
建立任務佇列
下列命令會建立優先順序為 900 的任務佇列,其使用您的 Fargate 運算環境。
aws batch create-job-queue \ --job-queue-name my-fargate-job-queue \ --state ENABLED \ --priority 900 \ --compute-environment-order order=1,computeEnvironment=my-fargate-compute-env
以下顯示當命令成功執行時,輸出的外觀。
{ "jobQueueName": "my-fargate-job-queue", "jobQueueArn": "arn:aws:batch:us-west-2:123456789012:job-queue/my-fargate-job-queue" }
確認任務佇列已就緒
檢查您的任務佇列是否處於 ENABLED 狀態,並準備好接受任務。
aws batch describe-job-queues \ --job-queues my-fargate-job-queue \ --query 'jobQueues[0].state' "ENABLED"
建立任務定義
任務定義會指定任務的執行方式,包括要使用的 Docker 映像、資源需求和其他參數。對於 Fargate,您將使用資源需求,而不是傳統的 vCPU 和記憶體參數。
建立任務定義
下列命令會建立使用 busybox 容器映像執行簡單 "hello world" 命令的任務定義。123456789012 將 取代為您實際 AWS 帳戶 的 ID,並將範例取代 AWS 區域 為您自己的 ID。
aws batch register-job-definition \ --job-definition-name my-fargate-job-def \ --type container \ --platform-capabilities FARGATE \ --container-properties '{ "image": "busybox", "resourceRequirements": [ {"type": "VCPU", "value": "0.25"}, {"type": "MEMORY", "value": "512"} ], "command": ["echo", "hello world"], "networkConfiguration": { "assignPublicIp": "ENABLED" }, "executionRoleArn": "arn:aws:iam::123456789012:role/BatchEcsTaskExecutionRoleTutorial" }, { "jobDefinitionName": "my-fargate-job-def", "jobDefinitionArn": "arn:aws:batch:us-west-2:123456789012:job-definition/my-fargate-job-def:1", "revision": 1 }'
任務定義指定 0.25 vCPU 和 512 MB 的記憶體,這是 Fargate 任務的最低資源。設定assignPublicIp已啟用,因此容器可以從 Docker Hub 提取忙碌方塊映像。
提交和監控任務
現在您已擁有所有必要的元件,您可以將任務提交至佇列並監控其進度。
提交任務
下列命令會使用您建立的任務定義,將任務提交到您的佇列。
aws batch submit-job \ --job-name my-hello-world-job \ --job-queue my-fargate-job-queue \ --job-definition my-fargate-job-def
以下顯示當命令成功執行時,輸出的外觀。
{ "jobArn": "arn:aws:batch:us-west-2:123456789012:job/my-hello-world-job", "jobName": "my-hello-world-job", "jobId": "1509xmpl-4224-4da6-9ba9-1d1acc96431a" }
請記下回應中jobId傳回的 ,因為您會使用它來監控任務的進度。
監控任務狀態
使用任務 ID 來檢查任務的狀態。任務將繼續進行數個狀態:SUBMITTED、PENDING、RUNNING、、 RUNNABLE STARTING和 最後 SUCCEEDED或 FAILED。
aws batch describe-jobs --jobs 1509xmpl-4224-4da6-9ba9-1d1acc96431a
以下顯示當命令成功執行時,輸出的外觀。
{ "jobs": [ { "jobArn": "arn:aws:batch:us-west-2:123456789012:job/my-hello-world-job", "jobName": "my-hello-world-job", "jobId": "1509xmpl-4224-4da6-9ba9-1d1acc96431a", "jobQueue": "arn:aws:batch:us-west-2:123456789012:job-queue/my-fargate-job-queue", "status": "SUCCEEDED", "createdAt": 1705161908000, "jobDefinition": "arn:aws:batch:us-west-2:123456789012:job-definition/my-fargate-job-def:1" } ] }
當狀態顯示 時SUCCEEDED,您的任務已成功完成。
檢視任務輸出
任務完成後,您可以在 Amazon CloudWatch Logs 中檢視其輸出。
取得日誌串流名稱
首先,從任務詳細資訊擷取日誌串流名稱。將範例任務 ID 取代為您自己的任務 ID。
aws batch describe-jobs --jobs1509xmpl-4224-4da6-9ba9-1d1acc96431a\ --query 'jobs[0].attempts[0].containers[0].logStreamName' \ --output text
my-fargate-job-def/default/1509xmpl-4224-4da6-9ba9-1d1acc96431a
檢視任務日誌
使用日誌串流名稱從 CloudWatch Logs 擷取任務的輸出。
aws logs get-log-events \ --log-group-name /aws/batch/job \ --log-stream-name my-fargate-job-def/default/1509xmpl-4224-4da6-9ba9-1d1acc96431a\ --query 'events[*].message' \ --output text
輸出會顯示「hello world」,確認您的任務已成功執行。
清除資源
為了避免持續收費,請清除您在本教學課程中建立的資源。由於相依性,您必須以正確的順序刪除資源。
停用和刪除任務佇列
首先,停用任務佇列,然後刪除它。
aws batch update-job-queue \ --job-queue my-fargate-job-queue \ --state DISABLED
aws batch delete-job-queue \ --job-queue my-fargate-job-queue
停用和刪除運算環境
刪除任務佇列後,請停用並刪除運算環境。
aws batch update-compute-environment \ --compute-environment my-fargate-compute-env \ --state DISABLED
aws batch delete-compute-environment \ --compute-environment my-fargate-compute-env
清除 IAM 角色
移除政策附件並刪除 IAM 角色。
aws iam detach-role-policy \ --role-name BatchEcsTaskExecutionRoleTutorial \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
aws iam delete-role \ --role-name BatchEcsTaskExecutionRoleTutorial
移除暫存檔案
刪除您建立的信任政策檔案。
rm batch-execution-role-trust-policy.json
已成功清除所有資源。
生產環境部署須知
本教學課程旨在協助您了解 如何與 Fargate AWS Batch 搭配使用。對於生產部署,請考慮下列其他要求:
安全考量:
建立具有最少必要存取權的專用安全群組,而不是使用預設安全群組
使用私有子網路搭配 NAT Gateway,而非容器的公有 IP 指派
將容器映像儲存在 Amazon ECR 中,而不是使用公有儲存庫
實作 VPC 端點進行 AWS 服務通訊,以避免網際網路流量
架構考量事項:
跨多個可用區域部署以獲得高可用性
實作任務重試策略和無效字母佇列以進行錯誤處理
使用具有不同優先順序的多個任務佇列進行工作負載管理
根據佇列深度和資源使用率設定自動擴展政策
實作任務失敗和資源使用率的監控與提醒
操作考量:
設定 CloudWatch 儀表板和警示以進行監控
實作適當的記錄和稽核追蹤
針對基礎設施使用 CloudFormation 或 AWS CDK 做為程式碼
建立備份和災難復原程序
如需生產就緒架構的完整指引,請參閱 AWS Well-Architected Framework
後續步驟
現在您已完成本教學課程,您可以探索更進階 AWS Batch 的功能:
-
任務佇列 – 了解任務佇列排程和優先順序管理
-
任務定義 – 探索進階任務定義組態,包括環境變數、磁碟區和重試策略
-
的運算環境 AWS Batch – 了解不同的運算環境類型和擴展選項
-
多節點平行任務 – 執行跨越多個運算節點的任務
-
陣列任務 – 有效率地提交大量類似的任務
-
的最佳實務 AWS Batch – 了解生產工作負載的最佳化技術