この記事は AWS初心者 Advent Calendar 2018 17日目の記事です。
概要
lambda + APIGatewayでslack botを作る際にAWSコンソールから設定してくいのがめんどくさかったのでCloudFormationのテンプレートで実現してみました。
channelで"ping"と打つと"pong"と反応する簡単なbotの例でご紹介します。
テンプレート
スタックを作る際に参照するので、適当な名前でローカルに保存しておいてください。
https://gist.github.com/tenmihi/6132f8140c6d3ef279bddaba175b5c47
botを動かすまでの手順
Slack Apiを設定する 1
https://api.slack.com/apps のCreate New AppからSlack Appを作ります。Basic Information > Add features and functionalityアコーディオンのPermissionを選びます。
Scopesから"chat:write:bot"のpermission scopeを割り当ててSaveします。
割り当てた終わったら、同じくPermissionsの設定ページのOAuth Tokens & Redirect URLs からinstall app to workspaceでAppをインストールします。
インストール後にOAuth tokenが取得されていればOKです。
CloudFormationでスタックを作成する
AWSコンソールからCloud Formationを選んでスタックの作成を行います。
ローカルファイルに保存しておいたものをテンプレートに指定します。
スタック名は適当で、SlackBotUserOAuthAccessTokenには先程取得したOAuth Tokenを入力します。
このあと途中IAMロールの作成で注意が出ますが、チェックボックスを入れてスタックの作成をすれば大丈夫です。
作成を始めたスタックの状況がCREATE_COMPLETEになったら、スタック名をクリックしてスタックの詳細ページに飛びます。
出力アコーディオンからApiEndpointが確認できればスタックの作成はOKです。
Slack Apiを設定する 2
Basic Information > Add features and functionalityアコーディオンのEvent Subscriptionsを選びます。
右上のボタンから機能そのものをEnableしたあとに、Request URLにさきほど確認したApiEndpointの値を入れます。ローディング後に緑のチェックマークが付くはずです。
さらに、Add Workspace Eventからmessage.channelsを追加して、左下のsaveで設定を保存します。
保存するとパーミッションが変わって再インストールが求められる(黄色いnotificationが飛んでくる)ので再インストールを行います。以上でBotの設定はおしまいです。
テストする
適当なチャンネルで ping > pong が帰ってくればOK。
あとは、lambdaのコンソールに行って直接書き換えるなり、短ければtemplateのZipFileの部分を書き換えて自分のbotを作ることができます。
さいごに
AWSでApi GatewayやLambdaなんかを1つ1つ設定すると管理がしにくいんですが、Cloud Formationを使ってスタック管理でできると要らなくなったときに一気に消せたりして便利です。またbotくらい簡単な関数であればtemplateにソース直書きでここまで完結するのは良いですね。
記事の公開遅くなってすいませんでした
明日は flat-8-kiki さんです!