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://funk.soracom.io

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

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 Napter

Gadgets

Device

サービス機能詳細

Developer Tools

pagetop