LoginSignup
7
9

More than 5 years have passed since last update.

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

Posted at

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からコンソールログイン不要で一覧を確認できます。

今回は 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 します。

image.png

追加後、発行される Webhook URL を控えておきます。
Name や Icon は任意で設定し、設定を保存します。

image.png

KMS キーを作成する

cloudwatch-alarm-to-slack では Lambda 関数の環境変数に設定する Slack の Webhook URL を
AWS Key Management Service で暗号化します。
以下の手順であらかじめカスタマーマスターキーを作成しておきます。

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

image.png

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

image.png

手順2のタグは任意で設定します。
手順3でキーを管理できるIAMユーザまたはロールを選択します。

image.png

手順4ではキーを使用してデータを暗号化、復号化できるユーザまたはロールを設定します。
Lambdaに設定する実行ロールを選択する必要がありますが、この時点では作成されていないので
そのまま次に進みます。

手順5で設定したポリシーの内容を確認し、キーの作成を完了します。
キーが作成されたらキーIDを控えておきます。

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

Lmabda の関数の作成ページでこれまでの、一から作成・設計図(buleprint)に加えて、
サーバーレースアプリケーションのレポジトリが選択できるようになっています。
ここでは slack や CloudWatch等で検索し、cloudwatch-alarm-to-slack を選択します。
デプロイ数はグローバルではなく、リージョン内でのカウントであるようです。

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

image.png

利用に必要な権限やライセンスの情報を確認することができます。
またデプロイは CloudFormation を拡張したモデルである、AWS Serverless Application Model (AWS SAM)
をもとに行われるため、SAM テンプレートも確認できます。

image.png

ページ下部でアプリケーションの起動に必要なパラメータを設定します。
cloudwatch-alarm-to-slack では アプリケーション名に加えて、KMS キーIDの情報が必要です。
前の手順で控えておいたキーIDを入力し、デプロイします。

image.png

アプリケーションが正常にデプロイされることを確認します。
ステータス画面では作成されているリソースも確認できます。

image.png

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

  • IAMポリシー&実行ロール
  • Lambda 関数
    • 実行ロールおよびトリガーは設定済み
  • SNSトピック
  • サブスクリプション
    • エンドポイントとしてLambda 関数が登録済み

View CloudFormation Stack から実際のスタックも確認できます。
削除についてもCloudFormation からスタック毎削除します。

KMS キーの編集

前の手順で作成したキーの詳細画面から、キーユーザーを追加します。
デプロイ時に作成されたIAMロールをアタッチし、変更を保存します。

image.png

Lambda 関数の設定

デプロイされた Lambda 関数の環境変数に Webhook の URL および 通知先チャンネル名を設定する必要があります。
kmsEncryptedHookUrl には 前の手順で控えておいた Webhook URL を記載しますが、プロトコル部分を除いて
記載する必要があります。(ex. hooks.slack.com/services/abc123)

また暗号化の設定で 伝送中の暗号化のためのヘルパーの有効化 にチェックを入れます。
KMSキーの指定では前の手順で作成済のキー名を指定します。
その後、暗号化をクリックし、kmsEncryptedHookUrl を暗号化して Lambda 関数の設定を保存します。
slackChannel は 暗号化不要です。

image.png

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

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

image.png

デプロイ時に作成されたSNSトピックを送信先に選択し、アラームの変更を保存します。
以上で設定は完了です。参考になれば幸いです。

通知の確認

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

さいごに

今回 Serverless Application Repository リリース記念で試してみましたが、非常に便利なサービスだと感じました。
この他にも Alexa スキルのサンプルやサムネイル作成のような画像処理、splunk や Datadog へのロギングといったデータ処理
など、多種多様なアプリケーションが公開されていますので色々試してみたいと思います。

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9