[JAWS-UG CLI] IoT #8 IoTダミーデバイスの構築&動作 (EC2)

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


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


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

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


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

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

- AWS CLI 1.11.2

```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. 事前作業
===========


1.1. SDKのインストール
----------------------

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

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


1.2. dummy デバイスのインストール
--------------------------------

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

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

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

```bash:コマンド(EC2):
wget http://bit.ly/2eP3uEl > dummy.zip
```

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

```bash:コマンド(EC2):
mv 2eP3uEl dummy.zip \
        && unzip dummy.zip
```

```text:結果:
      Archive:  dummy.zip
         creating: dummy_python/
        inflating: dummy_python/.DS_Store
         creating: dummy_python/certs/
        inflating: dummy_python/certs/root.pem
        inflating: dummy_python/dummy.py
        inflating: dummy_python/setup.json
```

```bash:コマンド(EC2):
cd dummy_python \
        && ls
```

```text:結果:
      certs  dummy.py  setup.json
```


1.3. setup.jsonの編集
---------------------

```bash:コマンド(EC2):
cp setup.json setup.json.origin
```

/home/ec2-user/dummy_python/setup.json:

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

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

- CERT_PATHを下記の通り書き替えます。

  - (変更前): /home/ec2-user/Dummy_device/fake_device/certs/

  - (変更後): /home/ec2-user/dummy_python/certs/

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


1.4. 証明書の設定
-----------------

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

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

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

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

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


2. ダミーデバイスの実行
=======================

```bash:コマンド(EC2):
cd /home/ec2-user/dummy_python/
```

```bash:コマンド(EC2):
python dummy.py &
```

```text:結果(例):
      start readConfig func
      Start MQTT init
      start Init MQTT func
      -------start connect--------
      Success:Connect to MsgBroker
      {"Tmp": 13, "TimeStamp": 1479360340720, "Name": "tmp01"}
```

S3のバケットにログファイルが書き込まれていることを確認します。

```bash:コマンド(Local):
aws s3 ls s3://${S3_BUCKET_NAME}/
```

```text:結果(例):
      2016-11-17 19:26:15         56 handson-1479360373778
```


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


3.1. ダミーデバイスの停止
-------------------------

```bash:コマンド(EC2):
kill -9 $( ps -ef | grep dumm[y] | awk '{print $2}' )
```

```text:結果:
      [1]+  強制終了            python dummy.py
```

```bash:コマンド(EC2):
ps -ef | grep dumm[y]
```

```text:結果:
      (戻り値なし)
```


3.2. ログアウト
---------------

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


完了
====