Amazon EventBridge イベントによる AWS Glue ワークフローの開始 - AWS Glue

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EventBridge イベントによる AWS Glue ワークフローの開始

Amazon EventBridge (別名 CloudWatch Events) を使用すると、AWS サービスを自動化して、アプリケーションの可用性の問題やリソースの変更などのシステム的なイベントに自動的に対応できます。AWS のサービスからのイベントは、ほぼリアルタイムに EventBridge に提供されます。簡単なルールを記述して、注目するイベントと、イベントがルールに一致した場合に自動的に実行するアクションを指定できます。

EventBridge の機能を使用することで、AWS Glue は、イベント駆動型アーキテクチャにおけるイベントのプロデューサおよびコンシューマとして動作します。ワークフローに対して AWS Glue では、コンシューマーとして、あらゆるタイプの EventBridge イベントをサポートしています。このための最も一般的なユースケースとしては、Amazon S3 バケットが新しいオブジェクトを受け取る場合が挙げられます。データが、不規則または定義されていない間隔で到着した際には、可能なかぎり素早くそれを処理できます。

注記

AWS Glue は、EventBridge メッセージの配信を保証していません。EventBridge により重複したメッセージが配信された場合にも、AWS Glue は、重複の排除を行いません。対応すべき処理は、ユースケースに基づいて管理する必要があります。

不要なイベントが送信されないように、EventBridge ルール適切に設定します。

開始する前に

Amazon S3 データイベントを使用してワークフローを開始する場合は、対象の S3 バケットのイベントが AWS CloudTrail および EventBridge にログ記録されたことを確認します。そのためには、CloudTrail の証跡を作成する必要があります。詳細については、「Creating a trail for your AWS account」を参照してください。

EventBridge イベントを使用してワークフローを開始するには
注記

