なになれ

IT系のことを記録していきます

AWS ChatbotによるLambda関数を用いたAWSへの操作を試した

AWS Chatbotを使うと、CloudWatchアラームからの通知をSlackにPostしたり、Slack上でAWS CLIライクな操作を実施できます。
今回は、AWS Chatbotを使い、Slack上でLambda関数を介して、CodeBuildを実行する仕組みを作ってみました。
その内容を紹介します。

システム構成

f:id:hi1280:20210717152148p:plain

実装内容

事前準備

CodeBuild部分に関しては以下のプログラムを利用しています。
Dockerイメージを作成して、ECRにイメージをPushするような処理を実装しています。

github.com

今回のメインではないため、詳細は割愛します。

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']
    }

PythonAWS SDKであるboto3からCodeBuildを実行するだけの簡単なプログラムです。
このLambda関数を実行するには、Lambda関数の実行ロールで、CodeBuildのStartBuildの実行を許可する必要があります。

AWS Chatbot

マネコンからAWS Chatbotの画面で、Slackと連携するワークスペースとチャンネルを作ればOKです。
アクセス許可のところで、Lambda関数を実行できるように許可する必要があります。
f:id:hi1280:20210717155008p:plain

Slack

AWS Chatbot appを該当のSlackチャンネルに招待します。

次のメッセージでAWS Chatbot appにコマンドを送信します。
start-codebuildというLambda関数をproject-nameパラメータを渡して、実行しています。

@aws invoke start-codebuild --payload {“project-name”: “container-build”}

実行結果のイメージは次のような感じです。
f:id:hi1280:20210717155014p:plain

CodeBuildの通知機能を設定すれば、CodeBuildの実行が成功したかどうかもSlackで確認することができます。
Create a notification rule - Developer Tools console

まとめ

AWS Chatbotを使うとSlackからのAWSの操作を実現できます。
Chatbotを作るには、それなりに作り込みが必要だと思います。
今回試してみて、AWS Chatbotを使えば、Lambda関数の実行が若干面倒ではありますが、それなりにChatOpsの仕組みが作れそうかもしれないと思いました。

参考