AWS IoT Buttonで"ゆれ"とツイートする

AWS IoT Buttonというものがあります。

こんなの↓

(出典:https://aws.amazon.com/jp/iotbutton/

簡単に言えばAmazon Dash Buttonの処理をカスタマイズ出来る版ってな感じのシロモノです。
これがあれば、あんなことやそんなことが出来ると夢が拡がる一方ですが、
取り敢えずはAWS IoT初体験として「押したら”ゆれ”とツイートするボタン」を試しに作ってみました。
特に意味はありません。

ちなみに2017年8月時点ではまだ日本での販売はされておらず、
今回入手したものは本家の米Amazonから購入しています。うっかり5個買っちゃった。

概観図

tweet_button1.png

Twitterのアプリ登録

Twitterへ投稿する処理を実装するためには、あらかじめアプリ登録を済ませておく必要があります。
具体的な手順は下記のとおりです(一連の手順やWebページのUIは変更される可能性有)。

  1. ボタンを押したとき呟くことになるアカウントでTwitterへログインする
  2. https://apps.twitter.com へアクセス
  3. 右上の「Create New App」を押す
  4. Name、Description、Websiteを適当に入力する
    • Websiteは必須項目なので何かしらを入力(https://twitter.com など)、Callback URLは空でOK
  5. Twitter Developer Agreementを確認してチェックを付けた後、「Create your Twitter application」を押す
  6. 登録成功した感じのページに遷移したらタブの「Keys and Access Tokens」を選択
  7. 下の方にある「Create my access token」のボタンを押す

ここまでの操作により、下に赤枠で示した4つの情報が確認できればTwitter側は準備完了です。

※Access Tokenは途中にあるハイフンも含むのでコピペの際に間違って消さないよう注意

AWS IoT Buttonのセットアップ

AWS IoT Buttonを利用するためにはAWSアカウントが必要です。
まだアカウントを作成していない場合はこちらなどから頑張ってサインアップします。

AWSコンソールへサインイン出来たら、
ここに書いてある通りにセットアップを実行します。

一つ注意点として、セットアップ手順を進めるPCが無線LANにアクセスできない端末の場合、
無線LANアクセス可能なPCへ証明書と鍵を送ってButtonの設定を完了させる必要があります。
これにもたついているとButtonへの接続が切れて入力やり直しとかになったりします。
まぁ今時そんなPCはまず無いと思いますが、念のため。
なんでこのPC無線LAN子機内蔵してないんだ……

Lambda関数の処理を実装

AWS IoT Buttonのセットアップ手順でLambda関数の作成までは行ったので、
その関数の処理をTwitterへ投稿する処理に変更します。
上でセットアップしたButtonが押されると、ここで書いた処理が実行されるという感じになるわけですね。

下記の手順は既にNode.js & npmがインストールされているという前提になります。

まず、作業ディレクトリを作成して、

mkdir iotbutton
cd iotbutton

Twitterのライブラリをインストールし、

npm install twitter

Twitterへ”ゆれ”と投稿する処理を書いてindex.jsとして保存した後、
(clientのパラメータにはTwitterでアプリ登録した際に確認したキーを指定)

const Twitter = require('twitter');

const client = new Twitter({
    consumer_key: 'xxxxxxxx',
    consumer_secret: 'xxxxxxxx',
    access_token_key: 'xxxxxxxx',
    access_token_secret: 'xxxxxxxx'
});

exports.handler = (event, context, callback) => {
    client.post('statuses/update', {status: 'ゆれ'}, function(error, tweet, response) {
        if (error) {
            console.log(error);
            callback(error);
            return;
        }
        console.log(tweet);
        callback();
    });
};

最後にnode_modulesindex.jsをzipで固めてLambda関数のコードとしてアップロードするだけです。
とっても簡単!

一度アップロードした後は、AWSコンソール上からインラインでコードの編集が出来るようになります。

動作確認

これで準備は全て整いましたので、早速試してみます。
ただし、ゆれてもいないときに一人ゆれツイートを投稿して誤爆しちゃったみたいな感じになるのは嫌なので
今だけ”This is a test tweet by Lambda.”に文言を変えています。

まずはButtonを押下。
少し間を空けてからタイムラインを更新すると……

tweet_button2.png

成功です!
これでもういつ地震が来ても大丈夫。

制限事項とか残課題とか

  • Buttonを押してから呟きが投稿されるまでに5秒~10秒くらいのタイムラグがある。自分で投稿した方が速そう
  • セットアップしたWi-Fiアクセスポイントのある場所でしか使えない。
  • 間違えて押すと悲しいことに。 → 2回押されたらキャンセル or 削除させる?

雑感

タイムラグが致命的なため、地震ツイートRTA用途には使えなさそうなのが非常に残念でした。

それはともかくとして、セットアップの容易さとAWSとの連携による汎用性の高さを併せ持つ
このButton(1個約20$)は魅力的で可能性を感じるプロダクトだと改めて実感しました。
早く日本でも販売開始してほしい。

余談ですが、国産のIoTプロダクトではMESHというのもありますね。
機会があればこっちも触ってみるかもしれません。

続きを読む

【祝ヨーロッパ上陸】AWS CloudFormationを使ってAWS IoT Buttonの環境を構築する | Developers.IO

Amazonにはお気に入りの商品をワンプッシュで注文するAmazonダッシュボタンというサービスがあります。 これをプログラマブルに制御可能にした AWS IoT … 続きを読む

AWS Greengrassのチュートリアルをやってみた

Greengrassのユーザガイドにあるチュートリアルをやってみました。
http://docs.aws.amazon.com/greengrass/latest/userguide/gg-deploy-simple-lambda.html

事前に用意するもの

  • AWSアカウント
  • Raspberry Pi3

作業内容

1. GreengrassグループとGreengrassコアを作成する

マネジメントコンソールにログイン後、「AWS IoT」-「Greengrass」-「今すぐ始める」を選択します。次に「Greengrassグループを設定する」画面になったら、「簡単な作成の使用」を選択します。

01_welcome.png

グループ名とコア名を指定後、「グループとコアの作成」をクリックします。

02_group.png

03_core.png

「コアデバイスへの接続」 の画面になったら、証明書、パブリックキー、プライベートキーとGreengrassコアソフトウェアをダウンロードします。

05_key.png

2. Raspberry Piを設定する

Raspberry Piへログインし、下記の設定をします。

  • ユーザー・グループの作成
  • カーネル4.9へアップデート
  • sqlite3のインストール
  • セキュリティ設定

$ sudo adduser --system ggc_user
$ sudo addgroup --system ggc_group

$ sudo apt-get install rpi-update
$ sudo rpi-update

$ sudo apt-get install sqlite3

$ sudo vi /etc/sysctl.d/98-rpi.conf

$ sudo reboot
/etc/sysctl.d/98-rpi.conf
・・・
fs.protected_hardlinks = 1
fs.protected_symlinks = 1

3. Raspberry PiにGreengrassソフトウェアパッケージを展開する

ダウンロードしたソフトウェアパッケージをscp等でRaspberry Piにコピー後、展開します。

$ sudo tar -zxf greengrass-linux-armv7l-1.0.0.tar.gz -C /

4. Raspberry Piに証明書をインストールする

シマンテックのサイトからルート証明書をダウンロードします。
http://docs.aws.amazon.com/ja_jp/greengrass/latest/userguide/install-core-certs.html

ダウンロードした証明書、プライベートキーとルート証明書をscp等でRaspberry Piに転送後、配置します。

$ sudo mv xxxxxxxxxx-certificate.pem.crt /greengrass/configuration/certs/cloud.pem.crt

$ sudo mv xxxxxxxxxx-private.pem.key /greengrass/configuration/certs/cloud.pem.key

$ sudo mv root-ca.pem /greengrass/configuration/certs/

5. Greengrassコアを設定する

「コア」-「詳細」を選択して、ARNを表示します。

06_core.png

07_core_detail.png

aws cliでIoTのエンドポイントを取得します。

$ aws iot describe-endpoint
{
    "endpointAddress": "xxxxxxxxxxxx.iot.us-east-1.amazonaws.com"
}

上記で取得した値を元に、config.jsonファイルを設定します。

  • ルート証明書
  • 証明書
  • プライベートキー
  • ARN
  • IoTエンドポイント
  • systemdの利用有無
/greengrass/configuration/config.json
{
    "coreThing": {
        "caPath": "root-ca.pem",
        "certPath": "cloud.pem.crt",
        "keyPath": "cloud.pem.key",
        "thingArn": "arn:aws:iot:us-east-1:yyyyyyyyyyyy:thing/MyFirstGroup_Core",
        "iotHost": "xxxxxxxxxxxx.iot.us-east-1.amazonaws.com",
        "ggHost": "greengrass.iot.us-east-1.amazonaws.com"
    },
    "runtime": {
        "cgroup": {
            "useSystemd": "yes"
        }
    }
}

6. Raspberry Pi上のGreengrassコアをAWS IoTに接続する

greengrassデーモンを起動します。

$ cd /greengrass
$ sudo ./greengrassd start

7. サンプルのLambdaを作成する

マネジメントコンソールで「Lambda」-「greengrass-hello-world」を選択し、Lambdaを作成します。
08_lambda.png

作成後、Lambdaに対し新しいバージョンを発行します。

12_lambda.png

8. 作成したLambdaをグループの定義に追加・設定する

「最初のLambdaを追加する」を選択します。

14_lambda_add.png

「既存のLambdaを使用」を選択し、Lambda名とバージョンを指定します。

15_lambda_add.png

16_lambda_add.png

17_lambda_add.png

Lambdaを追加したら、ライフサイクルを「存在時間が長く無制限に稼働する関数にする」に変更します。

18_lambda_modify.png

19_lambda_modify.png

9. subscriptionをグループの定義に追加する

「最初のサブスクリプションの追加」を選択します。

20_subscription.png

以下のように指定して、「完了」を選択します。

25_subscription.png

10. グループをデプロイする

「デプロイ」を選択します。

26_deploy.png

「自動検出」を選択します。

27_deploy.png

「権限の付与」を選択します。

28_deploy.png

「デプロイメントが正常に完了しました」のメッセージが表示されればデプロイ成功です。

30_deploy.png

動作確認

トピックのサブスクリプションを指定後、「トピックへのサブスクライブ」を選択します。

31_test.png

Greengrassコアからのメッセージが表示されればOKです。

32_test.png

雑感

Lambdaに続き、AWSは何か破壊的なサービスを出してきたように思えます。
Greengrassが今後どのように発展していくのか、とても楽しみです。

続きを読む