■ はじめに
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 のブログの画像も参考になるかも
※ 注意 本筋とそれるが、ここで途中で終わると、トリガーが作成されていないので注意 [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公式のブログのキャプチャーを参考に。
{ "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