概要
- lambdaからSlackアプリのWebhook URLにリクエストを投げて紐付いているSlackアプリに発言してもらう方法を簡単にまとめる。
前提
- 下記の内容、もしくはそれに準ずる方法が実施され、Slackに独自のアプリ作成とWebhook URLが分かっていること。
- lambda関数を作成するAWSユーザーはIAMロールを作成する権限を保有していること。
- ローカルPCでNode.js 18.xがインストールされ、npmコマンドが実行できる状態になっていること。
注意
- AWSを使うため料金が発生する可能性があります。高額請求にはくれぐれもご注意ください。
方法
-
ローカルPCの任意のディレクトリに「nodejs」ディレクトリを作成する。
-
nodejsディレクトリで下記コマンドを実行しNode.jsのバージョンが18.xになっていることを確認する。
node -v
-
nodejsディレクトリに移動し、下記コマンドを実行する。(package nameなどを聞かれるがEnter連打でOK)
npm init
-
nodejsディレクトリで下記コマンドを実行してnpmでaxiosをインストールする。
npm install axios
-
nodejsディレクトリの一つ上のディレクトリに移動し、下記コマンドを実行しnodejsディレクトリをzip化する。
cd ../ zip -r ./nodejs.zip ./nodejs
-
AWSのコンソールにログインする。
-
lambdaのホームに遷移する。
-
左サイドバーの「その他のリソース」の中の「レイヤー」をクリックする。
-
「レイヤーの作成」をクリックする。
-
下記の様に設定を行う。(特段記載されていないものはデフォルト状態)
項目 内容 備考 名前 send_message_layer アップロード種別 .zipファイルをアップロード アップロード 先に作成したnodejs.zipを選択してアップロード ファイル名が「nodejs.zip」でないと正しく動作しなかった記憶がある。 互換性のあるアーキテクチャ x86_64 互換性のあるランタイム Node.js 18.x -
上記の様に設定ができたら「作成」をクリックする。
-
「関数の作成」をクリックする。
-
下記の様に設定を行う。(特段記載されていないものはデフォルト状態)
項目 内容 備考 関数種別 一から作成 関数名 send_message 任意でOK ランタイム Node.js 18.x アーキテクチャ x86_64 実行ロール 基本的なLambdaアクセス権限で新しいロールを作成 -
上記の様に設定ができたら「関数の作成」をクリックする。
-
当該関数の「コード」のタブの最下部の「レイヤー」のフィールドで「レイヤーの追加」をクリックする。
-
「カスタムレイヤー」を選択し、プルダウンから「send_message_layer」を選択、「バージョン」は1を選択、し「追加」をクリックする。
-
下記のコードをそのまま貼り付け、保存(cmd + s) → Deployをクリックする。(SlackのWebhook URLだけご自身のものに変更いただきたい。)
import axios from 'axios'; export const handler = async(event) => { const slackUrl = 'Slack Webhook URL'; const data = { text: 'Hello, World for lambda!' }; const config = { headers: { 'Content-Type': 'application/json' } }; const response = await axios.post(slackUrl, data, config) .then((response) => { console.log(response.data); }) .catch((error) => { console.error(error); }); return response; };
-
テストのタブをクリックし、下記の様に設定を行う(特段記載されていないものはデフォルト状態)
項目 内容 備考 イベント名 hello-world-test イベント共有の設定 プライベート テンプレート hello-world -
上記の様に設定ができたら「保存」をクリックする。
-
保存できたら「テスト」をクリックする。
-
Slackに「Hello, World for lambda!」の文字が出力されたら完了である。
-
あとはよしなに当該lambda関数のトリガーを設定知れあげれば良い。
参考文献