Amazon EventBridgeを試す

##はじめに
AWS環境で発生するイベントを、AWSサービスやSaaSのサービスと紐付けることができるサービスがAmazon EventBridgeになります。

https://aws.amazon.com/jp/blogs/news/amazon-eventbridge-event-driven-aws-integration-for-your-saas-applications/

チュートリアルのEC2インスタンス状態変更イベントをKinesisストリームにIngestする手順をやってみます。
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/relay-events-kinesis-stream.html

##試してみる

###事前作業
Kinesisストリームを作成します

```
aws kinesis create-stream --stream-name test --shard-count 1
```

###Amazon EventBridgeのルール作成
管理コンソールでAmazon EventBridgeの画面を開きます。
ルール作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/15079756-7d06-eb8c-7c10-49de7bbb3df1.png)

####名前と説明
任意の名前を入力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/e0c2cca9-9d71-e178-f8a7-c74508002732.png)

###パターンを定義
・イベントパターン
・イベント一致パターン：サービスごとの事前定義パターン
・サービスプロバイダー：AWS
・サービス名：EC2
・イベントタイプ：EC2 Instance State-change Notification
・特定の状態：running
・任意のインスタンス

イベントパターン

```
{
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "EC2 Instance State-change Notification"
  ],
  "detail": {
    "state": [
      "running"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/342b6413-793b-260c-492e-4b0b5d2fdc61.png)

####イベントバスを選択
AWS のデフォルトのイベントバス
選択したイベントバスでルールを有効にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/00217b9a-0c21-f279-2db0-1ddad8c6a657.png)

####ターゲットを選択
先程作成したKinesisストリームを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/103a9e6d-6046-39ab-4e32-b44de78428a9.png)

作成をクリックする

###テスト
EC2を起動する。
Cloudwatchイベントが発火し、KinesisストリームにデータがPutされる。
Kinesisストリームの確認

シャードイテレータの確認

```
$ aws kinesis get-shard-iterator --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON --stream-name test --region ap-northeast-1
{
    "ShardIterator": "AAAAAAAAAAE1mZhG3rrfdQ5tdAaeUbQa2ypHZFGOL/bNXDJrMPwQ6k6cOFwg0Uu/Kc9Coqn1pOfEj6urr9izKxk7/H7dB2DB6Ntw371oTx/Uxi5ixBBOMhkFb4MEVWNAvcW63bSBe7Z+Am7GS7lP1CZJaNV1vnMDKOX42SAStBr2BneylFxgZm25sdq/n1omPCc9JGZqO4dmDxn+txU6k64jvHm+uVSM"
}
```

データを取得

```
$ aws kinesis get-records --shard-iterator "AAAAAAAAAAE1mZhG3rrfdQ5tdAaeUbQa2ypHZFGOL/bNXDJrMPwQ6k6cOFwg0Uu/Kc9Coqn1pOfEj6urr9izKxk7/H7dB2DB6Ntw371oTx/Uxi5ixBBOMhkFb4MEVWNAvcW63bSBe7Z+Am7GS7lP1CZJaNV1vnMDKOX42SAStBr2BneylFxgZm25sdq/n1omPCc9JGZqO4dmDxn+txU6k64jvHm+uVSM" --region ap-northeast-1
{
    "Records": [
        {
            "SequenceNumber": "49597676585257306017395502932031331338920563685948653570",
            "ApproximateArrivalTimestamp": 1563343124.406,
            "Data": "eyJ2ZXJzaW9uIjoiMCIsImlkIjoiNWMzYTRhYTYtOGY0ZS02YzQ3LTlkMTEtNjEwOGU0NWJlY2YyIiwiZGV0YWlsLXR5cGUiOiJFQzIgSW5zdGFuY2UgU3RhdGUtY2hhbmdlIE5vdGlmaWNhdGlvbiIsInNvdXJjZSI6ImF3cy5lYzIiLCJhY2NvdW50IjoiNzkzNDkzMjg4NzA0IiwidGltZSI6IjIwMTktMDctMTdUMDU6NTg6NDNaIiwicmVnaW9uIjoiYXAtbm9ydGhlYXN0LTEiLCJyZXNvdXJjZXMiOlsiYXJuOmF3czplYzI6YXAtbm9ydGhlYXN0LTE6NzkzNDkzMjg4NzA0Omluc3RhbmNlL2ktMGY1YThkOWIzMDQyZjczNmMiXSwiZGV0YWlsIjp7Imluc3RhbmNlLWlkIjoiaS0wZjVhOGQ5YjMwNDJmNzM2YyIsInN0YXRlIjoicnVubmluZyJ9fQ==",
            "PartitionKey": "5c3a4aa6-8f4e-6c47-9d11-6108e45becf2_b25f9c09-11fa-6a82-b840-013b6ae39b76"
        }
    ],
    "NextShardIterator": "AAAAAAAAAAG6RsTO2LGqtJLbeMj702cPpUN2Q7uWc/wCaocHWcbo6VHydK2J6hYdwgsL6FrRE31VtpcJAII02j+Ao/il/g5nPQ4jJiPyDqBm3F86Fn9UMTaVIs/I35oeiznH1+Lk8RbXcXj1/S5Bi6sbbF9hFY1lbJG9Ue1E3cBLK3BZz+8vbcanlFQlZ3XDxSNc8hxyOrzG0+lWSWwfzxZ2Dc96F4cW",
    "MillisBehindLatest": 0
}
```

データを確認
base64デコードする

```
$ echo "eyJ2ZXJzaW9uIjoiMCIsImlkIjoiNWMzYTRhYTYtOGY0ZS02YzQ3LTlkMTEtNjEwOGU0NWJlY2YyIiwiZGV0YWlsLXR5cGUiOiJFQzIgSW5zdGFuY2UgU3RhdGUtY2hhbmdlIE5vdGlmaWNhdGlvbiIsInNvdXJjZSI6ImF3cy5lYzIiLCJhY2NvdW50IjoiNzkzNDkzMjg4NzA0IiwidGltZSI6IjIwMTktMDctMTdUMDU6NTg6NDNaIiwicmVnaW9uIjoiYXAtbm9ydGhlYXN0LTEiLCJyZXNvdXJjZXMiOlsiYXJuOmF3czplYzI6YXAtbm9ydGhlYXN0LTE6NzkzNDkzMjg4NzA0Omluc3RhbmNlL2ktMGY1YThkOWIzMDQyZjczNmMiXSwiZGV0YWlsIjp7Imluc3RhbmNlLWlkIjoiaS0wZjVhOGQ5YjMwNDJmNzM2YyIsInN0YXRlIjoicnVubmluZyJ9fQ==" | base64 -D
{"version":"0","id":"5c3a4aa6-8f4e-6c47-9d11-6108e45becf2","detail-type":"EC2 Instance State-change Notification","source":"aws.ec2","account":"XXXXXXXXXX","time":"2019-07-17T05:58:43Z","region":"ap-northeast-1","resources":["arn:aws:ec2:ap-northeast-1:XXXXXXXXXX:instance/i-0f5a8d9b3042f736c"],"detail":{"instance-id":"i-0f5a8d9b3042f736c","state":"running"}}" 
```

CloudWatchイベントの情報が取得できていることを確認する。

##投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。