【小ネタ】SlackのスラッシュコマンドからLambdaを実行させる方法

2021.01.27

どーもsutoです。

SlackのスラッシュコマンドからLambdaをスパッと実行させるためのAPI GatewayとSlack APIを設定する手順を備忘録として記事に残しておこうと思います。

Lambda作成について

本記事では検証用として使用するLambdaは、以前の記事で作成したものを流用させていただきます。 Lambdaの作成とコードは以下から。

API Gatewayの作成

APIの画面から「REST API」を選択します。

「新しいAPIの作成」を選択し、任意のAPI名を入力しAPIを作成します。

次に「アクション」から「メソッドの作成」→「POST」を選択します。

統合タイプに「Lambda関数」を選択、実行対象のLambda関数名を入力し保存します。

次に、「統合リクエスト」から「マッピングテンプレート」を設定します。Slack apiから送られてくるリクエストのContent-Typeは application/x-www-form-urlencoded なので、「マッピングテンプレートの追加」から「application/x-www-form-urlencoded」を設定し、 「テンプレートの生成」から「メソッドリクエストのパススルー」を選択すると下記のように記述されます。 これをそのまま保存します。

完了したら「アクション」→「APIのデプロイ」を選択、「デプロイされるステージ」に「新しいステージ」を選択し、ステージ名に任意の名前を入力し、「デプロイ」します。すると、下記のようなエンドポイントURLが表示されます。(URLは後述のSlack API作成時に使用します。)

Slack APIの作成

Slack apiにアクセスし、左メニュー「Start Building」をクリック。 「App Name」には任意の名前、 「Development Slack Workspace」に「自身のワークスペース」を選択してください。

次に、左メニュー「Slash Commands」から、「Create New Command」をクリックし、下記のように必要な情報を入力して「Save」します。

  • Command:任意の文字列を入力します
  • Request URL:API Gatewayで作成したエンドポイントURLを入力します

Slash Command作成ができたら左メニュー「Install App」から自身のワークスペースにインストールして下さい。

動作検証

実際にSlackからコマンド(今回は /ec2refresh )を入力してみます。

Lambdaは正常に実行されたようですので、AWSコンソース画面からAutoscalingのインスタンス更新が動作しているか見てみましょう。

インスタンス更新が動作しており、開始時刻がSlackのレスポンスの時刻と一致していますね!

まとめ

以上、SlackのスラッシュコマンドからLambdaを実行させるためのAPI GatewayとSlack appの設定でした。私自身はAWSの運用業務やSlack appの開発を主としていないので、一度学習したことを忘れないように本記事に残しておこうと思います。

今回はシンプルなLambda実行の検証なのでAPI Gatewayより複雑なLambda × Slackのワークフローを作るにはAWS Chatbotから実行させる方法はモダンなのかもしれませんね。