ラズパイでAWS IoTをやる際の初期設定を最速でやる（Python3, pip, Greengrass v1, AWS CLI, boto3, remote.it + 便利なエイリアス）

# はじめに
ラズパイの初期設定をAWS IoTにフォーカスしてまとめてみました。どういう順番でやっても、どれか選択的にやっても大丈夫です。

※ちなみにラズパイは3のモデルBを使っています。

・初期設定：カメラ、SSH、VNCの設定

・remote.itのインストール

・Greengrassのインストール&Greengrass Groupの登録
(※GreenGrassのVersion1です)

・AWS CLIのインストール

・pipとboto3のインストール

・`python`コマンドでPython3.xを使えるようにする


なお以下の本当の初期のステップは省いてあります。

ディスクイメージをEtcherでフラッシュ
↓
ラズパイにSDカード挿入
↓
言語やネットワーク等の初期設定してアップデート（約1時間かかる）

# 初期設定：カメラ、SSH、VNCの設定
ラズパイターミナルにて、

```
sudo raspi-config
```
この画面になる。3番にいく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/c0094700-27d2-0596-c880-4fd65236f538.png)
カメラとSSHとVNCを許可する。終わったら`Esc`で戻る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001699/8f826156-852a-cf55-1a50-9e81bf155be1.png)

### リモートのMacからSSHで接続
ラズパイ上で、以下のコマンドを打つとIPアドレスがわかる。

```
hostname -I
```

今度はMacのターミナル上で出てきたIPアドレスを入力して繋ぐ（piはユーザーネーム）。

```
ssh pi@xxx.xxx.xxx.xxx
```

もしこんな表示が出たら、前に同じIPアドレスで違うホストが登録されていたということ。前の記録を消す必要がある。

```
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
(中略)
Add correct host key in /Users/hidehirominagawa/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/hidehirominagawa/.ssh/known_hosts:23
ECDSA host key for 192.168.0.108 has changed and you have requested strict checking.
```
以下のようにホーム配下に`.ssh/known_hosts`があるので該当する行を消す。

```
sudo nano /Users/hidehirominagawa/.ssh/known_hosts
```

# remote.itの設定
remote.itはラズパイやJetsonへのSSH、VNC接続やデバイス管理を簡単にGUIでできる便利なアプリだ。一度登録しておくとラズパイを自宅に置いたままで、カフェや職場のPCからSSHやVNCで接続ができるようになる。弊社で取扱いがある関係で存在を知ったが、使ってみるとうんなかなか悪くない。使い始めるには以下のリンクを参考にしてremote.itに登録してからコマンドを叩く。
参考：https://qiita.com/u___sk/items/e0df9581d2e58891ec8a

```
# インストール
curl -LkO https://downloads.remote.it/cli/latest/remoteit_linux_armv7 -o /home/pi/

# ダウンロードしたremoteitを、実行パスの通ったディレクトリにコピー
sudo mv remoteit_linux_armv7 /usr/bin/remoteit

# ファイルに実行権限を与える
sudo chmod +x /usr/bin/remoteit

# Agentのインストール
sudo remoteit agent install

# 関連ツールのインストール
sudo remoteit tools install

# サインイン（Usernameはremoteitに登録したメールアドレス）
sudo remoteit signin

# デバイスとサービスの登録
sudo remoteit register
sudo remoteit add
```

※なお、Macの標準VNCクライアントのScreenShareはデフォルトだとラズパイの標準VNCサーバーRealVNCと互換性がないので大人しくRealVNC Viewerをインストールして使っている。
https://www.realvnc.com/en/connect/download/viewer/

# awsコマンドのインストール(awscli)
RaspberryPi3 Model BはCPUがarmhfで、awscli-v2にはサポートされていないのでv1をインストールします。

AWSCLIv1公式ドキュメント：https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv1.html
AWSCLIv2公式ドキュメント：https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2.html

```
# v1をインストール。
curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
unzip awscli-bundle.zip
sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

# いらないファイルを消す。
rm -rf awscli-bundle*
```

### aws configureコマンド
最後に一番大事な`aws configure`コマンド。これを一回やっとくと`boto3`コマンドや`aws`コマンドなどで認証の手間が省ける。

```
aws configure

AWS Access Key ID : ****************
AWS Secret Access Key : ****************
Default region name : us-east-1 
Default output format : None
```
### 試しにawsコマンドでS3バケットを消してみる
試しに中にファイルが入ったS3バケットを消してみる。以下のコマンドで`bucket-name`という名のS3バケットが消せる。コンソールからだとバケットを空にしてからじゃないと消せないので便利だ。

```
aws s3 rb s3://bucket-name --force 
```

# Greengrassのインストール

