[AWS/Talend] AWS S3へのファイル配置をトリガーにTMC上のTalendジョブを実行する手順 (part1 AWS編) 

# はじめに
ご無沙汰しております。
直近記事のネタになりそうなものがなく、投稿をサボっていました。
さて、今回は
**Amazon S3へのファイル配置をトリガーに、TMC上のTalendジョブを実行**
という仕組みを構築しましたので、その備忘録として記事にまとめたいと思います。

今回の記事は2部構成で
* [AWS側] イベント通知設定
* [Talend側] TMC上でのWebhook実行の設定
となります。

本投稿は
**[AWS側] イベント通知設定**
についての内容となります。
Talendへの連携に限らず、さまざまな用途で利用可能ですので、ぜひご覧ください。

# 必要な作業

今回は、
**「Amazon S3にファイルが配置されたことをトリガーに、Amazon SNSのパブリッシュを行い、TMCのWebhook用URLにリクエストを送信する」**
という仕組みを構築しました。

この実現のためには、以下の2つの設定を行う必要があります。
* [Amazon SNSの設定](#amazon-snsの設定)
* [Amazon S3の設定](#amazon-s3の設定)

下記で、これらについて順を追って解説していきます。

## Amazon SNSの設定

Amazon Simple Notification Service (Amazon SNS) について、詳細は公式サイトをご覧ください。

https://aws.amazon.com/jp/sns/

Amazon SNS側の設定としては、以下の2つを行う必要があります。
1. [トピックの作成](#トピックの作成)
1. [サブスクリプションの設定](#サブスクリプションの設定)

### トピックの作成
トピックの作成は下記の手順で行います。
1. Amazon SNSのダッシュボードにアクセスし、「トピック」を押下する
![topic_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/b826748a-43a7-d9b9-1c8d-c1b0db021763.png)

1. 「トピックの作成」を押下する
![topic_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/1f0812b5-f2b7-dd6d-4aa7-2db7942c27bf.png)

1. 情報を入力し、画面下部の「トピックを作成」を押下する
![topic_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/e80e0df5-81bf-42a4-aafb-45ba56c2b52f.png)
![topic_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/7cfc3f18-754f-23a6-eec6-0f288d29320d.png)

    今回の設定内容は以下の通り
    * タイプ : 今回は「スタンダード」を選択
    * 名前 : 条件に沿った任意の文字列
    * 表示名 - オプション : 条件に沿った任意の文字列
    * アクセスポリシー : 以下の内容を追加
        ```
        "Sid": "(任意の名称)",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": "SNS:Publish",
        "Resource": "arn:aws:sns:<region>:<AccountID>:<Topic>",
        "Condition": {
            "StringEquals": {
                "AWS:SourceArn": "arn:aws:s3:::<BucketName>"
            }
        }
    * その他の設定は変更しない
1. 「トピック (トピック名) が正常に作成されました」と表示されたら完了
![topic_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/9ccfb9a4-09b8-3ffb-87c4-3dcae405fa07.png)

これで、トピックの作成は完了しました。

### サブスクリプションの設定
次に、サブスクリプションの設定を行います。

:::note info
サブスクリプションの設定にあたり、事前にTMC側にてWebhook用のURLを用意しておく必要があります。
赤枠の箇所にURLが表示されます。
![webhook.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/ce89bfd8-ef01-84aa-bdbd-6d8a603b81eb.png)
:::

1. Amazon SNSのダッシュボードにアクセスし、「トピック」を押下する
![subscription_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/c134dbc4-bb4a-6fb3-32f4-f5c92d495749.png)

1. 「サブスクリプションの作成」を押下する
![subscription_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/8e563a20-a22f-ae4c-9550-35844b62cb37.png)

1. 情報を入力し、画面下部の「トピックを作成」を押下する
![subscription_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/4795911a-0201-fb30-082f-ef07067750db.png)
![subscription_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/648928b0-4ddc-dc3f-155a-f804bad75f0a.png)

    今回の設定内容は以下の通り
    * トピックARN : [トピックの作成](#トピックの作成)で作成したトピックのARN
    * プロトコル : 今回は"HTTPS"を指定
    * エンドポイント : Webhook実行用URLを指定
    * その他の設定は変更しない

1. 「(トピック名) へのサブスクリプションが正常に作成されました」と表示されたら、サブスクリプションの作成は完了
![subscription_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/184bdaf5-b3d6-f493-aee0-10acd5b2c67b.png)

サブスクリプションが作成された際、サブスクリプションを有効化するための情報が、登録したURLに対して送信されます。

https://docs.aws.amazon.com/ja_jp/sns/latest/dg/SendMessageToHttp.confirm.html

サブスクリプションの登録後、SubscribeURLにGetリクエストを送信することで、このサブスクリプションが有効になります。

:::note info
Amazon SNSからTalendのWebhook用アドレスにリクエストを送信した場合、(SubscribeURLも含め) Talendジョブ側にJSON形式で情報が渡ります。
このため今回は、Webhookで呼び出されるジョブに「JSONの"\\$.data.Type"の値が"SubscriptionConfirmation"である場合に、"\\$.data.SubscribeURL"のURLにGetリクエストを送信する」という処理を入れ、初回登録時に自動で有効化できるようにしました。
:::

ここまでで、サブスクリプションが利用できるようになりました。手動でも「メッセージの発行」を行うことで、(一応は) Webhookでジョブを実行することができます。

## Amazon S3の設定
Amazon SNSの設定ができたところで、次はAmazon S3側の設定を下記の手順で行います。

1. イベント通知を行いたいバケットのプロパティから、「イベント通知の作成」を押下する
![s3_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/f63d1620-d0a1-61e0-e7fe-f5456a43a4ea.png)

1. 情報を入力し、画面下部の「変更の保存」を押下する
![s3_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/4bfcd5fb-48e2-7fb4-2832-3ac8ec74fff6.png)
![s3_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/5087a70a-7e3d-4d73-7a59-29836f0f2e45.png)
![s3_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/b5d32885-0b00-7e17-10af-8347f2372aeb.png)

1. 「イベント通知「(入力名)」は正常に作成されました。」と表示されたら完了
![s3_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646113/02b7c904-ee98-3d8a-2d01-9deb2b5cceb8.png)

ここまでで、S3側の設定も完了です。
お疲れ様でした。

# 最後に
最近、Talendとは直接関係のない作業を行うことも増えてきましたが、なんやかんやでそれらタスクを (一応は) こなせている自分自身に驚いています。
こうやって、少しづつでもできることが増えていくのはとてもいいものですね。

以上、お読みいただきありがとうございました。