Howto

Armadillo-IoT G4 から AWS IoT Greengrassストリームマネージャーを用いた Amazon S3 へのファイル送信方法

本 Howto では Amazon S3 へのデータ送信のために、Armadillo-IoT G4 に AWS IoT Greengrass Core がインストールされており、カスタムコンポーネントのデプロイ方法を習得している必要があります。Armadillo-IoT G4 での AWS IoT Greengrass V2 の自動プロビジョニング方法とカスタムコンポーネントのデプロイについては、Armadillo-IoT G4 で AWS IoT Greengrass V2 を使用する方法をご確認ください。

Armadillo-IoT G4 から AWS IoT Greengrassストリームマネージャーを用いた Amazon S3 へのファイル送信方法について説明します。AWS IoT Greengrassストリームマネージャーを用いた Amazon S3 へのファイル送信のためには、Armadillo-IoT G4 に AWS IoT Greengrass Core がインストールされており、またカスタムコンポーネントのデプロイ方法を習得している必要があります。そのため今回は Howto: Armadillo-IoT G4 で AWS IoT Greengrass V2 を使用する方法 を終えている環境を使用します。

本 Howto の構成は以下です。

システム構成

以下にシステム構成図を示します。

Armadillo-IoT G4 では Podman を使用して AWS IoT Greengrass Core をインストールするコンテナを作成します。作成したコンテナ上で AWS IoT Greengrass Core を動かします。カスタムコンポーネントで Stream Manager Client を使用し、AWS IoT Greengrassストリームマネージャーを経由して Amazon S3 にファイルを送信します。

AWS IoT Greengrassストリームマネージャーとは

AWS IoT Greengrass が提供するパブリックコンポーネントの一つです。AWS IoT Greengrassストリームマネージャーを使用すると、大量のIoTデータを AWS クラウドに転送する際の効率と信頼性が向上します。ストリームマネージャーは、AWS クラウドにエクスポートする前に AWS IoT Greengrass Core でデータストリームを処理します。 Stream Managerは、機械学習(ML)推論などの一般的なエッジシナリオと統合されます。詳細はAWS IoT Greengrass Core でデータストリームを管理するをご覧ください。

Armadillo-IoT G4 から AWS IoT Greengrassストリームマネージャーを用いた Amazon S3 へのファイル送信

設定手順についてはこちらのストリームマネージャを使用するカスタムコンポーネントを作成するを参考にしています。また、AWS IoT SiteWise へのデータの取り込み方法については Howto: Armadillo-IoT G4 から AWS IoT Greengrassストリームマネージャーを用いた AWS IoT SiteWise へのデータの取り込み方法 をご覧ください。

AWS IoT Greengrassストリームマネージャーを使用するカスタムコンポーネントの作成とデプロイ

Armadillo-IoT G4 のコンテナ上で動作するカスタムコンポーネントを作成します。今回は Howto: Armadillo-IoT G4 で AWS IoT Greengrass V2 を使用する方法 で設定した、コンテナ名 "my_container" 上で動作するカスタムコンポーネントになります。カスタムコンポーネントには Python 用のストリームマネージャー SDK を含める必要があります。

1. Amazon S3 へのファイルアップロード用 IAM ポリシーの追加

