MENU

Soracom

Users

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

※ TIPS: ランダムな文字列は 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 の設定を行う

SORACOM IoT SIM グループの管理画面から “SORACOM Air for Cellular 設定” で [バイナリパーサー設定] を “ON” にした後、以下のように入力してから [保存] をクリックします。

  • フォーマット: @button

Beam - Amazon API Gateway, AWS Lambda / air 1

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

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

Beam - Google Cloud Functions / beam 1

最後に、“SIM 管理” から、LTE-M Buttom を、上記で設定した 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-AuthYourSecretKey としてヘッダを追加します。

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 で受け取った場合はその値を読み出すことができないという課題が発生するため、実装時の注意が必要となります。