UbuntuにAWS IoT GreengrassV2をインストールする

# はじめに
今回は、Ubuntu搭載デバイスに2020年12月にリリースされたGreengrassの新しいバージョンであるGreengrassV2をインストールする手順を紹介します。
Greengrass V2ではエッジランタイムのオープンソース化や、使用する機能のみをデプロイに含められることによるソフトウェアコンポーネントのモジュール性の向上、エッジデバイスでアプリケーションをローカルに開発して他のデバイスに展開する機能の追加等の変更が行われています。

※旧バージョンGreengrass V1のインストールについては[こちらの記事](https://qiita.com/Yokogawa_Ishino/items/1fb734f091e952a16fea)をご覧ください。

# 環境
動作確認済デバイス（OS）

- e-RT3 Plus F3RP70-2L[^ert3]（Ubuntu 18.04 32bit）
    横河電機のエッジコントローラです。

- Raspberry Pi 4 Model B （Ubuntu Server 20.04 32bit）

これらのデバイスでは armhf アーキテクチャのパッケージが動作します。

# エッジデバイスの準備
## パッケージのインストール
エッジデバイスに必要なパッケージをインストールします。

```bash
sudo apt update
sudo apt install unzip default-jdk
```
>**Note**
>エッジデバイスがproxy環境下にある場合は[proxy設定](https://qiita.com/Yokogawa_Mita/items/f7996d539b29618d7159#proxy%E8%A8%AD%E5%AE%9A)が必要です。

## AWS認証情報の設定
エッジデバイスの環境変数にAWSの認証情報を設定します。
詳しくは以下のページをご覧ください。
https://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/quick-installation.html#provide-installer-aws-credentials

# コアデバイスの登録とコアソフトウェアのインストール
クラウド上にコアデバイスを登録し、エッジデバイスにコアソフトウェアをインストールします。

1. Greengrass V2のページに行き、「1つのCoreデバイスをセットアップ」をクリックします。
![ggv2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/7a087cc8-5fee-fa0d-2ff7-64ad1f5d0c3a.png)

1. コアデバイスの名前を入力します。
![ggv2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/6f2a95be-f94a-9bc7-a637-8d09804d270d.png)

1. モノのグループを作成する場合はグループ名を入力します。既存のグループにコアデバイスを追加することもできます。
![ggv2-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/911411fa-1b2e-47bf-7507-f32214bc356e.png)

1. エッジデバイスにコアソフトウェアをダウンロードしてインストールします。
    ①、②のコマンドを順にエッジデバイスで実行してコアソフトウェアをダウンロード、インストールします。
    インストールが完了したら「コアデバイスを表示」をクリックします。
    ![ggv2-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/446d6a2e-7b29-acc0-5e79-547296a48d19.png)
    >**Note**
    >エッジデバイスがproxy環境下にある場合は、[proxy環境下でのコアソフトウェアのインストール](#proxy環境下でのコアソフトウェアのインストール)をご覧ください。

1. 作成したコアデバイスが表示されていたら成功です。(反映されるまで少し時間がかかります。)
![ggv2-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/75fe9185-f44f-e9fc-5e13-021c33ffe21c.png)

    
# 補足
## proxy環境下でのコアソフトウェアのインストール
proxy環境下にあるエッジデバイスにコアソフトウェアをインストールする場合は以下の設定が必要です。
環境により設定項目は異なりますが、参考までに今回私が行った設定を紹介します。

1. コアソフトウェアの設定ファイル`config.yaml`を作成し、proxy設定を行います。

    ```yaml:config.yaml
    services:
      aws.greengrass.Nucleus:
        configuration:
          mqtt:
            port: 443
          greengrassDataPlanePort: 443
          networkProxy:
            proxy:
              url: "http://username:password@xxx.com:port/"
    ```  
  
1. [コアデバイスの登録とコアソフトウェアのインストール](#コアデバイスの登録とコアソフトウェアのインストール)の手順4の②のコマンドから`--deploy-dev-tools true`を削除し、`--init-config (path/to/config.yaml)`を追加します。コマンドは以下のようになります。
    コマンド例

    ```bash
        sudo -E java \
        -Droot="/greengrass/v2" -Dlog.store=FILE -jar ./GreengrassCore/lib/Greengrass.jar --aws-region ap-northeast-1 \
        --thing-name SampleCore --thing-group-name SampleCoreGroup --component-default-user ggc_user:ggc_group \
        --provision true --setup-system-service true --init-config (path/to/config.yaml) #追加
    ```
    >**Note**
    >proxy環境下だとデプロイに失敗するため`--deploy-dev-tools true`オプションを削除しています。手動でデプロイする場合は[aws.greengrass.Cliコンポーネントのデプロイ](#awsgreengrasscliコンポーネントのデプロイ)をご覧ください。
    
## aws.greengrass.Cliコンポーネントのデプロイ
aws.greengrass.Cliはエッジデバイスでアプリケーションをローカルに開発、デバッグできるコマンドラインインターフェース（CLI)です[^cli]。
コアソフトウェアのインストール時に`--deploy-dev-tools true`オプションをつけなかった場合、aws.greengrass.Cliコンポーネントがコアデバイスにデプロイされません。
必要に応じて以下の手順に従って手動でデプロイします。

1. メニューの「コンポーネント」→「パブリックコンポーネント」→「aws.greengrass.Cli」をクリックします。
![ggv2-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/5e835e64-37cf-b680-ea58-ce094e9d270f.png)

1. 「デプロイ」をクリックします。
![ggv2-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/2e923e53-67f5-b980-c56a-8fb000b7d313.png)

1. デプロイを選択します。今回は新しいデプロイを作成します。
![ggv2-8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/3475f4b1-4b05-b5d3-705a-58c5c2cefd85.png)

1. デプロイターゲットを指定します。デプロイ情報にデプロイ名、デプロイターゲットのターゲットタイプに「コアデバイス」ターゲット名にコアデバイス名を指定して「次へ」をクリックします。
![ggv2-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/c4499d98-1266-51f4-7afa-f9511b7c136f.png)

1. デプロイするコンポーネントを指定します。パブリックコンポーネントのaws.greengrass.Cliにチェックが入っていることを確認し、「次へ」をクリックします。
![ggv2-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/d8bcd761-fd26-437f-2167-649a55c7bdeb.png)

1. コンポーネントの設定と詳細設定はデフォルトのまま「次へ」をクリックします。レビュー画面で設定を確認し、問題なければ「デプロイ」をクリックします。
![ggv2-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/e25eee75-2fc5-3da5-b585-c3198b33614d.png)

1. デプロイの画面に移ります。デプロイが完了するとステータスが「アクティブ」から「完了」に変わります。
![ggv2-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682603/723abd75-a985-2bc7-52bf-49351268a3d7.png)

1. デプロイの成功を確認します。エッジデバイスでコマンドを実行し、以下のように出力されたら成功です。

    ```bash
    username@ubuntu:~$ /greengrass/v2/bin/greengrass-cli --version
    Greengrass CLI Version: 2.1.0
    ```

[^ert3]: [産業用AIプラットフォーム | 横河電機株式会社](https://www.yokogawa.co.jp/solutions/products-platforms/control-system/real-time-os-controller/ert3-ai-platform/)
[^cli]: [Greengrass - AWS IoT Greengrass](https://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/greengrass-cli-component.html)