0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ラズパイでAWS Greengrass

Last updated at Posted at 2022-01-16

まずはセットアップするところまで。
せっかく書いたから投稿するけど、Greengrassタグが65個あったのでもっといい記事がありそう..

ラズパイの基本セットアップについて

詳細は下記参照。ラズパイのセットアップ、アップグレード、sshなどを設定。

環境のみ抜粋する。
使用モデル:Raspberry Pi 4 Model B (RAM 4GB)

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

前準備(AWS側)

IAMロールを作成

インストーラーがリソースをプロビジョニングするための最小限の IAM ポリシーを参考にして、下記ポリシーを持ったロールを作成する。

以下、GreenGrassRoleとする。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:AddThingToThingGroup",
                "iot:AttachPolicy",
                "iot:AttachThingPrincipal",
                "iot:CreateKeysAndCertificate",
                "iot:CreatePolicy",
                "iot:CreateRoleAlias",
                "iot:CreateThing",
                "iot:CreateThingGroup",
                "iot:DescribeEndpoint",
                "iot:DescribeRoleAlias",
                "iot:DescribeThingGroup",
                "iot:GetPolicy",
                "iam:GetRole",
                "iam:CreateRole",
                "iam:PassRole",
                "iam:CreatePolicy",
                "iam:AttachRolePolicy",
                "iam:GetPolicy",
                "sts:GetCallerIdentity"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DeployDevTools",
            "Effect": "Allow",
            "Action": [
                "greengrass:CreateDeployment",
                "iot:CancelJob",
                "iot:CreateJob",
                "iot:DeleteThingShadow",
                "iot:DescribeJob",
                "iot:DescribeThing",
                "iot:DescribeThingGroup",
                "iot:GetThingShadow",
                "iot:UpdateJob",
                "iot:UpdateThingShadow"
            ],
            "Resource": "*"
        }
    ]
}

ロール作成後、GreenGrassRoleのページの「認証関係」タブを選択し、「認証関係の編集」ボタンを押下。
jsonで下記を設定する。アカウントIDは12桁の数値、ユーザ名は次手順で作成するユーザ名(本資料ではGreengrassUser)に置き換えること。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<アカウントID>:user/<ユーザ名>"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

IAMユーザを作成

IAM > ユーザー から「ユーザーを追加」ボタンを押下。

  • ユーザー名:
    適当な名称(以下、GreengrassUser とする)。
  • AWS認証情報タイプを選択:
    アクセスキーのみチェック。
  • ユーザーにつけるポリシー:
    アカウントID、ロール名(本資料ではGreenGrassRole)は置き換えること。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sts:AssumeRole"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iam::<アカウントID>:role/<ロール名>"
            ]
        }
    ]
}

作成後、アクセスキー&シークレットアクセスキーを書き留めておく。

前準備(ラズパイ側)

AWS IoT greengrass(AWSマネジメントコンソール)にも手順が記載されているが、前準備も含めて具体的に記載する。

ラズパイにJDK(JAVA)をインストール

$ sudo apt install default-jdk 

インストール後のバージョン

$ java --version
openjdk 11.0.13 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-post-Raspbian-1deb11u1)
OpenJDK Server VM (build 11.0.13+8-post-Raspbian-1deb11u1, mixed mode)

AWS CLIをインストール。ラズパイへのインストール方法が以下に詳しく記載されている。

JSON成型用にjqコマンドをインストール

$ sudo apt install jq

AWS CLIをセッティング。

$ aws configure
AWS Access Key ID [None]:    ※前手順で書き留めたIAMユーザのアクセスキー
AWS Secret Access Key [None]:  ※      〃        シークレットアクセスキー
Default region name [None]:   ※ap-northeast-1 を入力(東京リージョン以外は適宜変更)
Default output format [None]:  ※そのままReturnキー押下(jsonとなる)

セッショントークンを取得&環境変数に設定。
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYはconfigureの設定値を見て欲しいのに、環境変数に入れないとダメっぽい...

