SlackでAWS Lambdaを実行してみた
こんにちは、ジョン・ヒョンジェです。
今回はAWS LambdaをSlackで実行する方法について説明します。
はじめに
AWS ChatbotはSlackやAmazon ChimeとAWSサービスを連携することができるサービスです。
AWS Chatbotを使うことで
- CloudWatchやBudgets等からのアラートの受信
- AWS Lambda関数の呼び出し
- AWS サポートケースの作成
- 診断情報の取得
などの作業をSlackチャンネルやAmazon Chimeチャットルームですることができます。
以下ではSlackでAWS Lambda関数を呼び出す方法についてご紹介します。
SlackでLambda関数を実行してみよう
EC2インスタンスを起動・停止するLambda関数をSlackで実行してみます。
AWS ChatbotにSlackチャンネルを設定する
まず、AWS ChatbotにSlackのチャンネルを設定する必要があります。
AWS ChatbotのコンソールでSlackのワークスペースを登録して、「新しいチャンネルを設定」をクリックします。
設定名と設定するSlackチャンネルのIDを入力します。
そして、IAMロールを作成します。ポリシーテンプレートは現時点(2021/06)では以下があります。
- 通知のアクセス許可
- 読み取り専用コマンドのアクセス許可
- Lambda呼び出しコマンドのアクセス許可
- AWSサポートコマンドのアクセス許可
- Incident Managerのアクセス権限
ここで読み取り専用コマンドのアクセス許可
とLambda呼び出しコマンドのアクセス許可
を選択します。
そして、「設定」ボタンをクリックします。
ここまですると、設定したSlackのチャンネルでAWS Chatbotを使うことができます。
設定したSlackのチャンネルで/invite @aws
と入力してAWS Chatbotを招待します。
AWS Chatbotへの命令は全て@aws
で始めます。@aws help
コマンドでChatbotで可能な機能を確認してください!
Lambda関数作成
今、実行中のEC2インスタンスが一つあります。
じゃ、このインスタンスを起動・停止するLambda関数を作成しましょう。
Lambdaコンソールに移動して、start-ec2-instanceとstop-ec2-insatnce二つの関数を作成します。 関数のランタイムは「Python3.6」で設定します。
そして、IAMコンソールに移動して、二つのLambda関数のIAMロールにAmazonEC2FullAccess
ポリシーを追加します。
では、各Lambda関数にコードを入力しましょう。
start-ec2-instance
import boto3 region = 'your-region' instances = ['ec2 instance id'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.start_instances(InstanceIds=instances) # start instance print('started your instances: ' + str(instances))
stop-ec2-instance
import boto3 region = 'your-region' instances = ['ec2 instance id'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.stop_instances(InstanceIds=instances) # stop instance print('stopped your instances: ' + str(instances))
boto3はPythonでAmazon S3, Amazon EC2, Amazon DynamoDBなどのAWSサービスを使うことができるライブラリです。
region
とinstances
変数には自分のEC2インスタンスがあるリージョンとインスタンスIDを入力してください。
入力が終わったら、「Test」ボタンをクリックしてEC2インスタンスの起動・停止がちゃんとできるかを確認します。そして、「Deploy」ボタンをクリックします。
では、全ての準備は完了です。SlackでこのLambda関数を実行してみましょう。
SlackでLambda関数を実行する
先ほど実行中のEC2インスタンスを停止してみます。
まず、Chatbotに設定したSlackチャンネルに@aws lambda --help
コマンドを入力して、可能なコマンドを確認します。その中で、invoke
コマンドを使ってLambda関数を実行することができます。
@aws lambda invoke stop-ec2-instance --region your-region
このようにコマンドを入力して、送信してみましょう。最初にリージョンをコマンドに入力すると、Chatbotはそれを記憶し、次の命令からはリージョンを書く必要がありません。
送信すると、Chatbotから「Would you like me to do so?」という確認メッセージがきます。「Yes」をクリックします。
このように、「StatusCode: 200」という内容のメッセージがきたら、Lambda関数の実行は成功です。
では、実際にEC2インスタンスの状態を確認してみましょう。
EC2コンソールでインスタンスが「停止済み」状態になっていることを確認することができます。
Slackで
@aws describe-instance-status --instance-ids your-instance-id
コマンドを使ってインスタンスの状態を確認することもできます。
同じ方法でstart-ec2-instance関数を実行してインスタンスを起動してみてください!!
感想
AWS Chatbotを利用して、SlackでLambda関数を実行してみました。
簡単に設定することができ、チャットの形式でAWSサービスが使えるので、とても便利なサービスだと思います。料金も無料なので、気軽に試してみたらどうでしょうか。
しかし、まだAWS ChatbotとSlackを連携してできるコマンドはほとんど「読み取り」の機能で、新しいリソースを作成したり、削除したりする機能はできませんので、ご参考ください!
以上です!