AWS Batch
ユーザーガイド

CloudWatch イベント ターゲットとしての AWS Batch ジョブ

Amazon CloudWatch Events は、Amazon Web Services リソースの変更をシステムイベントとしてほぼリアルタイムのストリームで示します。AWS Batch ジョブは CloudWatch イベント ターゲットとして使用できます。すぐに設定できる簡単なルールを使用して、ルールに一致したイベントに応じて AWS Batch ジョブを送信できます。詳細については、「Amazon CloudWatch イベントとは?」 (Amazon CloudWatch Events ユーザーガイド) を参照してください。

CloudWatch イベント を使用して、cron 式や rate 式により特定の時間に自己トリガーする自動アクションをスケジュールすることもできます。詳細については、『Amazon CloudWatch Events ユーザーガイド』の「ルールのスケジュール式」を参照してください。

CloudWatch イベント ターゲットとしての AWS Batch ジョブの一般的ユースケースは以下のとおりです。

  • 定期的な間隔で発生するスケジュールされたジョブを作成する。たとえば、使用量が低下して Amazon EC2 スポットインスタンスの料金が低くなる時間に発生する cron ジョブなど。

  • CloudTrail に記録された API オペレーションに応じて AWS Batch ジョブを実行します。たとえば、指定された Amazon S3 バケットにオブジェクトがアップロードされたときにジョブを自動的に送信し、CloudWatch イベント のインプットトランスフォーマーを使用してオブジェクトのバケットとキー名を AWS Batch パラメータに渡します。

    注記

    このシナリオでは、すべての AWS リソース (Amazon S3 バケット、CloudWatch イベント ルール、CloudTrail ログなど) が同じリージョンに存在する必要があります。

CloudWatch イベント ルールおよびターゲットを使用して AWS Batch ジョブを送信するには、ユーザーに代わって AWS Batch ジョブを実行するアクセス権限が CloudWatch イベント サービスに必要です。AWS Batch ジョブをターゲットとして指定するルールを CloudWatch イベント コンソールで作成すると、このロールを作成する機会が提供されます。このロールに必要なサービスプリンシパルと IAM アクセス権限の詳細については、「CloudWatch イベント IAM ロール」を参照してください。

スケジュールされた AWS Batch ジョブを作成する

次の手順では、スケジュールされた AWS Batch ジョブと必要な CloudWatch イベント の IAM ロールを作成する方法を示します。

CloudWatch イベント でスケジュールされた AWS Batch ジョブを作成するには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. 左のナビゲーションペインで、[イベント]、[ルールの作成] の順に選択します。

  3. [イベントソース] で、[スケジュール] を選択します。次に、固定間隔スケジュールを使用するか cron 式を使用するかを選択します。詳細については、『Amazon CloudWatch Events ユーザーガイド』の「ルールのスケジュール式」を参照してください。

    • [一定の速度] に、スケジュールの間隔と単位を入力します。

    • [Cron expression] に、タスクスケジュールの cron 式を入力します。これらの式には 6 つの必須フィールドがあり、フィールドは空白で区切られます。詳細と cron 式の例については、『Amazon CloudWatch Events ユーザーガイド』の「Cron 式」を参照してください。

  4. [Targets] で、[Add target] を選択します。

  5. [Batch job queue] (バッチジョブのキュー) を選択し、以下のフィールドに適切な内容を入力します。

    • [ジョブキュー]: ジョブをスケジュールするジョブキューの Amazon リソースネーム (ARN) を入力します。

    • [ジョブ定義]: ジョブに使用するジョブ定義の名前、改正、または完全な ARN を入力します。

    • [ジョブ名]: ジョブの名前を入力します。

    • [配列サイズ]: (オプション) 複数のコピーを実行するためのジョブの配列サイズを入力します。詳細については、「配列ジョブ」を参照してください。

    • [ジョブの試行]: (オプション) ジョブが失敗したときに再試行する回数を入力します。詳細については、「ジョブの再試行の自動化」を参照してください。

  6. ジョブに使用する既存の CloudWatch イベント の IAM ロールを選択するか、[この特定のリソースに対して新しいロールを作成する] を選択して新しいロールを作成します。詳細については、「CloudWatch イベント IAM ロール」を参照してください。

  7. [ルールの定義] で、以下のフィールドに適切に入力し、[ルールの作成] を選択します。

    • [名前]: ルールの名前を入力します。

    • [説明]: (オプション) ルールの説明を入力します。

    • [状態]: ルールを有効にするかどうかを選択し、次の間隔でスケジューリングを開始するか、後日まで無効にするかを指定します。

