Edited at

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


やりたいこと

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


つかったもの


  • Stackdriver


    • アラート内容をWebhookで投げる。



  • AWS API Gateway


    • JSONを受け取ってSQSにつっこむ。



  • AWS SQS


    • つっこまれる。




やりかた


AWS IAM

こんなロールを作りました。

権限もりもり。

スクリーンショット 2019-07-31 16.51.42.png


AWS SQS

今回はFIFOタイプを選択しました。

コンテンツに基づく重複排除はチェックONにします。

そのほかはデフォルトで作りました。

スクリーンショット 2019-07-31 16.50.53.png


AWS API Gateway

こんな感じで作りました。

スクリーンショット 2019-07-30 14.54.04.png

API名、リソース名は任意で。

スクリーンショット 2019-07-30 14.54.56.png

パス上書き(省略可能)はSQSのURL後半(012345678901/sqs_queue_name)を設定。

実行ロールは先ほど作成したIAMロールのarnを設定。

スクリーンショット 2019-07-30 14.57.57.png

メソッドリクエスト統合リクエストを設定します。

スクリーンショット 2019-07-31 17.31.44.png

メソッドリクエストは、こんな感じで設定しました。

実際はAPIキーを設定した方がよいかと思います。

スクリーンショット 2019-07-31 18.03.25.png

統合リクエストはこんな感じで設定。

スクリーンショット 2019-07-31 17.32.28.png

下部にスクロールして、HTTPヘッダーマッピングテンプレートを設定します。

スクリーンショット 2019-07-31 17.35.21.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

URLを控えておきます。

ついでにログ有効化してます。

スクリーンショット 2019-07-31 18.19.50.png


Stackdriver


Webhookの設定

公式ドキュメント

Webhookの設定を作ります。

ENDPOINT URLは、先ほど控えたURLにメソッド(/messages)を追加して記載します。

スクリーンショット 2019-07-30 15.23.21.png


アラートの作成

今回はGCEインスタンスのUptime監視データが欠損したらアラートを飛ばすように設定しました。

Notificationsに先ほど作成したWebhookを設定します。

スクリーンショット 2019-07-31 18.34.43.png


うごかしてみる

正常

スクリーンショット 2019-07-31 18.52.19.png

キューもない

スクリーンショット 2019-07-31 18.54.33.png

インスタンス停止後、アラート発報。

スクリーンショット 2019-07-31 19.02.09.png

キューができた!

スクリーンショット 2019-07-31 19.09.22.png

中身

スクリーンショット 2019-07-31 19.03.05.png


ログをみてみる

初めてAPIGateway使ったので、色々ハマりましてログが役立ちました。

スクリーンショット 2019-07-31 19.10.25.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