SORACOM Users

SORACOM Funk を利用して AWS Lambda を呼び出し Slack へ通知する

当ガイドでは、SORACOM Funk(以降、Funk)を利用して、AWS Lambda を呼び出し、Slackへ通知します。

はじめに

Funk は、クラウドサービスの Function を直接実行できるサービスです。クラウドリソースを活用することでデバイス側の実装をシンプルに保ちリソースのオフロード、低電力消費化が可能となります。

Funk概要

当ガイドは以下の2つのステップです。

当ガイドの前提は以下のとおりです。

各種デバイスでの IoT SIM の使用は各種デバイスで SORACOM Air を使用するを参考にしてください。

ステップ 1: Slack を設定する

通知を受けるための Slack を設定します。
Slack のアカウントを作成したのちアプリケーションの追加を行います。

Slack設定

Incoming Webhook の設定を行います。 のちに AWS Lambda に設定するので Webhook URL をメモしておきます。

Slack設定

以上で Slack の設定は完了です。

ステップ 2: AWS Lambda を設定する

次に Funk から呼び出す AWS Lambda を設定します。
AWS Lambda 作成画面から

以下の js のサンプルプログラムを参考に Slack へ POST する AWS Lambda を作成します。
環境変数として SLACK_URL を先ほど設定した https://hooks.slack.com/services/~~ 等の Webhook URL として保存しています。

const https = require('https');
const url = require('url');
const slackUrl = process.env.SLACK_URL

exports.handler = 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();
};

また、 Funk から AWS Lambda を呼び出す為に、設定した AWS Lambda の ARN をメモします。
lambda設定

Lambda 実行用の AWS IAM ユーザーを作成します。
以下の JSON を参考に AWS IAM ユーザーを作成してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAuroraToExampleFunction",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "先ほどコピーしたARN"
        }
    ]
}

作成したユーザーの アクセスキーID および シークレットアクセスキー をコピーします。

ステップ 3: Funk の利用を開始する

SORACOM コンソールで AWS IAM ユーザーの認証情報を登録します。
SORACOM ユーザーコンソールの右上のユーザー名をクリックし、"セキュリティ“ を選択します。

funk設定

"認証情報ストア” => “認証情報を登録” を選択します。 “認証情報 ID” は任意に記載し、種別として AWS 認証情報を選択します。
先ほどコピーした AWS ユーザーのアクセスキー ID およびシークレットアクセスキーを入力し、登録を行います。

funk設定

利用する SIM を紐付けた SIM グループの設定から Funk の設定を行います。
サービスとして AWS Lambda を選択し、認証情報と ARN を入力し保存します。

funk設定

ステップ 4: Slack へ通知を行う

SORACOM Funk 経由で Slack へ通知を行います。
今回は SIM を利用しているデバイスから unified endpoint を利用します。

$ curl -v -X POST -H 'content-type:application/json' -d '{"hello": "funk"}' http://uni.soracom.io

以上で SORACOM Funk を利用して AWS Lambda を呼び出し Slack へ通知することができました。

トラブルシューティング

本手順で Teams へ通知できなかった場合、以下の点を確認してください。

SORACOM Harvest Data へデータが格納されるか

本手順では Unified Endpoint を利用しているため、SORACOM Harvest Data を有効にすることで SORACOM Harvest Data と SORACOM Funk 両方へ連携されます。SORACOM Harvest Data へ格納されていない場合、デバイスが SORACOM に接続されていなかったり、グループへ所属できていない可能性があります。

AWS Lambda へデータが連携されているか

AWS Lambda のログより、SORACOM Funk からのデータが連携されているか確認します。もし SORACOM Harvest Data へデータが格納されているのに AWS Lambda にログが記録されていない場合、SORACOM Funk に設定した ARN や認証情報が誤っていないか確認してください。

Slack へ通知されているか

データを送信した際に AWS Lambda にログが記録されているにもかかわらず Slack へ通知されていない場合、AWS Lambda の設定 (コード・環境変数) を確認してください。

Getting Started

SORACOM Air for セルラー

SORACOM Air for LoRaWAN

SORACOM Air for Sigfox

SORACOM Beam

SORACOM Canal/Direct/Door

SORACOM Endorse

SORACOM Funnel

SORACOM Funk

SORACOM Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

SORACOM Krypton

SORACOM Lagoon

SORACOM Mosaic

SORACOM Napter

SORACOM Orbit

SORACOM Peek

SORACOM LTE-M Button

GPS マルチユニット SORACOM Edition

IoT 体験キット

Device

サービス機能詳細

Developer Tools

Design Patterns

pagetop