StackdriverからAWS SQSにキューを追加してみた

# やりたいこと
Stackdriverで検知したアラートをSQSにつっこんで、その後ごにょごにょしたい。

# つかったもの
* Stackdriver
    * アラート内容をWebhookで投げる。
* AWS API Gateway
    * JSONを受け取ってSQSにつっこむ。
* AWS SQS
    * つっこまれる。

# やりかた
## AWS IAM
こんなロールを作りました。
権限もりもり。
![スクリーンショット 2019-07-31 16.51.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/134ec99c-12cd-4916-8178-786988a69eea.png)

## AWS SQS
今回はFIFOタイプを選択しました。
__コンテンツに基づく重複排除__はチェックONにします。
そのほかはデフォルトで作りました。
![スクリーンショット 2019-07-31 16.50.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/212a0832-9e88-109e-2956-8e6f4fbf7b6e.png)

## AWS API Gateway
こんな感じで作りました。
![スクリーンショット 2019-07-30 14.54.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/2fee646c-ed01-cd9d-74b6-c579b947aef0.png)

API名、リソース名は任意で。
![スクリーンショット 2019-07-30 14.54.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/5d050d1d-5634-53e8-3a0d-5f214537c3d1.png)

__パス上書き（省略可能）__はSQSの__URL__後半（012345678901/sqs_queue_name）を設定。
__実行ロール__は先ほど作成したIAMロールのarnを設定。
![スクリーンショット 2019-07-30 14.57.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/17f33e23-e679-e083-0834-e7421a72521f.png)

__メソッドリクエスト__と__統合リクエスト__を設定します。
![スクリーンショット 2019-07-31 17.31.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/f32874a5-2e48-3ee2-b8a1-c379b262668b.png)

__メソッドリクエスト__は、こんな感じで設定しました。
実際はAPIキーを設定した方がよいかと思います。
![スクリーンショット 2019-07-31 18.03.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/dd622329-41ad-461c-4e1a-ad8246fdabbd.png)

__統合リクエスト__はこんな感じで設定。
![スクリーンショット 2019-07-31 17.32.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/bc657997-1b6d-3538-fa79-23f5584a1c45.png)

下部にスクロールして、__HTTPヘッダー__と__マッピングテンプレート__を設定します。
![スクリーンショット 2019-07-31 17.35.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/d733cc7e-d5ab-7963-2c0a-7a5b06c9a0c8.png)
__HTTPヘッダー__

| 名前 | マッピング元 | キャッシュ |
|:------------:|:-----------------------------------:|:--:|
| Content-Type | 'application/x-www-form-urlencoded' | OFF |

__マッピングテンプレート__

| リクエスト本文のパススルー | Content-Type | テンプレート |
|:-:|:-:|:-:|
| なし | application/json | Action=SendMessage&MessageGroupId=hoge&MessageBody=$input.body |

APIをデプロイします。
![スクリーンショット 2019-07-30 15.22.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/e0c1ad3d-0c09-6889-4431-63c459bb59ff.png)

URLを控えておきます。
ついでにログ有効化してます。
![スクリーンショット 2019-07-31 18.19.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/df316eac-f72a-dc4c-cecc-8b09c7879233.png)

## Stackdriver
### Webhookの設定
[公式ドキュメント](https://cloud.google.com/monitoring/support/notification-options?hl=ja#webhooks)

Webhookの設定を作ります。
__ENDPOINT URL__は、先ほど控えたURLにメソッド（/messages）を追加して記載します。
![スクリーンショット 2019-07-30 15.23.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/6529e513-17d0-5221-8316-7acc60de0e8b.png)

### アラートの作成
今回はGCEインスタンスのUptime監視データが欠損したらアラートを飛ばすように設定しました。
__Notifications__に先ほど作成したWebhookを設定します。
![スクリーンショット 2019-07-31 18.34.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/386aabad-4296-72cd-69ce-c0b183a4db33.png)

# うごかしてみる
正常
![スクリーンショット 2019-07-31 18.52.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/163ae9e0-0252-76c6-bd9e-ecebaf59f9a9.png)
キューもない
![スクリーンショット 2019-07-31 18.54.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/d6421520-438d-5cd9-b36e-0e685294660c.png)

インスタンス停止後、アラート発報。
![スクリーンショット 2019-07-31 19.02.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/1a4d00f8-37e1-2a0b-bd3c-32ea5c0d567b.png)

キューができた！
![スクリーンショット 2019-07-31 19.09.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/6f808a73-bf67-105f-e01f-803ce80cf44d.png)

中身
![スクリーンショット 2019-07-31 19.03.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/30830cab-024f-c4ca-03ec-43a844b1bdcc.png)

# ログをみてみる
初めてAPIGateway使ったので、色々ハマりましてログが役立ちました。
![スクリーンショット 2019-07-31 19.10.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472216/84a22745-e262-a140-4637-eac42550127a.png)

ちなみにcurlでテストする際は下記コマンドでテストできました。

```
curl -H "Content-Type: application/json" -D - -X POST -d '{"hogehoge": "fugafuga"}' https://hogehoge.execute-api.ap-northeast-1.amazonaws.com/stackdrivertest/messages
```

# 参考
下記記事を参考にさせて頂きました。
ありがとうございます。

API Gateway 経由で SQS へメッセージを送る
https://qiita.com/itooww/items/df5efc6df64fae386e4c