Soracom

Users

スタートガイド
Home スタートガイド IoT デザインパターン SORACOM LTE-M Button と各種クラウドサービスを連携する 実装ガイド

IBM Cloud と組み合わせる

SORACOM Beam + IBM Cloud Functions パターン

IBM Cloud でボタンアプリケーションを構築したい場合は、SORACOM Beam から IBM Cloud Functions の Webhook を呼び出す方法があります。

button_design_patterns / Button - Beam - IBM Cloud Functions

ここでは IBM Cloud Functions で Webhook (HTTP トリガー) を作成し、SORACOM Beam から呼び出せるように構成する手順を解説します。

ステップ 1: 関数を作成する

IBM Cloud ダッシュボードのナビゲーションメニューから "Functions" を探してクリック、その後に [作成の開始] > [アクションの作成] をクリックします。"リソースの作成" からフィルタに "functions" と検索すると見つけやすくなります。その際 "label:ライト" が付与されていると見つけられないので注意ください。

表示されたダイアログで以下の通り入力したのち、[作成] をクリックします。

  • アクション名: button-app1-Ueth8sol (ランダムな文字列を付与することを推奨します)
  • パッケージを囲む: (デフォルト・パッケージ)
  • ランタイム: Node.js 10

ランダムな文字列は pwgen in JavaScript といったツールを活用すると便利です。

Beam - IBM Cloud Functions / functions 1

[コード] を以下のように書き換えてから [保存] をクリックします。

/**
 *
 * main() このアクションを呼び出すときに実行されます。
 *
 * @param Cloud Functions アクションは 1 つのパラメーターを受け入れます。このパラメーターは JSON オブジェクトでなければなりません。
 *
 * @return このアクションの出力。この出力は、JSON オブジェクトでなければなりません。
 *
 */
function main(params) {
  console.log(params.__ow_headers);
  console.log(params);
  return { statusCode: 204 };
}

Beam - IBM Cloud Functions / functions 2

アクション (関数) の管理画面から [エンドポイント] をクリックし、"Web アクションを有効化" にチェック付けた後 [保存] をクリックします。 この時 "Web アクション" に表示されている URL をメモしておいてください。(REST API 側の URL では無いので注意ください)

Beam - IBM Cloud Functions / functions 3

ステップ 2: SORACOM グループを設定する

バイナリパーサー、Beam の設定はグループに対して行います

ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。

  1. SIM グループのバイナリパーサーを設定します。

    バイナリパーサーの設定について詳しくは、バイナリパーサーを設定する を参照してください。

    なお、[フォーマット] には、@button を入力します。

    Beam - Amazon API Gateway, AWS Lambda / air 1

    続けて、同じ SIM グループの SORACOM Beam を設定します。

  2. 同じ SIM グループの管理画面から "SORACOM Beam 設定" で [UDP → HTTP/HTTPS エントリポイント] をクリックした後に表示されるダイアログで以下のように入力してから [保存] をクリックします。

    • プロトコル: HTTPS
    • ホスト名: <IBM Cloud Functions でメモした URL のホスト部>
    • ポート番号: <空>
    • パス: <IBM Cloud Functions でメモした URL のパス部>

    Beam - Google Cloud Functions / beam 1

  3. LTE-M Button の IoT SIM が所属するグループを切り替えます。

ステップ 3: 確認する

確認は IBM Cloud Functions で行います。Functions のダッシュボードから [モニター] をクリックします。 "アクティビティー・ログ" に表示された結果をクリックします。リロードマークをクリックして適宜最新の情報に更新してください。

Beam - IBM Cloud Functions / testflight 1

JSON がそのまま表示されてしまうため、JSON Pretty Linter Ver3Chrome 機能拡張 / JSONView で見やすく整形してください。

以下の画面は、JSONView で表示した様子です。

Beam - IBM Cloud Functions / testflight 2

この後の開発に向けた情報源

トラブルシュート

  • LTE-M Button の LED が最終的に赤色点灯になる
    • A: LTE-M Button が SIM グループに所属していることを確認してください。
    • B: SIM グループ内の Azure Functions に対する URL 設定を確認してください。
    • C: Google Cloud Functions 以降の設定を見直すようにしてください。
  • { "payload":"TQEDUQ==" } のように読めない文字列になっている
    • SORACOM Air for Cellular 設定のバイナリパーサーで @button を設定するようにしてください。

IBM Cloud Functions のエンドポイントセキュリティ

IBM Cloud Functions の "Web アクション" は、標準では URL を知っていればどこからでもコール可能となっています。 IBM Cloud Functions CLI ユーティリティ (ibmcloud コマンドラインツール) を用いることで Web アクションの保護 (HTTP ヘッダーによる認証の設定) ができます。

セットアップ方法

IBM Cloud Functions CLI のセットアップや動作環境は ドキュメントを参照 してください。

セットアップにおける TIPS として、デフォルトのロケーションについては関数 (アクション) を作成するロケーションと一致させておくことをおすすめします。IBM Cloud のロケーション名と ID の関係は IBM Cloud の新しいロケーション名表示 をご覧ください。

IBM Cloud Functions CLI のセットアップが完了した後、コマンドラインで以下のように設定すると HTTP ヘッダーに X-Require-Whisk-Auth: YourSecretKey を必要とする設定にできます。

$ ibmcloud fn action list
actions
/<ORG>_<SPACE>/<ACTION_NAME>                                    private nodejs:10
$ ibmcloud fn action update /<ORG>_<SPACE>/<ACTION_NAME> --web-secure YourSecretKey

SORACOM Beam の設定では [ヘッダ操作][カスタムヘッダ][ヘッダ名]X-Require-Whisk-Auth[値]YourSecretKey を入力してヘッダーを追加します。

REST API について

IBM Cloud Functions の Action (関数) は、Web アクションの URL とば別に、デフォルトで REST API を持ちます。SORACOM Beam から REST API の URL に送信することも可能ですが、この場合における関数の params に引き渡される値に HTTP ヘッダーは含まれません。(params.__ow_headers で参照できる HTTP ヘッダー配列)

本格的にボタンを活用しようとした場合、「どのボタンから送信されたのか」を識別する必要がでてくるケースがありますが、その際は SORACOM Beam 上で X-SORACOM-IMSI といったデバイスを識別する情報を HTTP ヘッダーに付与するのが容易ですが、REST API で受け取った場合はその値を読み出すことができないという課題が発生するため、実装時の注意が必要となります。