lambdaのテンプレートを使ってslackからlambdaを実行する

概要

lambdaのテンプレート「slack-echo-command」とslackのアプリ「Slash Commands」を使ってslackから任意のコマンドでlambdaを実行する
古い記事を参考にしていたら入力項目や工程が結構違っていたので自分用のメモとして

手順

AWSコンソールで鍵の作成(トークンの暗号化に用いる)

  • 「カスタマー管理型のキー」をクリックして「キーの作成」ボタンをクリックする
  • エイリアス」項目を入力して作成(途中、必要に応じて管理ロール等を設定する)
  • 作成が完了したら最初の一覧画面から「キーID」をメモしておく

AWSコンソールでlambdaの作成

  • 「関数」をクリックして「関数の作成」ボタンをクリックする
  • 「Serverless Application Repository の参照」を選択して「slack-echo-command」を検索し、「slack-echo-command」をクリックする
  • 「アプリケーションの設定」項目で「KeyIdParameter」にメモした「キーID」を入れて「デプロイ」ボタンをクリックする
  • CloudFormationでスタックが作成され各種リソースが自動的に作成されるので少々待つ(2~3分くらい)

SlackでSlash Commandsアプリの追加

  • Slackの設定ボタン(歯車のアイコン)をクリックして「アプリを追加」をクリックする
  • 検索で「Slash Commands」を入力して「インストール」ボタンをクリックする
  • 「コマンド」項目を任意の文字列で埋めておく(スラッシュで始まる必要がある)
    • この例では「/sayhello」とした
  • トークン」項目の文字列をメモしておく
  • 「URL」項目は未だ埋められないので「インテグレーションの保存」ボタンをクリックしてもエラーになるがそのまま放置して後行程へ

AWSコンソールでlambdaの設定

  • 「関数」をクリックして一覧から作成済みの関数をクリックする
  • 「Designer」項目でlambdaが選択されている状態にする(※デフォルトで選択されているはず)
  • 環境変数」項目の「暗号化の設定」項目を開き、「伝送中の暗号化のためのヘルパーの有効化」にチェックを入れ、「伝送中に暗号化する AWS KMS キー」に作成済みのキーを入れる
  • 環境変数」項目のテキストボックスでキーとして「kmsEncryptedToken」が既に入っている行の「値」の方に「Slash Commands」に表示されている「トークン」の値を入れ「暗号化」ボタンをクリックする
    • ちなみにこの行程はAWS CLIのKMSコマンドでencryptしたものを平文で設定する形でもOK(aws kms encrypt --key-id 暗号化に使う鍵のID --plaintext 暗号化したい文字列)
  • 画面最上部の右にある「保存」ボタンをクリックし、API Gatewayからデプロイを実行する
  • デプロイ時に生成されたURLをメモしておく

SlackでSlash Commandsアプリの設定を完成させる

  • メモしたデプロイ先のURLに「/MyResource」を付けたものを「Slash Commands」設定の「URL」項目に入力して「インテグレーションの保存」ボタンをクリックする
  • ※デプロイ先はルートを表している場合が多いので必ず「/MyResource」で終わっているか確認すること

Slackで試してみる

  • 任意のチャネルで「/sayhello aiueo」を送信すると「miya15 invoked /sayhello in directmessage with the following text: aiueo」が返ってくる

連携パラメータについて

プログラムを見ると下記のパラメータを使えるようなので、組み合わせて色々な処理を実行させられそう

  • params.user_name (ex. miya15)
  • params.command (ex. /sayhello)
  • params.channel_name (ex. directmessage)
  • params.text (ex. aiueo)