【AWS】AWS Glue ~ EventBridgeでGlue Workflowを起動する ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/07/16/161359

の続き。

 今回は、実際に、EventBridgeを使って、
Glue Workflowを起動してみる

目次

【0】今回、やりたいこと
 1)構成例
【1】EventBridge用のRoleを作成
 1)IAM ロール
【2】Glue componentを作成
 1)Glue jobの作成
 2)Glue Workflow および trigger の作成
【3】EventBridge ルールを作成
 1)Eventパターン例
【4】動作確認

【0】今回、やりたいこと

* S3 上(今回の場合「s3://your-s3-bucket/test/eventbridge/ 配下」)
 にファイルが起これたら、Glue workflow (今回の場合「test-glue-workflow」)
 を実行する
* 以下のAWS公式のドキュメントが参考になるかも

https://aws.amazon.com/jp/blogs/big-data/build-a-serverless-event-driven-workflow-with-aws-glue-and-amazon-eventbridge/
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/starting-workflow-eventbridge.html

1)構成例

[1] S3
 ↓ S3 Data Event
[2] AWS CloudTrail
 ↓ AWS API Call Event
[3] Amazon EventBridge
 ↓ AWS API Call Event
----------------------------- AWS Glue workflow
 ↓ 
[4] AWS Glue - Event-based Trigger
 ↓ 
・・・あとは、Glue Job を実行する流れ

【1】EventBridge用のRoleを作成

[1] AWS マネージメントコンソール上から [IAM]-[Roles]を選択

[2] 「Create role」ボタン押下

[3] 「Trusted entity type」で「Custom trust policy」を選択

[4] 後述『1)IAM ロール』を参考に設定し、「Next」ボタン押下

[5] 「Permissions policies」で 以下のPolicyを追加(チェックを付ける)し、
 「Next」ボタン押下
~~~~~~~~~~~
 * AWSGlueServiceRole
 * ClouldWatchEventsBuildInTargetExecutionAccess
 * ClouldWatchEventsInvocationAccess
~~~~~~~~~~~

[6] ロール名などを入力し、「Create role」ボタン押下
 * Role Name : 必須・任意文字列(今回の場合「test-eventbridge-for-glue-role」)
 * Description : オプション・任意文字列

1)IAM ロール

https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/CWE_IAM_role.html

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "UseEventBridgeForGlue",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Condition": {
        "ArnNotEquals": {
          "aws:PrincipalArn": "arn:aws:iam::444455556666:user/user-name"
        }
      }
    }
  ]
}

【2】Glue componentを作成

1)Glue jobの作成

* 実行したいGlue Jobを作成する
 => 本筋とずれるので、省略

使用するコード:test.py(コードも適当)

print("Hello world!!")

2)Glue Workflow および trigger の作成

[1] AWS マネージメントコンソール上から [AWS Glue]-[Workflows]を選択

[2] 「Add workflow」ボタン押下

[3] 以下を入力し、「Add workflow」ボタン押下し、Glue workflowを作成する
 * Name : 必須。任意文字列(今回の場合、「test-glue-workflow」)
 * Descriptin : 任意。任意文字列(今回の場合、「For EventBridge test」)

[4] 作成したGlue workflowを選択し、[Graph]-[Add trigger]-[Add new]を選択し
 以下を入力し、「Add」ボタン押下
 * Name : 必須。任意文字列(今回の場合、「test-glue-trigger-start」)
 * Descriptin : 任意。任意文字列(今回の場合、「For EventBridge test」)
 * Trigger type : EventBrige event
 * Number of event : 1 <= イベントの回数
 * Time delay in seconds(Optional)  : 任意。正の整数(今回の場合、「5」)
 => AWS のブログの画像も参考になるかも

https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2021/07/13/glue_event_driven_workflow.png

※ 注意
本筋とそれるが、ここで途中で終わると、トリガーが作成されていないので注意

[5] 対象Workflow の [Graph]-[Add node]-[Jobs]を選択

[6] 「1)Glue jobの作成」で用意したGlue Jobにチェックを付け、「Add」ボタン押下

【3】EventBridge ルールを作成

[1] AWS マネージメントコンソール上から [Amazon EventBridge]-[Rules]を選択

[2] 「Create rule」ボタン押下

[3] 「Step1: Define rule detail」において、以下を入力し、「Next」ボタン押下
 * Name : 必須。任意文字列(今回の場合、「test-event-bridge-rule-for-glue」)
 * Descriptin : 任意。任意文字列(今回の場合、「For EventBridge test」)
 * Event bus : default
 * Rule type : Rule with an event pattern

[4] 「Step2: Build event pattern」において、以下を入力し、「Next」ボタン押下
 * Event source : Other
 * Sample event : 任意(今回の場合、デフォルトのまま。これを弄ってハマった、、、)
 * Event pattern : Custom patterns (JSON editor) で「1)Eventパターン例」を入力

[5] 「Step3: Select target(s)」において、以下を入力し、「Next」ボタン押下
 * Target type : AWS service
 * Select a target : Glue workflow
 * Glue workflow name : 「2)Glue Workflow および trigger の作成」で作成したWorkflow
 (今回の場合「test-glue-workflow」)
 * Execution role : 「【1】EventBridge用のRoleを作成」で作成したRole
 (今回の場合「test-eventbridge-for-glue-role」)

[6] 「Step4: Configure tags - optional」は「Next」ボタン押下
 => Tagを入力したい場合は、入力(今回の場合は特に入力せず)

[7] 「Step5: Review and create」で、設定した値を確認後、「Create role」ボタン押下

1)Eventパターン例

* 以下のAWS公式のブログのキャプチャーを参考に。

https://aws.amazon.com/jp/blogs/big-data/build-a-serverless-event-driven-workflow-with-aws-glue-and-amazon-eventbridge/

{
  "source": ["aws.s2"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["s3.amazonaws.com"],
    "requestParameters": {
      "bucketName": ["your-s3-bucket"], <= ★ここは対象S3バケットを指定
      "key": [{
        "prefix": "test/eventbridge/"<= ★ここは対象S3のキー(パス)を指定
      }]
    }
    "eventName": ["PutObject"]
  }
}

https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-event-patterns.html

【4】動作確認

[1] S3 上に適当なファイルを置く
(今回の場合「s3://your-s3-bucket/test/eventbridge/ 配下にtest.txtを置く」)

[2] 作成したGlue workflow が実行されていることを確認
 (今回の場合「test-glue-workflow」)

関連記事

AWS Glue ~ トリガ / EventBridgeイベント ~
https://dk521123.hatenablog.com/entry/2021/07/16/161359
EventBridge ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/06/08/213748