以下のコマンドで、下記のような置き換えを行います。

  • <workflow-name> には、ワークフローに割り当てる名前。

  • <trigger-name> には、トリガーに割り当てる名前。

  • <bucket-name> には、Amazon S3 バケットの名前。

  • <account-id> には、有効な AWS アカウント ID。

  • <region> には、リージョン名 (例: us-east-1)

  • <rule-name> には、EventBridge ルールに割り当てる名前。

  1. EventBridge ルールとターゲットを作成および表示するための、AWS Identity and Access Management (IAM) アクセス許可があることを確認します。以下は、アタッチできるサンプルのポリシーです。オペレーションとリソースを制限するために、このポリシーの範囲を狭めたい場合もあります。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutRule", "events:DisableRule", "events:DeleteRule", "events:PutTargets", "events:RemoveTargets", "events:EnableRule", "events:List*", "events:Describe*" ], "Resource": "*" } ] }
  2. AWS Glue にイベントが渡される際に、EventBridge サービスが引き受けることができる IAM ロールを作成します。

    1. IAM コンソールの [Create role] (ロールの作成) ページで、[AWS Service] を選択します。次に、[CloudWatch Events] (CloudWatch イベント) サービスを選択します。

    2. [Create role] (ロールの作成) ウィザードを完了します。ポリシー CloudWatchEventsBuiltInTargetExecutionAccess および CloudWatchEventsInvocationAccess が、ウィザードにより自動的にアタッチされます。

    3. 次のインラインポリシーをロールにアタッチします。このポリシーにより、EventBridge サービスはイベントを AWS Glue に送れるようになります。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:notifyEvent" ], "Resource": [ "arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>" ] } ] }
  3. 次のコマンドを入力して、ワークフローを作成します。

    この他のオプションのコマンドラインパラメータについては、AWS CLI コマンドリファレンスの「create-workflow」を参照してください。

    aws glue create-workflow --name <workflow-name>
  4. 次のコマンドを入力して、ワークフローのための EventBridge イベントトリガーを作成します。これがワークフローの開始トリガーになります。<actions>は、実行するアクション (開始するジョブとクローラ) に置き換えます。

    引数 actions の記述方法については、AWS CLIコマンドリファレンスの「create-trigger」を参照してください。

    aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --actions <actions>

    単一の EventBridge イベントではなく、バッチされたイベントによってワークフローをトリガーする場合は、代わりに次のコマンドを入力します。

    aws glue create-trigger --workflow-name <workflow-name> --type EVENT --name <trigger-name> --event-batching-condition BatchSize=<number-of-events>,BatchWindow=<seconds> --actions <actions>

    event-batching-condition 引数の BatchSize は必須であり、BatchWindow はオプションです。BatchWindow が省略された場合、ウィンドウはデフォルトで (最大ウィンドウサイズの) 900 秒に設定されます。

    次の例では、3 つの EventBridge イベントを受信した後、または最初のイベントが到着してから 5 分経過後の、いずれか早いタイミングで eventtest ワークフロー開始するトリガーを作成しています。

    aws glue create-trigger --workflow-name eventtest --type EVENT --name objectArrival --event-batching-condition BatchSize=3,BatchWindow=300 --actions JobName=test1
  5. Amazon EventBridge でルールを作成します。

    1. 任意のテキストエディタで JSON オブジェクトを作成し、ルールの詳細を記述します。

      次の例では、イベントソースとして Amazon S3 を、イベント名として PutObject を、リクエストパラメータとしてバケット名を、それぞれ指定しています。このルールは、新しいオブジェクトがバケットで受信された場合にワークフローを開始します。

      { "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventSource": [ "s3.amazonaws.com" ], "eventName": [ "PutObject" ], "requestParameters": { "bucketName": [ "<bucket-name>" ] } } }

      新しいオブジェクトがバケット内のフォルダに到着した際にワークフローを開始させるには、次のコードを requestParameters に置き換えます。

      "requestParameters": { "bucketName": [ "<bucket-name>" ] "key" : [{ "prefix" : "<folder1>/<folder2>/*"}}] }
    2. 任意のツールを使用して、ルールを記述した JSON オブジェクトの文字列をエスケープします。

      {\n \"source\": [\n \"aws.s3\"\n ],\n \"detail-type\": [\n \"AWS API Call via CloudTrail\"\n ],\n \"detail\": {\n \"eventSource\": [\n \"s3.amazonaws.com\"\n ],\n \"eventName\": [\n \"PutObject\"\n ],\n \"requestParameters\": {\n \"bucketName\": [\n \"<bucket-name>\"\n ]\n }\n }\n}
    3. 次のコマンドを実行して、JSON パラメータテンプレートを作成します。このテンプレートを編集して、後続の put-rule コマンドの入力パラメータを指定します。出力をファイルに保存します。この例では、ruleCommand というファイルに保存しています。

      aws events put-rule --name <rule-name> --generate-cli-skeleton >ruleCommand

      --generate-cli-skeleton パラメータの詳細については、AWS Command Line Interface ユーザーガイドの「Generating AWS CLI skeleton and input parameters from a JSON or YAML input file」を参照してください。

      出力ファイルは以下のようになります。

      { "Name": "", "ScheduleExpression": "", "EventPattern": "", "State": "ENABLED", "Description": "", "RoleArn": "", "Tags": [ { "Key": "", "Value": "" } ], "EventBusName": "" }
    4. このファイルを編集して、少なくとも NameEventPattern、および State パラメータを指定しながら、必要に応じて他のパラメータを削除します。EventPattern パラメータでは、前のステップで作成したルール詳細のために、エスケープされた文字列を指定します。

      { "Name": "<rule-name>", "EventPattern": "{\n \"source\": [\n \"aws.s3\"\n ],\n \"detail-type\": [\n \"AWS API Call via CloudTrail\"\n ],\n \"detail\": {\n \"eventSource\": [\n \"s3.amazonaws.com\"\n ],\n \"eventName\": [\n \"PutObject\"\n ],\n \"requestParameters\": {\n \"bucketName\": [\n \"<bucket-name>\"\n ]\n }\n }\n}", "State": "DISABLED", "Description": "Start an AWS Glue workflow upon new file arrival in an Amazon S3 bucket" }
      注記

      ワークフローの構築が完了するまで、ルールを無効にしたままにしておくことをお勧めします。

    5. 次の put-rule コマンドを入力し、ファイル ruleCommand から入力パラメータを読み取ります。

      aws events put-rule --name <rule-name> --cli-input-json file://ruleCommand

      次の出力は、正しく処理されたことを示しています。

      {
          "RuleArn": "<rule-arn>"
      }
      
  6. 次のコマンドを入力して、ターゲットにルールをアタッチします。ターゲットは、AWS Glue のワークフローです。<role-name>は、この手順の最初に作成したロールに置き換えます。

    aws events put-targets --rule <rule-name> --targets "Id"="1","Arn"="arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>","RoleArn"="arn:aws:iam::<account-id>:role/<role-name>" --region <region>

    次の出力は、正しく処理されたことを示しています。

    {
        "FailedEntryCount": 0,
        "FailedEntries": []
    }
  7. 次のコマンドを入力して、ルールとターゲットの接続が正常に行われたことを確認します。

    aws events list-rule-names-by-target --target-arn arn:aws:glue:<region>:<account-id>:workflow/<workflow-name>

    接続に成功した場合は次のような出力になります。<rule-name> は作成したルールの名前です。

    {
        "RuleNames": [
            "<rule-name>"
        ]
    }
    
  8. AWS Management Console にサインインし、AWS Glue コンソール (https://console.aws.amazon.com/glue/) を開きます。

  9. ワークフローを選択し、ワークフローグラフで、開始トリガーとそのアクション (ワークフローが開始するジョブまたはクローラ) の表示を確認します。その後、ステップ 3: さらにトリガーを追加する の手順に進みます。または、AWS Glue API か AWS Command Line Interface を使用して、ワークフローに他のコンポーネントを追加します。

  10. ワークフローの指定を完了したら、ルールを有効にします。

    aws events enable-rule --name <rule-name>

    これで、EventBridge イベントまたはイベントのバッチによって、ワークフローを開始する準備が整いました。