AWS サクッと EventBridge のハンズオン。EventBridge が動かない、、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/f3090d5c-cb9c-08ca-33f2-a9b91059293d.png)

# はじめに
今回は社内の勉強会向けにハンズオン資料です。

毎週木曜日にAWS勉強会をしているのですが、前々回の話題に「S3 -> EventBridge -> SageMaker」が有り、EventBridge と SageMaker を使ったハンズオンを企画する事にしました。
ただ、SageMaker はサクッと 30 分の勉強会では、できそうにないので別の勉強会にしたいと思います。

今回は、AWS 初心者向けで「S3 -> EventBridge -> SNS」のサービスでハンズオンを行います。
1. S3 : バケット作成
1. EventBridge : S3のファイルアップロードをキャッチして、SNSへ通知
1. SNS : アップロードされたファイルの情報をメールで通知

# 事前準備
- ハンズオン参加者は、AWS 勉強会用のユーザーグループに追加

# ハンズオン
- 各追加リソースには、
    - リソース名は、"サンプルのリソース名" + "_自分の名前"で登録
    - 必ず"project"として、勉強会の名称を登録
- 「**AWS 接続先アカウント**」、「**AWS リージョン**」を 要確認！

## Amazon S3

### バケットの作成
1. バケット作成画面
    - バケット（左のメニューから） -> `バケットを作成`ボタン
1. バケット作成
    - バケット名 : "サンプルのリソース名" + "_自分の名前"
    - タグ - オプション
        - Key = project  Value = 勉強会の名称
    - `バケットを作成`ボタン
1. - バケットにフォルダを作成
    - バケット一覧から作成したバケットを選択
    - `オブジェクト`タブ -> `フォルダの作成`ボタン
        - フォルダ名 : sns
        - `フォルダの作成`ボタン

## Amazon SNS

### トピックの作成
1. トピックの作成画面
    - トピック（左のメニューから） -> `トピックの作成`ボタン
1. トピックの作成
    - 名前 : "サンプルのリソース名" + "_自分の名前"
    - 表示名 : 名前と同じ
    - タグ - オプション
        - Key = project  Value = 勉強会の名称
    - `トピックの作成`ボタン

### サブスクリプションの作成
1. サブスクリプションの作成画面
    - トピックの一覧から作成したトピックを選択
    - `サブスクリプション`タブ -> `サブスクリプションの作成`ボタン
1. サブスクリプションの作成
    - プロトコル : E メール
    - エンドポイント : 自分のメールアドレス

### 確認メール
- サブスクリプションに登録したメールアドレスで下記が受信されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/e0e6366b-84b9-cff9-b64a-cfb96ccd8763.png)
- （時間調整）SNS から自分でメッセージを発行してみる
    - 登録したトピック -> `メッセージの発行`ボタン

## Amazon EventBridge

## ルールの作成
1. ルールの作成画面
    - ルール（左のメニューから） -> `ルールの作成`ボタン
1. ルールの作成
    - 名前 : "サンプルのリソース名" + "_自分の名前"
    - 説明 : s3からsnsへのイベントブリッジ
    - サンプルイベントタイプ : AWSイベント or EventBridgeパートナーイベント
    - サンプルイベント : **記載しない**
    - 作成のメソッド : スキーマを使用する
    - スキーマタイプ : スキーマレジストリからスキーマを選択する
    - スキーマレジストリ : aws.events
    - スキーマ : aws.s3@ObjectCreated
    - モデル : 下記の項目を画像を参考に！
        - ObjectCreated -> detail -> bucket -> name
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/78a01cb7-4b7e-c4ba-b966-870efbfde8fe.png)
        - ObjectCreated -> detail -> object -> key
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/9dd26703-38e4-5800-4628-889081d3ea04.png)
    - `JSONでイベントパターンを生成する`ボタン
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/e05342c4-5a44-2154-4399-7e46c272f54a.png)
    - JSON へ追記
        ```
        "source": ["aws.s3"],
        "detail-type": ["Object Created"],
        ```
    - JSON へ追加した結果
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/bd7b1ff8-a4be-3b0c-41a0-267ef4403cf2.png)
    - `次へ`ボタン
    - ターゲットタイプ : AWSのサービス	
    - ターゲットを選択 : SNSトピック
    - トピック : 上記で作成した SNS トピック
    - `次へ`ボタン
    - タグ - オプション
        - Key = project  Value = 勉強会の名称
    - `次へ`ボタン
    - 内容を確認して、`ルールを作成`ボタン


## 実行！

### ファイルのアップロード
1. ファイルのアップロード画面
    - S3 -> バケット（左のメニューから） -> `汎用バケット`タブ -> 登録したバケット
    - `オブジェクト`タブ -> `sns`フォルダ
    - `オブジェクト`タブ -> `アップロード`ボタン
1. ファイルのアップロード
    - `ファイルの追加`ボタン -> ローカル PC からファイルを選択
    - `アップロード`ボタン

### メールの受信
登録したメールアドレスの受信ボックスを確認します。
1 分ぐらい待ってください。
・・・
・・・
・・・
待っても、受信されないんです。。。

## Amazon S3 (追加設定)
- こんな設定があって、デフォルトでは OFF なんですね。。。

### Amazon EventBridge に通知
- S3 -> バケット -> 登録したバケット -> `プロパティ`タブ -> Amazon EventBridge
- Amazon EventBridge
    - `オフ` -> `オン`
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/c1eab799-41ef-0f27-4ff8-3d42311e917c.png)
    - `変更の保存`ボタン

## 再実行！
S3 の sns フォルダにアップロードしたファイルを一度削除して、再度アップロード。
登録したメールアドレスの受信ボックスを確認します。
下記のメールが受信されれば成功です！

※受信されるメールは、アップロードした S3 とアップロードしたファイルの内容が記載されてます。
　そのため、ここではメール内容は控えます。

## さらにハマった
正常に動作してないようなら、EventBridge を再確認してください。
私は、S3 のバケット名を記載する際に、S3 の画面（HTML）からコピーしてしまったため、下記画像の赤丸箇所に空白が含まれてました。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680230/57179981-eddb-02a6-a0ee-785960a3ef33.png)

# おわりに
- 当たり前ですが、実際に手を動かして作ってみるとイメージがはっきりしました
- コピーペーストには注意！！！
- S3 の EventBridge への通知は追加設定が必要ので注意！
- このボリュームなら、30 分でハンズオンが予定通りに終わりそう

# 事後報告
- IAMポリシーの設定に失敗
- 30分じゃ終わらなかった
- リソースを消すのに楽な方法は？登録したTagで削除したい
- リージョンの確認を忘れずに！

---
**参考（感謝）**
- [AWS EventBridge S3のバケットとフォルダを指定してオブジェクトの作成イベントをキャッチする
](https://qiita.com/miriwo/items/3445a96057e93ab97f96)
- [AWS EventBridgeとSNSの連携](https://qiita.com/ej2kd/items/f3ccbd7cfad76f9f78bf)
- [AWSのEventBridgeが何しても動かない、起動しない件](https://joshi-engineer.com/aws%E3%81%AEeventbridge%E3%81%8C%E4%BD%95%E3%81%97%E3%81%A6%E3%82%82%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84%E3%80%81%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%AA%E3%81%84%E4%BB%B6)