$ export STSRES=$(aws sts assume-role --role-arn arn:aws:iam::<アカウントID>:role/GreenGrassRole --role-session-name sts-session --duration-second 3600 --profile default)
#echo $STSRES | jq .
$ export AWS_ACCESS_KEY_ID=$(echo $STSRES | jq -r '.Credentials.AccessKeyId')
$ export AWS_SECRET_ACCESS_KEY=$(echo $STSRES | jq -r '.Credentials.SecretAccessKey')
$ export AWS_SESSION_TOKEN=$(echo $STSRES | jq -r '.Credentials.SessionToken')
$ unset STSRES

Greengrassをラズパイにインストール

マネジメントコンソールからGreengrassのセットアップページへ移動し、「1 つの Core デバイスをセットアップ」ボタンを押下。
以下、入力する。

  • ステップ 1: Greengrass コアデバイスを登録する
    • コアデバイス名:適当な名称を入力。(本資料ではGreengrass-rsp001とした)
  • ステップ 2: モノのグループに追加して継続的なデプロイを適用する
    • モノのグループ: 「新しいグループ名を入力」を選択し、適当な名称を入力。(本資料ではGreengrassQuickStartGroupとした)
  • ステップ 3: Greengrass コアソフトウェアをインストール
    • オペレーティングシステム: 「Linux」を選択

上記まで入力すると、ページの下半分に記載されているコマンド内容が動的に変わる。
以下はマネジメントコンソールにも記載されているが念のため記載しておく。
※設定値によってコマンド引数が変わるため、コピペした方がよい

Greengrassインストーラのダウンロード  ※ラズパイで実行

$ cd /tmp
$ curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip && unzip greengrass-nucleus-latest.zip -d GreengrassCore

Greengrassインストーラの実行  ※ラズパイで実行

$ sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE -jar ./GreengrassCore/lib/Greengrass.jar --aws-region ap-northeast-1 --thing-name Greengrass-rsp001 --thing-group-name GreengrassQuickStartGroup --component-default-user ggc_user:ggc_group --provision true --setup-system-service true --deploy-dev-tools true

失敗する場合は、一時権限を1hで取得しているため、aws sts コマンドでセッショントークンを再取得&再設定するとよい。
コマンド実行後(コマンドはすぐ返ってくるが)AWS側で登録されるまで10~20分かかる。

インストール後の確認

  • AWS IoT > Greengrass > コアデバイスのページにコアデバイスが追加されていることを確認する。
    image.png

  • AWS IoT > 管理 > モノのページにもデバイスが追加されていることを確認する。
    image.png

  • AWS IoT > 証明書に証明書が追加されていることを確認する。
    どうやら後は証明書による認証でAWSと通信するっぽい。

  • AWS IoT > ポリシーが2つ追加される
    コアデバイスのポリシーは以下ポリシーの権限に加え、STSでロールエイリアス(GreengrassV2TokenExchangeRoleAlias)が追加されて使われる様子。

    • GreengrassV2IoTThingPolicy
    • GreengrassTESCertificatePolicyGreengrassV2TokenExchangeRoleAlias
  • [AWS IoT > ロールエイリアス]が1つ追加される

    • GreengrassV2TokenExchangeRoleAlias
      使いたいサービスがあれば、このロールに追加すればよさそう。
      ポリシー:GreengrassV2TokenExchangeRoleAccessが初期権限として付いている。

後片付け

不要なものを削除しておく。

$ rm -rf ~/.aws          # AWS CLI
$ rm -f ~/.bash_history  # コマンド履歴
$ rm -f /tmp/greengrass-nucleus-latest.zip   # greengrass一時ファイル
$ rm -rf /tmp/GreengrassCore                 # 同上

セットアップ時に使用したユーザは不要なので停止しておく。
[IAM > ユーザー > <該当ユーザ>]のページの「認証情報」タブを開き、「アクセスキー」のステータスから「無効」を選択。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?