AWS IoT 1-Click と IoT エンタープライズボタンのセットアップ&動作確認

## AWS IoT 1-Clickとは
Lambda 関数を対応デバイスからトリガーできるサービスです。
昨年の AWS re:Invent 2017 で発表されていました。
https://aws.amazon.com/jp/iot-1-click/

現状の対応デバイスとして AWS IoT Enterprise Button と AT&T LTE-M Buttonがあるようですが
AWS IoT Enterprise Button が Amazon.co.jp で購入できるようになりました。

## 準備の準備
### AWS IoT エンタープライズボタン
Amazon.co.jpから購入します。
AWS IoT エンタープライズボタン
http://amzn.asia/cZPbDnF

1つあたり、2,500円です。
ちなみに AWS IoT 1-Click の利用料はアクティブなデバイス数で課金されます。
1,000台までは1台あたりの月額料金が$0.25 です。
https://aws.amazon.com/jp/iot-1-click/pricing/

### AWS IoT 1-Click モバイルアプリ
お使いのスマートフォンにインストールします。
https://itunes.apple.com/app/id1315204832
https://play.google.com/store/apps/details?id=com.amazonaws.oneclick

## デバイスの登録
モバイルアプリを起動し、AWSアカウントにログインします。
IAMユーザでログインするには、アカウントIDまたはIDに設定しているエイリアスを入力します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/125105/45a6f023-9610-0c4d-fbc1-1ff0ac86fe88.png" width=30%> <img src="https://qiita-image-store.s3.amazonaws.com/0/125105/f5b124bd-421f-c3de-9193-2939bb342ad4.png" width=30%>

ログインできたら必要に応じてリージョンを変更し、
デバイスIDで登録 からデバイスIDのスキャンを行います。
カメラが起動したらQRコードまたはバーコードを読み込ませます。
ボタンの裏に記載されているQRコードがとても小さいので、届いた際の段ボールケースに貼られている
バーコードをスキャンする方が楽でした。

<img src="https://qiita-image-store.s3.amazonaws.com/0/125105/c347e8e7-ac79-72b2-2177-dbd5e1ec54b0.png" width=30%> <img src="https://qiita-image-store.s3.amazonaws.com/0/125105/3dccd004-cc51-45d6-2835-14cdbe473a3d.png" width=30%>

続いてWi-Fiの設定を行います。

<img src="https://qiita-image-store.s3.amazonaws.com/0/125105/a6118452-196f-6452-e2cc-986fec409344.png" width=50%>

Bluetoothを有効にしてWi-Fiの接続情報を入力したら、ボタンを長押ししてデバイスを設定します。


<img src="https://qiita-image-store.s3.amazonaws.com/0/125105/4c48cfb9-774c-aa30-cd9e-2c0d1df99201.png" width=30%> <img src="https://qiita-image-store.s3.amazonaws.com/0/125105/a6e46504-4fa0-6d95-b126-ef669d6c56be.png" width=30%>

最後にもう一度ボタンを押せば、登録完了です。
残りのライフ・・・。寿命は約2000回とのこと。電池持ちの問題でしょうか。

<img src="https://qiita-image-store.s3.amazonaws.com/0/125105/9f3f22de-3d1a-b9ea-866c-8509b635d31d.png" width=30%> <img src="https://qiita-image-store.s3.amazonaws.com/0/125105/6588b8c5-630a-e342-cf74-6cd5e5cdeb16.png" width=30%>

## AWS側の設定
モバイルアプリからも設定が行えますが、ここではマネジメントコンソールで操作を行います。
マネジメントコンソールからAWS IoT 1-Clickにアクセスします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/ef88acc8-5832-454b-c591-49ebf1616414.png)

管理→デバイスから登録したデバイスを確認できます。
デバイスのリージョンがus-west-2になってますが、これは問題ないようです。
https://docs.aws.amazon.com/iot-1-click/latest/developerguide/1click-appendix.html

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/96aba29f-fe03-97c8-77c8-523de125203f.png)

続いてプロジェクトの作成を行います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/9bed412f-32ac-b3e8-6ceb-6503a17bc43b.png)

プロジェクト名、説明(省略可)を入力し、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/941c7676-7ff5-2bdb-de9d-c0487424b0e5.png)

デバイステンプレートの定義の開始を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/58b3eeac-40b8-0ad3-86c2-cf07335b65ca.png)

さらにすべてのボタンタイプを選択すると、

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/978045cf-2954-d750-626e-ff98d16963fe.png)

テンプレート名とアクションを設定できます。
「SMS を送信する」と「Eメールの送信」がサンプルとして用意されていますが、
ここでLambda 関数の選択 を選ぶと任意のファンクションを実行できるようですね。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/786df3db-5051-bd4e-89b6-5b1f333b1310.png)

まずは試しに「SMS を送信する」を試してみます。
プレイスメントの属性に電話番号とメッセージを入力し、プロジェクトの作成を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/9165a380-966b-4e39-ce27-8182a29a3a35.png)

プロジェクトの作成が成功したら、プレイスメントの作成を行います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/5cf3066f-b1b0-b6c3-c62f-8039e7b8def3.png)

プレイスメント名を入力し、さらに登録済みのデバイスを選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/a7f89e6f-3748-49b0-0727-1dca95a3ee89.png)

プレイスメントの属性は先ほど設定したものが入力されているはずですので、
ここではそのまま「プレイスメントの作成」を選択します。

作成できました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/32ee23e0-d1e8-5cf4-55da-58ea2d006a18.png)

プロジェクトには複数のプレイスメントとデバイスを登録できるようです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/37b634ea-9f06-f4e6-6b56-8a51419d425c.png)

デバイスの状態も更新されています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/6f374df1-2c7b-ab2a-674a-98b1f01d66ec.png)

準備ができました！
ボタンを押してみます！！

<img src="https://qiita-image-store.s3.amazonaws.com/0/125105/2c2b85f7-fef7-d3f7-0a6b-94488b5216a4.png" width=80%>

届きました！簡単ですね。

<img src="https://qiita-image-store.s3.amazonaws.com/0/125105/2bdec454-4839-45aa-b212-b0d0cc25e959.png" width=50%>

プロジェクトのレポートからLambda 関数の実行状況が確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/e22e506d-ff76-1e13-2390-d9a7a947633a.png)

Lambda のコンソールを確認するとSMSを送信するファンクションが自動で登録されていました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/a3fe9aab-377a-09b5-f9b3-5bc31612ce86.png)

**2018/5/18 追記**
上記Lambda関数について、東京リージョンにデプロイしていても、自動作成される実行ロールについてはCloudWatch Logsに対するResource条件がオレゴンリージョンになってしまうようです。
そのままでは実行ログの出力に失敗するので、インラインポリシーのResource条件を書き換える必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/125105/99c0141a-a4d7-2e53-9a12-58995f08dbf2.png)

**追記終わり**

ちなみにもう一つのサンプルアクション「Eメールの送信」も簡単に設定することができますが、
メールの送信にはオレゴンリージョン(us-west-2)のSESが使用されます。
必要に応じて送信制限の解除等、事前の設定が必要です。
送信処理を行うLambda関数もオレゴンで登録されています。

一通り動作確認できたので、次はカスタムのLambda関数で
もう少し使える IoT ボタンを目指したいと思います！

参考になれば幸いです。