AWS batchについてまとめています。
AWS Batchは、AWS環境でバッチ処理を簡単におこなう機能
AWS Batchは、AWS環境でバッチ処理をおこなうための機能です。
関連)AWS Batch(バッチ処理をあらゆる規模で効率的に実行)| AWS
バッチ処理サーバーのようなものを用意しなくても、バッチ処理の定義としてCPUやメモリを指定しておくとバッチ処理実行時に動的にプロビジョニングされて実行環境が用意され、処理が実行されます。バッチ管理用のソフトウエアや、サーバークラスターのインストールが不要。AWS Batchでは、AWS FargateやAmazon EC2などのコンピューティング環境が選べます。
【関連記事】
▶AWSのFargateは、サーバーレスでコンテナを実行/EC2アプリのコンテナ化の方法
AWS Batchは、追加料金無しで使えます。ただし、バッチジョブを保存したり実行するために作成した AWS リソース (EC2 インスタンスや Fargate ジョブなど) に対しては、料金が発生します。
AWS Batchのメリットは、バッチ用のインフラが不要なこと。インフラ管理やバッチ処理用のプロビジョニング、管理、モニタリング、スケーリングといった作業が不要になります。さらに、バッチのコンピューティング環境としてFargateスポットを選ぶことでサーバレス環境でバッチ処理が実行可能となり、よりコストの削減が可能です。(ただし、コンテナ実行用にローカルファイルにデータや設定ファイルを置かないなどの条件を満たす必要があります)
AWS Batchは、AWSプラットフォームとネイティブに統合されています。そのため、AWS のスケーリング、ネットワーキング、アクセス管理機能を利用できます。Amazon S3 や Amazon DynamoDB などの AWS データストアからデータの取得と書き込みが安全に行われるジョブをすぐに作成して実行できるんですね。定期的に実行するジョブの処理量がたまたま多くて、よりスペックが必要だった場合にも自動スケールさせることが可能です。
AWS Batchの使い方
関連)AWS Batch
- コンピューティング環境を作成
- ジョブキューを作成
- ジョブ定義を作成
- ジョブを作成
- レビュー&作成
コンピューティング環境設定(コンピューティング環境の名前とサービスロール)、インスタンスのプロビジョニングモデル、最大vCPU、ネットワーキング(VPC ID、サブネット)の情報を設定します。プロビジョニングモデルは以下の4種類が選べます。
- Fargate コンテナのサーバレスコンピューティング環境 EC2やAMIの管理が不要
- Fargate Spot 中断に強いAWSバッチジョブ 最大70%割引
- オンデマンド 1秒ごとに課金
- スポット 費用節約が可能だが、インスタンスが中断されることもある
ジョブキューの作成では、ジョブキュー名、優先度、タグを設定します。タブはAWSリソースに割り当てるラベルでタグを使った検索やフィルタリング、コスト追跡が可能です。
ジョブ定義では、ジョブ定義名、実行タイムアウト(未完了ジョブが終了するまでの時間)、コンテナプロパティ(イメージ名、コマンド構文はbashかJSONか、実行コマンド、vCPU、メモリ、実行ロール、パブリックIPを割り当てるか、Fargateプラットフォームのバージョン)、ジョブに渡すパラメータ、タグを設定します。
ジョブ設定では、ジョブ定義で設定した内容がそのまま表示されます。特に変更なければ、次へ。
レビューおよび作成は、バッチ処理実行直前の確認です。「作成」をクリックでバッチ処理が作成されます。
ジョブのステータスはダッシュボードにて確認できます。ジョブのステータスには、以下があります。
- SBUMITTED (送信済み)
- PENDING (保留)
- RUNNABLE(実行可能)
- STARTING(実行開始)
- RUNNING(実行中)
- SUCCEEDED(正常終了)
- FAILED(異常終了)
各ジョブステータスの数値をクリックすることでジョブ情報の詳細を確認できます。以下は、FAILED(異常終了)したジョブの詳細です。ステータス理由の欄で、ジョブが失敗した原因(エラーログ)が確認できます。
AWS BatchをCLIからのジョブステータス確認とジョブのキャンセル
AWS CLIから、バッチ処理のステータス確認が可能です。
【関連記事】
▶AWS CLIのインストール方法 AWSアクセスキーの登録と疎通確認
aws batch list-jobsにて、–job-queueにはユーザ側で設定したジョブキュー名を指定します。以下の例では、ステータスがrunnableのまま停止しているジョブの一覧を表示します。
$aws batch list-jobs --job-queue myJOBQueue --job-status runnable --output text --query jobSummaryList[*].[jobId]
---------------------------------------------------------------------------------------- "0cffddb0-8bfa-4ba4-86ba-c5cad59e4529" "884d8bdf-6192-4d4c-ac85-c51093460a01" "236670e3-127a-4fe1-afd6-3f21cf1fe02e" ----------------------------------------------------------------------------------------
ジョブ実行のテストなどをおこなう際、一発で指定ジョブキューのジョブを全てキャンセルするツールを作っておくと便利です。以下は、myJOBQueueというジョブキューの全てのステータスのジョブに対して、ジョブ停止(aws batch terminate-job)を実行します。
#! /bin/bash for state in SUBMITTED PENDING RUNNABLE STARTING RUNNING do for job in $(aws batch list-jobs --job-queue myJOBQueue --job-status $state --output text --query jobSummaryList[*].[jobId]) do echo -ne "Stopping job $job in state $state\t" aws batch terminate-job --reason "Terminating job." --job-id $job && echo "Done." || echo "Failed." done done
AWS Batchのまとめ
- AWS Batchは、AWSでバッチ処理を簡単におこなう機能
- コンピューティング環境にFargate(サーバレスのコンテナ実行環境)を選ぶとさらにコスト削減が可能
- AWS Batchは、AWSマネジメントコンソールのほか、AWS CLIからも制御可能