以下のコマンドを打って3分ほど待つとインタラクティブモードでGreengrass Groupとcoreの登録が始まる。Access ID, Secret Access Keyを入力する必要がある。後でもう一回入力する必要があるのでCSVファイルならその開いたCSVファイルを閉じないで開いたままにする。また、HelloWorldというサンプルのLambdaはダウンロードしますか？に対して`Yes`と入力する。

```
curl https://d1onfpft10uf5o.cloudfront.net/greengrass-device-setup/downloads/gg-device-setup-latest.sh \
> gg-device-setup-latest.sh \
&& chmod +x ./gg-device-setup-latest.sh \
&& sudo -E ./gg-device-setup-latest.sh bootstrap-greengrass-interactive 
```

ちなみにこの質問はそのまま何も入力せずEnterでいい。一時的な認証情報を使っているときのみ。

```
Enter your AWS session token, which is required only when you are
using temporary security credentials. Press 'Enter' to read it
from your environment variables or if the session token is
not required.
```


また、以下はgreengrass関係のファイルをどこに置くかという質問だが、デフォルトの`/`以外を選択すると後でエラーが出る。なのでここは何も入力せずEnterを押す。

```
Enter the installation path for the Greengrass core software,
or press 'Enter' to use '/'.
```



ラズパイの場合は再起動してもうひと頑張りする必要がある（Jetsonは必要なし）。もうちょっと頑張ろう。

```
sudo reboot
```

2回目。これでようやくGreengrass Groupとcoreが登録できる。

```
sudo -E ./gg-device-setup-latest.sh bootstrap-greengrass-interactive
```

AWS access key IDとAWS secret access keyを入力する。

前のセッションで入力した設定を引き継ぎますか？ということなので`yes`と入力する。

```
Do you want to reuse the configuration from your previous session?
Enter 'yes' to reuse the configuration or 'no' to restart
the installation.

yes
```
もう一度認証情報を入れる。

```
Enter your AWS access key ID, or press 'Enter' to read it from your environment variables.
```

不要になったファイルを消す。

```
sudo rm gg-device-setup-latest.sh GreengrassDeviceSetup-*　\
GreengrassDeviceSetup*
```
以下のコマンドでGreengrassをスタートさせる。

```
sudo /greengrass/ggc/core/greengrassd start
```
AWSコンソールからAWS IoT Coreへ行き、MQTTテストクライアントを開く。`#`にサブスクライブして5秒間隔で以下のようなメッセージが届いていたらオッケー。

```
Hello world! Sent from the Lambda function - \
Greengrass_HelloWorld_gnF9N running on platform:\
Linux-5.10.17-v7+-armv7l-with-debian-10.9
```


# pythonコマンドでpythonのv3を使えるようにする(シンボリックリンクの作成)
参考：https://qiita.com/LI_MO/items/6328106cdd83fcb830d3

```
# pythonのバージョンを表示
python -V
# Python 2.7という表示が出たら以下のコマンドでpython3にリンクを張り替える。


# 元のシンボリックリンクを削除
sudo rm -rf /usr/bin/python

#python関連ファイルを検索
whereis python
# 以下のような表示が出る。\
python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python3.6.5　/usr/bin/python3.8.5 

# シンボリックリンクを作成
sudo ln -s /usr/bin/python3.8 /usr/bin/python

# pythonのバージョンを表示
python -V
Python 3.8.5
```

# pipとboto3のインストール
### pipのインストール
以下のコマンドでインストールする。

```
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
```
以下のようなメッセージが出る。

```
WARNING: The scripts pip, pip3 and pip3.7 are installed in 
'/home/pi/.local/bin' which is not on PATH.
Consider adding this directory to PATH.
```
忠告に従う。これでpipコマンドが使えるようになる。

```
# パスを通す。
export PATH=$PATH:/home/<Username>/.local/bin

# こまめにお掃除
sudo rm get-pip.py
```

### boto3のインストール

```
pip install boto3
```



# あると便利なエイリアスの設定
Greengrassをスタートさせるには`sudo /greengrass/ggc/core/greengrassd start`のように長々とコマンドを打たないといけないのでエイリアスに登録しておく。

```
nano ~/.bashrc
```

でターミナル起動時に最初に実行されるファイルを開いて、

```
alias ggstart='sudo /greengrass/ggc/core/greengrassd start'
alias ggrestart='sudo /greengrass/ggc/core/greengrassd restart'
alias ggstop='sudo /greengrass/ggc/core/greengrassd stop'
```

を適当なところに追加しよう。設定を反映させるにはターミナルを再起動してもいいが、

```
source ~/.bashrc
```

で反映される。

### 筆者お気に入りのエイリアス
筆者は以下のようなエイリアスもお決まりで加えている。結構便利だと思う。

```
alias s='ls -CF'
alias c='cd'
alias cl='clear'
alias p='python'
```

以上です。