SlackとLambdaを連携させる 今回はSlackとAWS Lambdaを連携させてChatOps的なことをやってみたいとおもいます。
Slash Commandsの設定
Slackのメニューから[Customize Slack]を選択します。
メニューからConfigure Appsを選択します
上部の検索窓にSlash Commandsと入力し、表示されたSlashCommandsを選択します。
Add Configurationを選択します。
Choose a Commandの欄に適当に今回コマンドの名前をつけてあげます。
今回は/lambda_test
としました。
名前を入力したらAdd Slash Command Integrationを選択します。
設定画面が出ますのでOutgoing Dataのtokenの値をコピーしておきます。
AWSの準備
さきほどのTokenを暗号化していきます。 まず、暗号化キーを選択し、キーの作成ボタンをクリックします。
名前と説明を入力します。(てきとうでいいです)
タグの追加はそのままスキップでいいです
キー管理アクセス許可の定義もスキップでいいです。
これもスキップ
完了をクリックします
マスターキーが正常に作成されました。
なんらかの環境でAWSCLIを利用してTokenを先程作成したマスターキーで暗号化します。
ubuntu@ip-192-140-1-19:~/.aws$ aws kms encrypt --key-id alias/lambda_test --plaintext "n11xiIkoPur44DQNVrzJfgXX" { "CiphertextBlob": "AQICAHijAUzXJ9CcGdSW+j148CnwHrnBsiSVYcg8WdgDaweRSgEG7wP/SLIXTrbi/G+lZDUXAAAAdjB0BgkqhkiG9w0BBwagZzBlAgEAMGAGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMqznaOVc4s2O1rm4JAgEQgDNVdtK1IBZeDQW3Dm/p/AwBpixyQTh6ojtFO4AXx0/C2ZXXXXXXXXXXXXXXXXXXXXXXXXXX", "KeyId": "arn:aws:kms:ap-northeast-1:XXXXXXXXXXXXX:key/09f77c08-ef8e-4713-a59b-2a74ad83c061" }
Lambdaの作成
マネジメントコンソールでLambdaを開いて関数の作成を選択します。
設計図の箇所でslackで検索します。 検索でヒットしたslack-echo-command-pythonを選択します。
トリガーの設定になりますのでそのまま次へを選択します
基本的な情報欄の名前に適当にこのLambdaの名前をつけてあげます。(今回はlambda_test_slackにしてみました)
環境変数の箇所にAWSCLIで暗号化したTokenを入力します
Lambdaが実行可能なロールを付与して、「次へ」を選択します。
内容の確認が出ますのでそのまま「関数の作成」を選択します。
API Gatewayの設定
任意のAPIにリソースを作成します。
作成したリソースに名前をつけます。
今回はlambda_testとしてみました。
名前を入力したらリソースの作成ボタンをおします。
先ほど作成したリソースにメソッドを作成します。
POSTを選択して、チェックマークをクリックします。
Lambda関数、リージョンは東京リージョンであれば「ap-northeast-1」を選択、Lambda関数の部分にはさきほど作成したLambdaの名前を入力します。
権限をする旨のメッセージが出ますのでOKを選択します。
メソッドの設定を行います。 統合リクエストを選択します。
マッピングを行います。 本文マッピングテンプレートをクリックして設定を開き、テンプレートが定義されていない場合を選択し、マッピングテンプレートの追加をクリックします。
application/x-www-form-urlencodedと入力してチェックマークをクリックします。
すると下にテンプレートを作成する欄がでてきますので以下のように入力して保存します。
{ "body": $util.urlDecode($input.json("$")) }
作成したAPIをデプロイします。
デプロイするステージは任意のものでかまいません
lambda_testがデプロイされました。
POSTをクリックします。
slackの設定でこのURLをつかいますので覚えておきます。
slackの設定
slashcommandsの設定にもどり、URLの欄に先ほど確認したURLをコピーします。 これですべての設定は完了です!
まとめ
サーバレスでslackのBOTをつくることができました。 これをもとにしていろいろなBOTをつくっていきましょう。