AWS IoT FleetWiseのEdge AgentをGreengrass V2コンポーネントとしてデプロイしてみた

AWS IoT FleetWiseのEdge AgentをGreengrass V2コンポーネントとしてデプロイしてみた

Clock Icon2025.05.08

大阪オフィスの小倉です。

FleetWise Edge AgentをAWS IoT Greengrass V2のコンポーネントとしてデプロイする方法が記載されていたので試してみました。

デプロイされたエージェントを使い、前回記事同様にキャンペーンによるデータ収集デモを動作させるまでを行いました。

準備

今回実施する内容は以下です。

FWE with AWS IoT Greengrass V2 IPC

手順に記載されている開発マシン(EC2)上でGreengrassV2とFleetWise Edge Agentを動かします。

使用するもの

ソフトウェア バージョン
EC2 ubuntu-jammy-22.04-arm64-server-20250425
Java OpenJDK 11
Greengrass Cli 2.14.3
aws-iot-fleetwise-edge 1.3.1

1.開発マシン(EC2)の準備

ドキュメントからリンクされているCloudFormationテンプレートを起動し、EC2を作成します。
その後、EC2内にFleetWise Edge Agentの最新コードを取得しておきます。

FleetWise Edge Agentのバイナリは、今回ビルド済みのものを使用しました

cd ~/aws-iot-fleetwise-edge \
&& mkdir -p build \
&& curl -L -o build/aws-iot-fleetwise-edge.tar.gz \
    https://github.com/aws/aws-iot-fleetwise-edge/releases/latest/download/aws-iot-fleetwise-edge-arm64.tar.gz  \
&& tar -zxf build/aws-iot-fleetwise-edge.tar.gz -C build aws-iot-fleetwise-edge

https://github.com/aws/aws-iot-fleetwise-edge/tree/main/tools/greengrassV2#download-or-build-the-fwe-binary

2.Greengrass Coreのインストール

ドキュメントに従って、JavaとGreengrass V2 Coreをインストールします。
インストール時に指定するモノの名前はggv2core-fwe、グループの名前はggv2core-fwe-groupとしました。

sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
  -jar ./GreengrassInstaller/lib/Greengrass.jar \
  --aws-region us-east-1 \
  --thing-name ggv2core-fwe \
  --thing-group-name ggv2core-fwe-group \
  --thing-policy-name GreengrassV2IoTThingPolicy \
  --tes-role-name GreengrassV2TokenExchangeRole \
  --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \
  --component-default-user ggc_user:ggc_group \
  --provision true \
  --setup-system-service true \
  --deploy-dev-tools true

3.FleetWise Edgeの設定ファイル作成

ドキュメントに従って設定ファイルを作成します。

--vehicle-nameの値は、Greengrass Core導入時に指定したモノの名前と一致させておきます。

cd ~/aws-iot-fleetwise-edge \
&& mkdir -p tools/greengrassV2/artifacts/com.amazon.aws.IoTFleetWise/1.0.0 \
&& ./tools/configure-fwe.sh \
    --input-config-file ./configuration/static-config.json \
    --output-config-file tools/greengrassV2/artifacts/com.amazon.aws.IoTFleetWise/1.0.0/config-0.json \
    --connection-type iotGreengrassV2 \
    --vehicle-name ggv2core-fwe \
    --can-bus0 vcan0

4.仮想CANインターフェースの作成

FleetWise Edge Agentデプロイ前に、仮想CANインターフェースを作成しておきます。
CANインターフェースがない状態だとFleetWise Edge Agentが起動に失敗するためです。

sudo modprobe vcan を実行するために、今回使用したEC2環境では以下が必要なようでした。

sudo apt install -y linux-modules-extra-aws

インストール後、以下のコマンドで仮想CANインターフェースを作成、アクティブ化します。

sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0

準備ができたら、以下コマンドを実行することで、データ生成が開始されます。
データ生成を動かし続けたいので、以降の作業は別のターミナルを使用してください。

cd ~/aws-iot-fleetwise-deploy/tools/cansim
python3 cansim.py -i vcan0

camsim.py実行時に、私の環境ではModuleNotFoundError: No module named 'isotp'エラーが発生したため、
追加でpip3 install can-isotpとすることで、正常に動作しました。

5.デプロイ

FleetWise Edge Agentをデプロイします。ローカルとクラウドからの2つの方法がありますが、どちらでも構いません。

ドキュメントに記載はありませんが、デプロイ時にエラーとなったため、 事前に以下のディレクトリ作成とアクセス権限変更をしておきます。

