使用 開始使用 AWS Batch 和 Fargate AWS CLI - AWS Batch

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

使用 開始使用 AWS Batch 和 Fargate AWS CLI

本教學課程示範如何使用 AWS Fargate 協調 AWS Batch 設定 ,並使用 AWS Command Line Interface () 執行簡單的「Hello World」任務AWS CLI。您將了解如何建立運算環境、任務佇列、任務定義,以及向其提交任務 AWS Batch。

先決條件

開始本教學課程之前,請確定您有下列項目。

  1. AWS CLI。若需安裝,請根據 AWS CLI 安裝指南進行操作。您也可以使用 AWS CloudShell ,其中包含 AWS CLI。

  2. AWS CLI 使用適當的登入資料設定您的 。若尚未設定憑證,請執行 aws configure

  3. 基本熟悉命令列界面和容器化概念。

  4. AWS Batch 如何使用 IAM 在 中建立和管理 AWS Batch 資源、IAM 角色和 VPC 資源 AWS 帳戶。

  5. 來自 中 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 來檢查任務的狀態。任務將繼續進行數個狀態:SUBMITTEDPENDINGRUNNING、、 RUNNABLE STARTING和 最後 SUCCEEDEDFAILED

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 --jobs 1509xmpl-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 FrameworkAWS 安全最佳實務

後續步驟

現在您已完成本教學課程,您可以探索更進階 AWS Batch 的功能: