Posted at

CloudWatchのアラームをSlackに通知する(Serverless Application Repositoryでやってみる)

More than 1 year has passed since last update.


Serverless Application Repository とは

re:Invent 2017で発表された Serverless Application Repository が正式にリリースされました。

AWS Serverless Application Repository Now Generally Available

https://aws.amazon.com/jp/about-aws/whats-new/2018/02/aws-serverless-application-repository-now-generally-available/

Serverless Application Repository を使用すると、AWSやコミュニティ、パートナーによって公開されている

サーバーレースアプリケーションを数クリックで自身の環境にデプロイすることができます。

また公開さているテンプレートを利用するだけではなく、自身のアプリケーションの公開や

組織内の非公開での利用も行うことができます。


やってみる

既に数多くのアプリケーションが公開されており、以下のURLからコンソールログイン不要で一覧を確認できます。

https://serverlessrepo.aws.amazon.com/applications

今回は awslabsでも公開されているcloudwatch-alarm-to-slack

を使って CloudWatch アラームの Slack 通知を設定してみたいと思います。


Incoming Webhookの設定(Slack)

まず Slack 側の設定を済ませておきます。

https://<your-team-domain>.slack.com/apps/manage/custom-integrations

から Incoming WebHooks の Configuration を追加します。

通知先のチャネル名を選択し、Add します。

追加後、発行される Webhook URL を控えておきます。

Name や Icon は任意で設定し、設定を保存します。


KMS キーを作成する

cloudwatch-alarm-to-slack では Lambda 関数の環境変数に設定する Slack の Webhook URL を

AWS Key Management Service で暗号化します。

以下の手順であらかじめカスタマーマスターキーを作成しておきます。

IAM コンソールメニューの暗号化キーから、リージョンを選択してキーの作成を押下します。

手順1でキーのエイリアス名を入力し、次のステップに進みます。

手順2のタグは任意で設定します。

手順3でキーを管理できるIAMユーザまたはロールを選択します。

手順4ではキーを使用してデータを暗号化、復号化できるユーザまたはロールを設定します。

Lambdaに設定する実行ロールを選択する必要がありますが、この時点では作成されていないので

そのまま次に進みます。

手順5で設定したポリシーの内容を確認し、キーの作成を完了します。

キーが作成されたらキーIDを控えておきます。


アプリケーションのデプロイ

Lmabda の関数の作成ページでこれまでの、一から作成・設計図(buleprint)に加えて、

サーバーレースアプリケーションのレポジトリが選択できるようになっています。

ここでは slack や CloudWatch等で検索し、cloudwatch-alarm-to-slack を選択します。

デプロイ数はグローバルではなく、リージョン内でのカウントであるようです。

https://docs.aws.amazon.com/ja_jp/serverlessrepo/latest/devguide/serverless-app-consuming-applications.html


(Note: The deployment counts are shown for the region in which you are trying to deployment application)


利用に必要な権限やライセンスの情報を確認することができます。

またデプロイは CloudFormation を拡張したモデルである、AWS Serverless Application Model (AWS SAM)

をもとに行われるため、SAM テンプレートも確認できます。

ページ下部でアプリケーションの起動に必要なパラメータを設定します。

cloudwatch-alarm-to-slack では アプリケーション名に加えて、KMS キーIDの情報が必要です。

前の手順で控えておいたキーIDを入力し、デプロイします。

アプリケーションが正常にデプロイされることを確認します。

ステータス画面では作成されているリソースも確認できます。

cloudwatch-alarm-to-slackで作成されるリソースは以下の通りです。


  • IAMポリシー&実行ロール

  • Lambda 関数


    • 実行ロールおよびトリガーは設定済み



  • SNSトピック

  • サブスクリプション


    • エンドポイントとしてLambda 関数が登録済み



View CloudFormation Stack から実際のスタックも確認できます。

削除についてもCloudFormation からスタック毎削除します。


KMS キーの編集

前の手順で作成したキーの詳細画面から、キーユーザーを追加します。

デプロイ時に作成されたIAMロールをアタッチし、変更を保存します。


Lambda 関数の設定

デプロイされた Lambda 関数の環境変数に Webhook の URL および 通知先チャンネル名を設定する必要があります。

kmsEncryptedHookUrl には 前の手順で控えておいた Webhook URL を記載しますが、プロトコル部分を除いて

記載する必要があります。(ex. hooks.slack.com/services/abc123)

また暗号化の設定で 伝送中の暗号化のためのヘルパーの有効化 にチェックを入れます。

KMSキーの指定では前の手順で作成済のキー名を指定します。

その後、暗号化をクリックし、kmsEncryptedHookUrl を暗号化して Lambda 関数の設定を保存します。

slackChannel は 暗号化不要です。


CloudWatchアラームへの通知先追加

デプロイ後、すべてのアラームが Slack に通知されるわけではありません。

アラーム毎に通知先を追加する必要があります。

デプロイ時に作成されたSNSトピックを送信先に選択し、アラームの変更を保存します。

以上で設定は完了です。参考になれば幸いです。


通知の確認

実際にアラームを発生させ、通知先のSlackチャネルを確認すると内容を確認することができました。


さいごに

今回 Serverless Application Repository リリース記念で試してみましたが、非常に便利なサービスだと感じました。

この他にも Alexa スキルのサンプルやサムネイル作成のような画像処理、splunk や Datadog へのロギングといったデータ処理

など、多種多様なアプリケーションが公開されていますので色々試してみたいと思います。