AWS IoT FleetWiseのEdge AgentをGreengrass V2コンポーネントとしてデプロイしてみた
大阪オフィスの小倉です。
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
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
がデプロイされています。
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.json
とaws-iot-fleetwise-edge
を aws 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"
}
]
}
5-2-3. コンポーネントの作成
例示されているJSONファイルを一部編集し、コンポーネントを作成します
ComponentVersion
を1.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"
}
}
]
}
]
}
コンポーネントが作成できたら、そのままデプロイを行うと、デバイス(EC2)にFleetWiseのコンポーネントがデプロイされます。
6.デモの実行
Use the AWS IoT FleetWise demo に従ってデモスクリプトを実行します。
デモスクリプトの--vehicle-name
の値は、Greengrass Core導入時に指定したモノの名前と一致させてください。
今回も以下のようなHTMLが生成されれば成功です。
まとめ
FeetWise Edge AgentをGreengrass V2経由でインストールしてみました。
Greengrass Coreの導入要件を満たす必要はありますが、AWS IoTとの接続部分をGreenGrassに任せることができ、
またクラウドから複数デバイスへの配布も可能な選択肢です。
GreengrassやFleetWiseに興味があれば試していただければと思います。