sudo mkdir -p /var/aws-iot-fleetwise/FWE_Persistency/
sudo chown -R ggc_user:ggc_group /var/aws-iot-fleetwise/

5-1.ローカルデプロイ

こちらはドキュメント通りにコマンドを実行するだけでOKです。
成功するとcom.amazon.aws.IoTFleetWiseがデプロイされています。

vscode-drop-1746675212756-pyasq38ei7p.png

5-2.クラウドからデプロイ

recipes/com.amazon.aws.IoTFleetWise-2.0.0.jsonを参考にしながら、Greengrassのコンポーネントを作成します。

5-2-1. S3への配置

FleetWise Edge AgentのConfigとバイナリをS3バケットに配置します。事前にS3バケットを作成しておきます。

配置するファイルは、
~/aws-iot-fleetwise-edge/tools/greengrassV2/artifacts/com.amazon.aws.IoTFleetWise/1.0.0/配下にあるので、
JSONファイルに記載されている階層へ、 config-0.jsonaws-iot-fleetwise-edgeaws s3 cpコマンド等でコピーします。

5-2-2. ポリシーの作成とアタッチ

作成したS3バケットにアクセスできるよう、GreengrassV2TokenExchangeRoleAccessロールにポリシーを追加でアタッチします。

以下のポリシーを追加しておきます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::<S3_BUCKET_NAME>/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::<S3_BUCKET_NAME>",
            "Effect": "Allow"
        }
    ]
}

https://dev.classmethod.jp/articles/greengrass-v2-component-depploy/#(2)%2520S3%25E3%2583%2590%25E3%2582%25B1%25E3%2583%2583%25E3%2583%2588%25E3%2581%25B8%25E3%2581%25AE%25E3%2582%25A2%25E3%2582%25AF%25E3%2582%25BB%25E3%2582%25B9%25E6%25A8%25A9

5-2-3. コンポーネントの作成

例示されているJSONファイルを一部編集し、コンポーネントを作成します

  • ComponentVersion1.0.0に変更
  • Artifacts中のS3バケット名を、作成したバケット名に変更
{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.amazon.aws.IoTFleetWise",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "Reference Implementation for AWS IoT FleetWise",
  "ComponentPublisher": "Amazon",
  "ComponentConfiguration": {
    "DefaultConfiguration": {
      "Message": "world",
      "accessControl": {
        "aws.greengrass.ipc.mqttproxy": {
          "com.amazon.aws.IoTFleetWise:mqttproxy:1": {
            "policyDescription": "Allows access to publish/subscribe to all topics.",
            "operations": ["aws.greengrass#PublishToIoTCore", "aws.greengrass#SubscribeToIoTCore"],
            "resources": ["*"]
          }
        }
      }
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux"
      },
      "Lifecycle": {
        "Run": "{artifacts:path}/aws-iot-fleetwise-edge {artifacts:path}/config-0.json",
        "SetEnv": {
          "RMW_IMPLEMENTATION": "rmw_cyclonedds_cpp"
        },
        "RequiresPrivilege": "true"
      },
      "Artifacts": [
        {
          "Uri": "s3://<S3_BUCKET_NAME>/com.amazon.aws.IoTFleetWise/1.0.0/aws-iot-fleetwise-edge",
          "Permission": {
            "Read": "ALL",
            "Execute": "ALL"
          }
        },
        {
          "Uri": "s3://<S3_BUCKET_NAME>/com.amazon.aws.IoTFleetWise/1.0.0/config-0.json",
          "Permission": {
            "Read": "ALL",
            "Execute": "ALL"
          }
        }
      ]
    }
  ]
}

vscode-drop-1746675248848-s856ij2pzoi.png

コンポーネントが作成できたら、そのままデプロイを行うと、デバイス(EC2)にFleetWiseのコンポーネントがデプロイされます。
vscode-drop-1746675258895-gws3jdj0wrp.png
vscode-drop-1746675268459-fz95ng28on6.png

6.デモの実行

Use the AWS IoT FleetWise demo に従ってデモスクリプトを実行します。

デモスクリプトの--vehicle-nameの値は、Greengrass Core導入時に指定したモノの名前と一致させてください。

今回も以下のようなHTMLが生成されれば成功です。

vscode-drop-1746675278539-riii5hyz9hm.png

まとめ

FeetWise Edge AgentをGreengrass V2経由でインストールしてみました。

Greengrass Coreの導入要件を満たす必要はありますが、AWS IoTとの接続部分をGreenGrassに任せることができ、
またクラウドから複数デバイスへの配布も可能な選択肢です。
GreengrassやFleetWiseに興味があれば試していただければと思います。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.