AWS ChatbotによるLambda関数を用いたAWSへの操作を試した
AWS Chatbotを使うと、CloudWatchアラームからの通知をSlackにPostしたり、Slack上でAWS CLIライクな操作を実施できます。
今回は、AWS Chatbotを使い、Slack上でLambda関数を介して、CodeBuildを実行する仕組みを作ってみました。
その内容を紹介します。
システム構成
実装内容
事前準備
CodeBuild部分に関しては以下のプログラムを利用しています。
Dockerイメージを作成して、ECRにイメージをPushするような処理を実装しています。
今回のメインではないため、詳細は割愛します。
Lambda関数
AWS Chatbotから呼び出すLambda関数を作成します。
このLambda関数では、事前に準備したCodeBuildを実行する処理を実装します。
実装は、下記のPythonのプログラムになります。
lambda_function.py
import boto3 def lambda_handler(event, context): client = boto3.client('codebuild') response = client.start_build( projectName=event['project-name'] ) return { 'projectName': response['build']['projectName'], 'buildStatus': response['build']['buildStatus'] }
PythonのAWS SDKであるboto3からCodeBuildを実行するだけの簡単なプログラムです。
このLambda関数を実行するには、Lambda関数の実行ロールで、CodeBuildのStartBuildの実行を許可する必要があります。
AWS Chatbot
マネコンからAWS Chatbotの画面で、Slackと連携するワークスペースとチャンネルを作ればOKです。
アクセス許可のところで、Lambda関数を実行できるように許可する必要があります。
Slack
AWS Chatbot appを該当のSlackチャンネルに招待します。
次のメッセージでAWS Chatbot appにコマンドを送信します。
start-codebuildというLambda関数をproject-nameパラメータを渡して、実行しています。
@aws invoke start-codebuild --payload {“project-name”: “container-build”}
実行結果のイメージは次のような感じです。
CodeBuildの通知機能を設定すれば、CodeBuildの実行が成功したかどうかもSlackで確認することができます。
Create a notification rule - Developer Tools console
まとめ
AWS Chatbotを使うとSlackからのAWSの操作を実現できます。
Chatbotを作るには、それなりに作り込みが必要だと思います。
今回試してみて、AWS Chatbotを使えば、Lambda関数の実行が若干面倒ではありますが、それなりにChatOpsの仕組みが作れそうかもしれないと思いました。