[JAWS-UG CLI] IoT #15 IoTダミーデバイスの構築 (EC2 + Shadow)

ダミーデバイスとして動作するEC2上で作業します。


前提条件
========


IoTへの権限
-----------

AWS IoTに対してフル権限があること。


AWS CLIのバージョン
-------------------

以下のバージョンで動作確認済

- AWS CLI 1.11.47

```bash:コマンド:
aws --version
```

```text:結果(例):
      aws-cli/1.11.14 Python/2.7.10 Darwin/15.6.0 botocore/1.4.71
```

バージョンが古い場合は最新版に更新しましょう。

```bash:コマンド:
sudo -H pip install -U awscli
```


0. 準備
=======


0.1. リージョンの決定
---------------------

構築するリージョンを決めます。 (カレントユーザが利用するカレントリージ
ョンも切り変わります。)

```bash:コマンド(東京リージョンの場合):
export AWS_DEFAULT_REGION='ap-northeast-1'
```


0.2. 変数の確認
---------------

プロファイルが想定のものになっていることを確認します。

```bash:コマンド:
aws configure list
```

```text:結果(例)
            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile         administrator-prjz-mbp13        env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region                         ap-northeast-1  env    AWS_DEFAULT_REGION
```

AssumeRoleを利用している場合はprofileが '<not set>'と表示されます。 そ
れ以外のときにprofileが '<not set>' と表示される場合は、以下を実行して
ください。

   変数の設定:

         export AWS_DEFAULT_PROFILE=<IAMユーザ名>


# 1. 事前作業




# 2. EC2での構築作業

ダミーデバイス用のEC2インスタンスにログインして構築作業をします。

## 2.1. SDKのインストール (EC2)

```bash:コマンド(EC2):
sudo pip install AWSIoTPythonSDK
```

```text:結果(例):
      (略)
      Successfully installed AWSIoTPythonSDK-1.1.1
```



## 2.2. dummy デバイスのインストール (EC2)

作業はログインしたディレクトリ /home/ec2-user で実行して下さい。 (
変更する場合はsetup.jsonでのCERT_PATHの設定が必要)

```bash:コマンド(EC2):
pwd
```

```text:結果:
      /home/ec2-user
```

```bash:コマンド(EC2):
wget https://s3-ap-northeast-1.amazonaws.com/document-for-customer/AWSIoT_Basic/JAWS-shadow/shadow.zip
```

```text:結果:
      (略)
      2016-11-17 03:24:57 (125 MB/s) - `shadow.zip' へ保存完了 [4208/4208]
```

```bash:コマンド(EC2):
unzip shadow.zip
```

```text:結果:
   creating: shadow/
   creating: shadow/certs/
  inflating: shadow/certs/rootca.pem  
  inflating: shadow/dummy_shadow.py  
  inflating: shadow/multi_shadow.py  
```

```bash:コマンド(EC2):
cd ~/shadow \
        && ls
```

```text:結果:
certs  dummy_shadow.py  multi_shadow.py
```




## 2.3. setup.jsonの作成 (EC2)


```bash:変数の宣言:
FILE_INPUT='/home/ec2-user/shadow/setup.json'

```

```json:/home/ec2-user/shadow/setup.json:
{
      "AWSIoT": {
          "ENDPOINT":"YOUR_DOMAIN.amazonaws.com",
          "CERT_PATH":"/home/ec2-user/shadow/certs/",
          "KEYS":["cert.pem", "private.pem", "root.pem"]
      },
      "DEVICE":{
          "NAME":"handson20170220",
          "TOPIC":"/device/room01/tmp01"
      }
}
```

- YOUR_DOMAINをAWS IoTのエンドポイントURLに書き替えます。

  - 'https://'の部分は不要です。


```bash:コマンド:
mv /home/ec2-user/shadow/certs/rootca.pem /home/ec2-user/shadow/certs/root.pem
```


## 2.4. 証明書の転送 (Local)

IoT環境構築時に取得した証明書と秘密鍵を
/home/ec2-user/shadow/certs/下に下記のファイル名で置きます。

- 証明書(作成時の名称:handson-20170220.cert): cert.pem

- 秘密鍵(作成時の名称:handson-20170220.pem): private.pem

```bash:コマンド(Local):
scp -i ${FILE_SSH_KEY} \
  handson-20170220.cert ec2-user@${EC2_PUBLIC_IP}:/home/ec2-user/shadow/certs/cert.pem
```

```bash:コマンド(Local):
scp -i ${FILE_SSH_KEY} \
  handson-20170220.pem ec2-user@${EC2_PUBLIC_IP}:/home/ec2-user/shadow/certs/private.pem
```



3. 事後作業
===========

## 3.1. 証明書の確認

```bash:コマンド:
ls /home/ec2-user/shadow/certs/
```

```text:結果:
cert.pem, private.pem, root.pem
```

## 3.2. プログラムの動作確認

```bash:コマンド:
cd ~/shadow/ \
  && python dummy_shadow.py
```

```text:結果:
start readConfig func
start connct shadow
shadow connect
satrt subscribe shadow
send currnet status to cloud-shadow
{"state":{"reported":{"wait_time":10, "signal":"green"}}}
```

Ctrl+Cでプログラムを停止します。



完了
====