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 します。
追加後、発行される 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 を選択します。
デプロイ数はグローバルではなく、リージョン内でのカウントであるようです。
(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 へのロギングといったデータ処理
など、多種多様なアプリケーションが公開されていますので色々試してみたいと思います。