CloudWatch イベント インプットトランスフォーマーを使用してイベント情報を AWS Batch ターゲットに渡す

CloudWatch イベント のインプットトランスフォーマーを使用して、ジョブ送信で AWS Batch にイベント情報を渡します。これは、Amazon S3 バケットへのオブジェクトのアップロードなど、他の AWS イベント情報の結果としてジョブをトリガーする場合は、特に重要です。コンテナのコマンドで、パラメータの置換値を使用したジョブ定義を使用できます。CloudWatch イベント のインプットトランスフォーマーによって、イベントデータに基づいてパラメータ値を指定できます。たとえば、次のジョブ定義では、S3bucket および S3key というパラメータ値を参照します。

{ "jobDefinitionName": "echo-parameters", "containerProperties": { "image": "busybox", "vcpus": 2, "memory": 2000, "command": [ "echo", "Ref::S3bucket", "Ref::S3key" ] } }

こうすることで、ターゲットがトリガーとなるイベントからの情報を解析し、parameters オブジェクトに変換する AWS Batch を作成するだけです。ジョブが実行されると、トリガーイベントからのパラメータがジョブコンテナのコマンドに渡されます。

注記

このシナリオでは、すべての AWS リソース (Amazon S3 バケット、CloudWatch イベント ルール、CloudTrail ログなど) が同じリージョンに存在する必要があります。

インプットトランスフォーマーを使用して AWS Batch ターゲットを作成するには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. 左のナビゲーションペインで、[イベント]、[ルールの作成] の順に選択します。

  3. [イベントソース] で、[イベントパターン] を選択してから、アプリケーションのニーズに合わせてルールを作成します。

  4. [ターゲット] で [Batch job queue (バッチジョブのキュー)] を選択し、このルールによってトリガーされるジョブのジョブキュー、ジョブ定義、およびジョブ名を指定します。

  5. [入力の設定] で、[インプットトランスフォーマー] を選択します。

  6. インプットトランスフォーマーの上部のテキストボックスで、トリガーされるイベントから解析する値を指定します。たとえば、Amazon S3 イベントからのバケットおよびキー名を解析するには、次の JSON を使用します。

    {"S3BucketValue":"$.detail.requestParameters.bucketName","S3KeyValue":"$.detail.requestParameters.key"}
  7. インプットトランスフォーマーの下部のテキストボックスに、AWS Batch ジョブに渡す Parameters 構造を作成します。これらのパラメータは、ジョブの実行時にジョブコンテナのコマンドの Ref::S3bucket および Ref::S3key プレースホルダーに置き換えられます。

    {"Parameters" : {"S3bucket": <S3BucketValue>, "S3key": <S3KeyValue>}}
  8. ジョブに使用する既存の CloudWatch イベント の IAM ロールを選択するか、[この特定のリソースに対して新しいロールを作成する] を選択して新しいロールを作成します。詳細については、「CloudWatch イベント IAM ロール」を参照してください。

  9. [設定の詳細] を選択し、[ルールの定義] で以下のフィールドに適切に入力してから、[ルールの作成] を選択します。

    • [名前]: ルールの名前を入力します。

    • [説明]: (オプション) ルールの説明を入力します。

    • [状態:] ルールを今すぐ有効にするか、後日まで無効にするかを選択します。