AWS IoT エンタープライズボタン トリガーを作ってみた(Low - Code)

ついに発売されました AWS IoT エンタープライズボタン

ワンプッシュでお気に入りの商品を簡単に注文できるということで話題になった Amazon Dash を汎用的に使えるようにしたものです。 仕組みとしては、ボタンを押したら Lambda 関数が呼ばれるという非常にシンプルなものですが様々な用途が想定できると思います。

f:id:dsstsukky:20180518090512j:plain:w350

やりたいこと

私がこのボタンを使って実現したいのは「ボタンを押したら、DataSpider のスクリプト(連携処理)が呼び出される」という仕組みです。

DataSpider にはトリガーという「スクリプトを自動起動する」ための機構があり、代表的なものに

  • スケジュールトリガー (定時実行、インターバル実行)
  • HTTP トリガー    (HTTP アクセスがあった際に実行)
  • ScriptRunner     (exe ファイルを叩いて実行)

などがあります。

ただし、これらの機能は「Web 画面を作る必要がある(HTTP トリガー)」「バッチファイルなどで起動する必要がある(Scriptrunner)」などお手軽では無く(とは言っても、それほど手間でもありませんが)、「スクリプトを簡単に実行する仕組みが欲しい」と思うこともあります。

そこで今回 AWS IoT エンタープライズボタン の発売を見てひと目で「おっ、これは DataSpider のスクリプト起動に使えそうだ!」と思い、早速試してみました。

実現イメージ

ボタンが押されたら Lambda 関数が呼ばれ、Lambda から DataSpider の HTTP トリガーを呼び出します。 DataSpider のスクリプトはなんでも良いのですが、動いた結果をわかりやすくするために kintone に現在日時とメッセージを書き込む処理にしました。

f:id:dsstsukky:20180519083823j:plain

手順

大枠の流れは以下の通りです。

  1. AWS IoT エンタープライズ ボタンの購入
  2. kintone アプリの作成
  3. DataSpider スクリプトの作成
  4. AWS Lambda の設定
  5. AWS IoT エンタープライズ ボタンの設定(スマホアプリ)

では順を追って説明します。

AWS IoT エンタープライズ ボタンの購入

こちらから 2,500円で購入できます。Prime 会員であっても届くまで 半日~1 日はかかるので、その間に他の作業をしましょう。

kintone アプリの作成

あまりにシンプルすぎて説明も要らないぐらいですが、kintone アプリは「文字列(1行)」を 1 つ置くだけです。

f:id:dsstsukky:20180519084009j:plain:w500

DataSpider スクリプトの作成

作成する処理は、現在日時 + "特定のメッセージ" を kintone に追加するというシンプルなもので、設定内容は以下の通りです。

f:id:dsstsukky:20180519094017j:plain

f:id:dsstsukky:20180519093913j:plain

また、作った処理は Lambda から HTTP で呼び出すので、HTTP トリガーの設定をしておきます。 ここで表示されている(黒塗りされている)URL を Lambda で呼び出します。

f:id:dsstsukky:20180519094106j:plain

AWS Lambda の設定

ノンコーディング芸人を志す私にとって、一番の壁がここです。 Lambda は Node.js や Phython でコードを書く必要がありますが、私はコードは一切書けません(キリッ)。

ただ、やりたいのは特定の URL (HTTPトリガー)を呼び出すだけの簡単な処理なので、Qiita を漁ったらサクッと見つかりました。 ↓ありがとうございます。 qiita.com

こちらを参考に以下のようにしました。 コードの意味はサッパリわかりませんが、HTTP を Get している雰囲気が感じられますし、動いたので問題ないのでしょう。

exports.handler = function(event, context) {
    console.log('value1 = ' + event.key1);
    http.get("https://xxx.xxx.xxx/", function(res) {
        console.log("Got response: " + res.statusCode);
        res.on("data", function(chunk) {
            context.done(null, chunk);
        });
    }).on('error', function(e) {
        context.done('error', e);
    });
};

ということで、コピペとは言えほんの少しだけコードを書いてしまったので、今回はローコード(Low - Code) での実現となります。

AWS IoT エンタープライズ ボタンの設定(スマホアプリ)

そうこうしているうちに、AWS IoT エンタープライズボタンが家に届きました。App Store で「AWS IOT」と検索すると専用アプリが見つかりますので、そちらをダウンロードして設定をしていきます。

f:id:dsstsukky:20180519095248j:plain

設定自体は簡単で、端末のバーコードを読み取って Wi-Fi の設定を行うと端末(ボタン)とアプリの紐付けができます。

f:id:dsstsukky:20180519092545p:plain

あとは、アプリ上で端末にプロジェクトというものを割り当てて行くとあっという間にボタンを押すと指定した Lambda 関数を呼べるようになります。1 プロジェクト = 1 Lambda 関数 になっているので、使い方としては複数のプロジェクトを作成しておいて、適宜プロジェクトを切り替えてボタンを押す、という理解をしました(違ったらごめんなさい)。

アプリの設定は数分で終わりました。最後にデバイスを「有効」にするのをお忘れなく。

f:id:dsstsukky:20180519093038p:plain

では、実際に動かしてみましょう。(ポチッ)

f:id:dsstsukky:20180519094324j:plain

このように kintone にしっかりレコードが保存されましたね。

また、今回は Lambda 関数を呼ぶ設定にしましたが、設定で「Send EMail」と「Send SMS」も用意されているので、メールや SMS を送るだけなら Lambda を使用しなくても良いのでより簡単です。

最後に

この内容を情シスの人に話したら「ぜひ使ってみたい!」ということだったので、うちの社内の実業務で使われる日も遠くないかもしれません。 また、AWS IoT エンタープライズボタン は 複数タップや長押しで処理を変えることができないため、アプリでプロジェクトを変更しない限り、1 つの処理しかできません。

この解決策を考えてみたのでまた次回(やろうと思ってることが実現できたら)。

追記(2018/5/20)

詳しい方がコメントくださり、Lambda 側の記載を変えることで複数タップや長押しを検出して処理を変えることができるそうです。誤った情報失礼しました。