slack スラッシュコマンドでaws cliを実行させる方法

外部からawsのインスタンスの状態確認などを行うのに、インスタンスへ接続してコマンドをたたくのがめんどくさい場合に、簡単かつ安全にaws cliを操作したい場合のために、slackのslash commandを利用できるようにしました。

lambda用資材の準備

pipのインストール

アップロード用モジュールの作成

awsコマンド実行ソース

ソースファイル名:aws

lambda用関数のソース

ソースファイル名:lambda_function.py

slack slash commandで設定された値を設定するため、1回作った後に再度変更する必要があります。

資材をzipに固める

lambdaの設定

先ほど作ったzipファイルをアップロードします。

aws cliの実行に時間がかかるため、タイムアウトを5分に設定します。

lambdaのロールに自分が制御したいサービスの権限を付加します。

この例では、EC2とS3のアクセス権を追加しています。

api gatewayの設定

GETメソッドを追加します

GETメソッドリクエストのURLクエリ文字列パラメータにslackから渡されるパラメータを追加します。

GET統合リクエストを編集します。

マッピングテンプレートにlambda関数へ引き渡すパラメータをセットします。

ステージングを行います。

URLの呼び出しを控えておきます。slackの設定で使用します。

slack slash commandの設定

slackにログインした後、下のURLへアクセスしてください。

https://my.slack.com/services/new/slash-commands

コマンドを入力して、追加してください。

API Gatewayで取得したURLを設定してください。

トークンを、lambda_function.pyに設定して、zipに固めなおし、lambdaへ再アップロードしてください。

使用例

ec2のインスタンスの状態を取得

結果

S3バケットを表示

結果