Funk を利用して、AWS Lambda の関数を実行し、Slack へ通知できます。
操作を始める前に準備が必要です (クリックして確認してください)
(1) SORACOM のアカウントを作成して IoT SIM を申し込む / デバイスを購入する
デバイスと、そのデバイスで利用できる IoT SIM を用意します。
SORACOM アカウントの作成方法、IoT SIM の申し込み方法、およびデバイスの購入方法について詳しくは、SORACOM の利用を始める を参照してください。
(2) AWS のアカウントを用意する
AWS のアカウントを用意してください。
(3) Slack のアカウントを用意する
Slack のアカウントを用意してください。
準備完了ステップ 1: Slack を設定する
「Incoming Webhook」を Slack に追加して、Webhook URL をコピーします。
Slack app directory にアクセスし、検索ボックスに「Incoming Webhook」と入力して、 をクリックします。
をクリックします
Incoming Webhook がメッセージを投稿するチャンネルを選択して、
をクリックします。に表示されている URL をコピーします。
この URL は、これ以降、${webhook_url} と表記します。例:
https://hooks.slack.com/services/..........
以上で Slack の設定は完了です。
ステップ 2: AWS Lambda を設定する
Funk から呼び出す AWS Lambda の関数を作成します。
AWS Lambda の 「関数の作成」画面 にアクセスします。
をクリックし、以下の項目を設定します。
項目 説明 関数名を入力します。例: funk-sample-button
「Node.js 18.x」を選択します。 「x86_64」を選択します。 Funk は Lambda ランタイムには依存しません。任意の Lambda ランタイムの Function を利用できます。ここでは、手順 4 で入力するサンプルプログラムにあわせて「Node.js xx.x」を選択します。
をクリックします。
で「index.mjs」をダブルクリックして、以下のサンプルプログラムを入力します。
import https from "https"; import url from "node:url"; const slackUrl = process.env.SLACK_URL; export const handler = async function (e, ctx, cb) { console.log("event: %j", e); console.log("context: %j", ctx); var slackReqOptions = url.parse(slackUrl); slackReqOptions.method = "POST"; slackReqOptions.headers = { "Content-Type": "application/json" }; var payload = { text: "--- *lambda function called with following parameters.* ---", attachments: [ { title: "clientContext", color: "#34cdd7", text: "```\n" + JSON.stringify(ctx.clientContext, null, " ") + "```\n", mrkdwn_in: ["text"], }, { title: "event", color: "#e47911", text: "```\n" + JSON.stringify(e, null, " ") + "```\n", mrkdwn_in: ["text"], }, ], }; var body = JSON.stringify(payload); slackReqOptions.headers = { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(body), }; var req = https.request(slackReqOptions, function (res) { if (res.statusCode === 200) { console.log("Posted to slack"); cb(null, { result: "ok" }); } else { cb(false, { result: "ng", reason: "Failed to post slack " + res.statusCode }); } return res; }); req.write(body); req.end(); };
をクリックします。
→ → の順にクリックします。
をクリックして、以下の項目を設定します。
項目 説明 SLACK_URL
を入力します。${webhook_url} を入力します。例: https://hooks.slack.com/services/..........
をクリックします。
この関数の ARN をコピーします。
この ARN は、これ以降、${lambda_func_arn} と表記します。例:
arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:funk-sample-button
ステップ 3: IAM ロールを作成する
Funk が動作する SORACOM の AWS アカウントに対して、ステップ 2: AWS Lambda を設定する で作成した関数の実行を許可するための、AWS IAM ロールを作成します。
IAM コンソール にアクセスし、 → の順にクリックして、 をクリックします。
→ の順にクリックし、 に SORACOM の AWS アカウント ID を入力します。
Funk が動作する SORACOM の AWS アカウントの ID は、カバレッジタイプによって異なります。
- 日本カバレッジ:
762707677580
- グローバルカバレッジ:
950858143650
- 日本カバレッジ:
にチェックを入れ、 に任意の文字列を入力します。
に入力した文字列は、これ以降、${external_id} と表記します。例:External-ID-Mej73gfhrFhimGKb
外部 ID の詳細は、AWS の AWS リソースへのアクセス権を第三者に付与するときに外部 ID を使用する方法 - AWS Identity and Access Management を参照してください。
をクリックします。
「許可を追加」画面が表示されます。
をクリックします。
別のウィンドウまたは別のタブで、「ポリシーの作成」画面が表示されます。
ここからは「ポリシーの作成」画面でポリシーを作成します
「ポリシーの作成」画面の操作が終わったら、
が表示されている「許可を追加」画面に戻ってきて IAM ロールを作成する操作を続けます。画面を閉じないでください。以下の項目を設定します。
項目 説明 をクリックして、 をクリックします。 に「InvokeFunction」と入力し、 にチェックを入れます。 → → の順にクリックします。
「ARN の追加」画面が表示されます。
に、${lambda_func_arn} (例:arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:funk-sample-button
) を入力して、 をクリックします。「ポリシーの作成」画面に戻ります。
→ の順にクリックします。
に AWS IAM ポリシーの名前を入力し、 をクリックします。
AWS IAM ポリシーが作成され、ポリシー画面が表示されます。
ポリシー画面が表示されているウィンドウまたはタブを閉じて、「許可を追加」画面に戻ります。
をクリックし、手順 10 で入力した AWS IAM ポリシーの名前をテキストボックスに入力して、Enter キーを押します。
作成した AWS IAM ポリシーが表示されます。
作成した AWS IAM ポリシーにチェックを入れて、
をクリックします。に IAM ロールの名前を入力して、 をクリックします。
ロール画面に戻ります。
作成した IAM ロールの名前をクリックし、
をメモします。この ARN は、これ以降、${iam_role_arn} と表記します。例:
arn:aws:iam::XXXXXXXXXXXX:role/funk-test-aws-lambda-role
ステップ 4: SORACOM Funk をセットアップする
IoT SIM を利用するデバイスから送信されたデータに応じて、Funk から AWS Lambda の関数を呼び出すための設定を、ユーザーコンソールで行います。
認証情報ストアに AWS IAM ロール認証情報を登録する
Funk から AWS Lambda の関数を呼び出すための認証情報 (IAM ロールに関する認証情報) をユーザーコンソールの認証情報ストアに登録します。認証情報は、${iam_role_arn} および ${external_id} です。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。
認証情報は、以下のように登録します。
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。例: AWS-IAM-role-credentials-invokeFunction | |
「AWS IAM ロール認証情報」を選択します。 | |
${iam_role_arn} を入力します。例: arn:aws:iam::XXXXXXXXXXXX:role/funk-test-aws-lambda-role | |
${external_id} を入力します。例: External-ID-Mej73gfhrFhimGKb |
SORACOM Funk を有効化する
IoT SIM に対して Funk を有効化します。
Funk の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
スイッチをクリックして「ON」にします。
各項目を設定します。
項目 説明 「AWS Lambda」を選択します。 ${lambda_func_arn} を入力します。例: arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:funk-sample-button
認証情報ストアに AWS IAM ロール認証情報を登録する で登録した認証情報を選択します。例: AWS-IAM-role-credentials-invokeFunction
ここでは、「JSON」を選択します。詳しくは、SORACOM Funk を有効化する を参照してください。 をクリックします。
IoT SIM の Funk の設定が完了しました。
multi credentials per group 機能
Beam と同じく、Funk の認証情報にも multi credentials per group 機能を使用できます。
multi credentials per group 機能は、IoT SIM ごとに異なる認証情報を利用する機能です。グループ設定の #{imsi}
または #{imei}
のプレースホルダーを含めておき、認証情報ストア に認証情報を登録するときは、 に、実際の IoT SIM の IMSI やデバイスの IMEI を含めます。このように準備すると、接続する IoT SIM やデバイスに応じて認証情報を使い分けられます。詳しくは、Beam の multi credentials per group 機能を利用して AWS IoT に接続する を参照してください。
ステップ 5: デバイスから Slack へ通知を行う
Funk を利用して AWS Lambda の関数を実行し、Slack へ通知します。
動作確認のために、Funk を有効化した IoT SIM を利用するデバイスで、Unified Endpoint の HTTP エントリポイント にリクエストを送信します。
$ curl -v -X POST http://uni.soracom.io \
-H "content-type:application/json" \
-d '{
"hello": "funk"
}'
Slack に以下のようなメッセージが送信されます。
SORACOM Funk を有効化する の で「JSON」を選択しているため、Unified Endpoint の UDP エントリポイントや TCP エントリポイント に {"hello": "funk"}
を送信しても、Slack に同様のメッセージが送信されます。
トラブルシューティング
Slack へ通知できなかった場合は、以下の点を確認してください。
SORACOM Harvest Data にデータが保存されること
Unified Endpoint に送信しているため、SORACOM Harvest Data を有効化する と、送信したデータが Harvest Data にも保存されます。
Harvest Data を有効化しても、送信したデータが Harvest Data に保存されない場合は、デバイスが SORACOM に接続されていなかったり、グループに所属できていない可能性があります。
AWS Lambda にデータが送信されていること
AWS Lambda のログで、Funk で転送されたデータが AWS Lambda に送信されていることを確認できます。
Harvest Data にデータが保存されているのに、AWS Lambda のログで確認できない場合は、ステップ 4: SORACOM Funk をセットアップする の設定 ( に入力した ARN や で選択した認証情報) が正しいことを確認してください。
認証情報ストアに登録した AWS IAM ロール認証情報 は確認できません。
AWS Lambda でログが確認できたのに、Slack へ通知されない場合は、ステップ 2: AWS Lambda を設定する の設定 (コードソースや環境変数) が正しいことを確認してください。