最初に Amazon S3 にファイルをアップロードするため、 IAM ポリシーに "s3:PutObject" を追加します。以下は IAM ポリシーの json 記載例です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::greengrass-component-artifacts-123456789012-region/*"
        }
    ]
}

追加されていることを確認して IAM ポリシーを保存します。

2. Armadillo-IoT G4 のコンテナに必要なパッケージのインストール

コンテナに必要なパッケージをインストールします。"my_container" 内で以下のコマンドを実行してください。

[container ~]# pip install greengrasssdk

3. カスタムコンポーネントの作成とデプロイ

以下のコンポーネントを作成します。

  • コンポーネント名: "com.example.StreamManagerS3Python"
  • バージョン: "1.0.0"

4. Amazon S3 へのアーティファクトのアップロード

アーティファクトには以下の三つのファイルを含める必要があります。

  • Python 用のストリームマネージャー SDK の zip アーカイブ:
    stream_manager_sdk.zip
  • Python 用のストリームマネージャー SDK が必要とするパッケージのリスト:
    requirements.txt
  • ストリームマネージャーを使用するアプリケーション:
    stream_manager_s3.py

上記ファイルの用意のためにこちらのAWS Greengrass Stream Manager SDK for Pythonを開発用 PC にダウンロード・解凍します。解凍したフォルダ直下の以下のファイルを使用します。

  • Python 用のストリームマネージャー SDK の zip アーカイブ:
    直下にある stream_manager フォルダを stream_manager_sdk.zip に圧縮します。

  • Python 用のストリームマネージャー SDK が必要とするパッケージのリスト:
    直下にある requirements.txt ファイルになります。

  • ストリームマネージャーを使用するアプリケーション:
    直下にある samples フォルダ内の stream_manager_s3.py を編集して使用します。このアプリケーションは指定したファイルを Amazon S3 に送信するサンプルプログラムになります。今回は送信用のテストファイルとして "my_container" に "/home/test.txt" を作成します。適当なテキストを打ってファイルを保存します。

[container ~]# apt-get install vim
[container ~]# vi /home/test.txt
[container ~]# cat /home/test.txt
Upload test.

38行目付近にある "bucket_name" の値を使用している S3 バケット名に置き換えてください。また、40行目付近にある "file_url" を送信するファイル名に置き換えます。送信したファイルは 39行目付近にある "key_name" として S3 バケットに保存されます。アプリケーションの内容についての詳細は ストリームを操作するために StreamManagerClient を使用する をご覧ください。以下は今回の設定例です。

        bucket_name = "<S3 バケット名>"
        key_name = "SomeKey"
        file_url = "/home/test.txt"

上記で用意した三つのファイルを S3 バケットに配置します。

5. AWS IoT Greengrass にコンポーネント作成

以下の json 記述のレシピを用いてコンポーネントを作成します。<S3バケット名> は使用している名前に置き換えてください。

{
  "RecipeFormatVersion": "2020-01-25",
  "ComponentName": "com.example.StreamManagerS3Python",
  "ComponentVersion": "1.0.0",
  "ComponentDescription": "Uses stream manager to upload a file to an S3 bucket.",
  "ComponentPublisher": "Amazon",
  "ComponentDependencies": {
    "aws.greengrass.StreamManager": {
      "VersionRequirement": "^2.0.0" 
    }
  },
  "Manifests": [
    {
      "Platform": {
        "os": "linux" 
      },
      "Lifecycle": {
        "Install": "pip3 install --user -r {artifacts:path}/requirements.txt",
        "Run": "export PYTHONPATH=$PYTHONPATH:{artifacts:decompressedPath}/stream_manager_sdk; python3 {artifacts:path}/stream_manager_s3.py" 
      },
    "Artifacts": [
            {
                  "URI": "s3://<S3 バケット名>/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_sdk.zip",
            "Unarchive": "ZIP" 
               },
            {
                  "URI": "s3://<S3 バケット名>/artifacts/com.example.StreamManagerS3Python/1.0.0/stream_manager_s3.py" 
            },
            {
                  "URI": "s3://<S3 バケット名>/artifacts/com.example.StreamManagerS3Python/1.0.0/requirements.txt" 
            }
      ]
    }
  ]
}

コンポーネントが作成されたら、"my_container" で AWS IoT Greengrass Core が動作していることを確認したうえで、コンポーネントをデプロイしてください。

6. Amazon S3 でのデータ確認

指定した S3 バケット内に "key_name" で指定したファイルが増えていることを確認します。また、ファイルを開くと "/home/test.txt" に記載した内容と同じになっていることを確認できます。ファイルが増えていない場合は設定手順を再度確認してください。

以上で Armadillo-IoT G4 から AWS IoT Greengrassストリームマネージャーを用いた Amazon S3 へのファイル送信方法についての説明を終了します。