ChatOpsの第一歩、Slack(Chatbot)経由でLambda関数を実行する
ChatOps=チャットで運用を行う という解釈のもと、その第一弾として、私もよく利用するSlack経由でLambda関数の実行をしてみたいと思います。 AWSにはChatbotというSlackとAWSを連携する機能があるので、それを利用してまずは単純なLambda関数の実行を実装してみます。
元々は通知機能がメインのChatbotでしたが、最近ではLambdaやEC2の操作も行えるようになっています。
AWSのbuilders.flashにもChatOpsの記事がありましたので参考までに貼っておきます。 aws.amazon.com
Chatbotのセットアップ
Chatbotのページに行き、クライアントを設定します。
ブラウザでSlackにログインしていない場合は以下のようにSign in のページが表示されるので、ログインします。
ログインしている場合は最初から以下のように連携のページが表示されるので許可します。
ワークスペースが追加されるので、Chatbotを使用したいSlackのチャネルを設定します。
今回私はchatbot-lambdaというSlackチャネルでChatbotを利用していきます。
IAMロールはテンプレートから作成し、Lambda実行予定のため「Lambda呼び出しコマンドのアクセス許可」を追加しておきます。
チャネルが設定できました。
Slack側で動作確認してみます。まずは下記をSlack上で実行し、@awsユーザーをinviteします。
/invite @aws
invite後、以下のようにhelpを実行するとChatbotの色々な使い方が表示されます。
@aws help
lambdaのinvoke(呼び出し)もありますね。
ここまででChatbotおよびSlackの準備は完了です。
Lambda関数の作成
今回はChatbotの実行を試すのがメインなので、関数の内容はとてもシンプルなものにしました。
ランタイムはPython3.8です。IAMロールはデフォルトでOK。
関数のコードは以下のとおり。メッセージをreturnするだけです。
def lambda_handler(event, context): return { 'message': 'Hello from Chatbot!' }
Chatbot(Slack)経由でLambda実行
Lambda関数ができたのでSlackから実行してみます。以下の通りメッセージを打ち込みます。初回はリージョン名を入力する必要がありました。
@aws lambda invoke --function-name ChatbotFunction --region ap-northeast-1
実行するかどうか聞かれるのでYesをポチっと押します。
実行されたようです。Lambda関数に書いた「Hello from Chatbot!」もSlack上に表示されています。
ちなみに2回目以降はリージョン指定が不要なことに加え、--function-nameは省略できたので以下でも実行できました。
@aws lambda invoke ChatbotFunction
まとめ
Slackから気軽にLambda実行、良いですね。この他にもChatbotの機能は多くありそうなので、本格的にChatbotを使用した運用も検討できそうです。 Chatbotに強い権限を渡して何でもできてしまうとそれはそれでセキュリティ的な問題にもなりそうなので、どこまでやるかは要検討ですね。
もうちょっと実際の運用で使えそうなChatbotのネタが無いか考えてみます。