を使用した 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. が IAM と AWS Batch 連携する方法 を使用して、 の AWS Batch リソース、IAM ロール、VPC リソースを作成および管理します AWS アカウント。

  5. の VPC からのサブネット ID とセキュリティグループ ID AWS アカウント。VPC がない場合は作成できます。を使用してこれらのリソース ID AWS CLI を取得する方法の詳細については、AWS CLI 「 コマンドリファレンス」の「describe-subnets」とdescribe-security-groups」を参照してください。 IDs

所要時間: このチュートリアルの所要時間は約 15~20 分です。

コスト: このチュートリアルでは、Fargate コンピューティングリソースを使用します。このチュートリアルの完了にかかる推定コストは、クリーンアップの指示に従って完了直後にリソースを削除すると想定した場合、0.01 USD 未満です。Fargate の料金は、消費された vCPU リソースとメモリリソースに基づいており、1 秒あたりで課金されます。最低課金時間は 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 コンピューティング環境を作成します。例のサブネット ID とセキュリティグループ ID を 前提条件 ごとに実際に使用する値に置き換えます。

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 ケジューラがコンピューティング環境のリソースで実行するまで、送信されたジョブを保存します。ジョブはキュー内の優先順位に従って処理されます。

ジョブキューを作成する

次のコマンドは、Fargate コンピューティング環境を使用する優先度 900 のジョブキューを作成します。

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 およびメモリパラメータの代わりにリソース要件を使用します。

ジョブ定義を作成する

次のコマンドは、ビジーボックスコンテナイメージを使用して単純な「hello world」コマンドを実行するジョブ定義を作成します。を実際の AWS アカウント ID 123456789012に置き換え、例を独自の ID AWS リージョン に置き換えます。

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 }'

ジョブ定義は、Fargate タスクの最小リソースである 0.25 vCPU と 512 MB のメモリを指定します。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 を使用して、ジョブのステータスを確認します。ジョブは、SUBMITTEDPENDINGRUNNABLESTARTINGRUNNING、および最後に 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 の例を実際に使用する値に置き換えます。

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 どのように連携するかを理解するのに役立つように設計されています。本番デプロイでは、次の追加要件を考慮してください。

セキュリティに関する考慮事項:
  • デフォルトのセキュリティグループを使用する代わりに、アクセスを必要最低限に抑えた専用セキュリティグループを作成する

  • コンテナのパブリック IP 割り当ての代わりに NAT Gateway でプライベートサブネットを使用する

  • パブリックリポジトリを使用する代わりに Amazon ECR にコンテナイメージを保存する

  • インターネットトラフィックを回避するために AWS 、サービス通信用の VPC エンドポイントを実装する

アーキテクチャ上の考慮事項:
  • 可用性を高めるため、複数のアベイラビリティーゾーンにデプロイする

  • エラー処理のためにジョブの再試行戦略とデッドレターキューを実装する

  • ワークロード管理の優先順位が異なる複数のジョブキューを使用する

  • キューの深さとリソース使用率に基づいて自動スケーリングポリシーを設定する

  • ジョブの失敗とリソース使用率のモニタリングとアラートを実装する

運用上の考慮事項:
  • モニタリング用の CloudWatch ダッシュボードとアラームを設定する

  • 適切なログ記録と監査証跡を実装する

  • Infrastructure as Code AWS CDK に CloudFormation または を使用する

  • バックアップとディザスタリカバリの手順を策定する

本番環境に対応したアーキテクチャに関する包括的なガイダンスについては、「AWS Well-Architected フレームワーク」と「AWS セキュリティのベストプラクティス」を参照してください。

次の手順

このチュートリアルを完了したので、より高度な AWS Batch 機能を調べることができます。