AWS Management Console を使用したローカルリソースアクセスを設定する方法 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は、2023 年 6 月 30 日に延長ライフサイクルフェーズに入りました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日付を過ぎる AWS IoT Greengrass V1 と、 は機能、機能強化、バグ修正、セキュリティパッチを提供する更新プログラムをリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行する AWS IoT Greengrass Version 2ことを強くお勧めします。これにより、重要な新機能が追加され、追加のプラットフォームのサポートが追加されます

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Management Console を使用したローカルリソースアクセスを設定する方法

この機能は AWS IoT Greengrass Core v1.3 以降で使用できます。

ホストの Greengrass コアデバイス上のローカルリソースに安全にアクセスするように Lambda 関数を設定することができます。ローカルリソースとは、物理的にホスト上にあるバスや周辺機器、またはホスト OS 上のファイルシステムボリュームを指します。要件と制約を含む詳細については、「Lambda 関数とコネクタを使用してローカルリソースにアクセスする」を参照してください。

このチュートリアルでは、AWS Management Console を使用して、AWS IoT Greengrass コアデバイスに存在するローカルリソースへのアクセスを設定する方法について説明します。これには、次のような手順が含まれています。

AWS Command Line Interface を使用するチュートリアルについては、「AWS コマンドラインインターフェイスを使用してローカルリソースアクセスを設定する方法」を参照してください。

前提条件

このチュートリアルを完了するには、以下が必要です。

  • Greengrass グループと Greengrass コア (v1.3 以降)。Greengrass グループまたはコアを作成するには、「AWS IoT Greengrass の開始方法」を参照してください。

  • Greengrass コアデバイス上にある以下のディレクトリでは、次のとおりです。

    • /src/LRAtest

    • /dest/LRAtest

    これらのディレクトリの所有者グループは、そのディレクトリへの読み取りと書き込みアクセスが許可されている必要があります。例えば、次のコマンドを使用して、以下のアクセスを許可することができます。

    sudo chmod 0775 /src/LRAtest

ステップ 1: Lambda 関数デプロイパッケージを作成する

このステップでは、Lambda 関数のデプロイパッケージを作成します。これは、関数のコードと依存関係を含む ZIP ファイルです。また、AWS IoT Greengrass コア SDK をダウンロードして、依存関係としてパッケージに含めます。

  1. コンピュータで、以下の Python スクリプトを lraTest.py という名前のローカルファイルにコピーします。これは、Lambda 関数のアプリケーションロジックです。

    # Demonstrates a simple use case of local resource access. # This Lambda function writes a file test to a volume mounted inside # the Lambda environment under destLRAtest. Then it reads the file and # publishes the content to the AWS IoT LRAtest topic. import sys import greengrasssdk import platform import os import logging # Setup logging to stdout logger = logging.getLogger(__name__) logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) # Create a Greengrass Core SDK client. client = greengrasssdk.client('iot-data') volumePath = '/dest/LRAtest' def function_handler(event, context): try: client.publish(topic='LRA/test', payload='Sent from AWS IoT Greengrass Core.') volumeInfo = os.stat(volumePath) client.publish(topic='LRA/test', payload=str(volumeInfo)) with open(volumePath + '/test', 'a') as output: output.write('Successfully write to a file.') with open(volumePath + '/test', 'r') as myfile: data = myfile.read() client.publish(topic='LRA/test', payload=data) except Exception as e: logger.error('Failed to publish message: ' + repr(e)) return
  2. AWS IoT Greengrass Core SDK のダウンロードページから、AWS IoT Greengrass Core SDK for Python をお使いのコンピュータにダウンロードします。

  3. ダウンロードしたパッケージを解凍し、SDK を取得します。SDK は greengrasssdk フォルダです。

  4. 以下の項目を lraTestLambda.zip という名前のファイルに圧縮します。

    • lraTest.py。アプリケーションロジック。

    • greengrasssdk。すべての Python Lambda 関数に必要なライブラリ。

    lraTestLambda.zip ファイルは Lambda 関数デプロイパッケージです。これで、Lambda 関数を作成して、デプロイパッケージをアップロードする準備ができました。

ステップ 2: Lambda 関数を作成して発行する

このステップでは、AWS Lambda コンソールを使用して Lambda 関数を作成し、デプロイパッケージを使用するようにその関数を設定します。次に、関数のバージョンを公開し、エイリアスを作成します。

最初に Lambda 関数を作成します。

  1. AWS Management Console で、[サービス] を選択し、AWS Lambda コンソールを開きます。

  2. 関数を選択します。

  3. [Create function] (関数の作成) を選択し、[Author from scratch] (一から作成) を選択します。

  4. [Basic information] セクションで、以下の値を指定します。

    1. [Function name] (関数名) に TestLRA と入力します。

    2. [Runtime (ランタイム)] で [Python 3.7] を選択します。

    3. [Permissions] (アクセス許可) はデフォルト設定のままにしておきます。これで Lambda への基本的なアクセス許可を付与する実行ロールが作成されます。このロールは、AWS IoT Greengrass によっては使用されません。

  5. [Create function] (関数の作成) を選択します。

    
      [関数の作成] ページで [関数の作成] が強調表示されます。

     

  6. Lambda 関数デプロイパッケージをアップロードし、ハンドラを登録します。

    1. [Code] (コード) タブの [Code source] (コードソース) で、[Upload from] (アップロード元) を選択します。ドロップダウンから [.zip file] (.zip ファイル) を選択します。

      
                [.zip file] (.zip ファイル) が強調表示された [Upload from] (アップロード元) ドロップダウンリスト。
    2. [Upload] (アップロード) を選択し、lraTestLambda.zip デプロイパッケージを選択します。次に、保存を選択します。

    3. 関数の [Code] (コード) タブにある [Runtime settings] (ランタイム設定) で [Edit] (編集) を選択し、次の値を入力します。

      • [Runtime (ランタイム)] で [Python 3.7] を選択します。

      • [ハンドラ] で、[lraTest.function_handler] と入力します。

    4. [Save] を選択します。

      注記

      AWS Lambda コンソールの [Test] (テスト) ボタンは、この関数では機能しません。AWS IoT Greengrass Core SDK には、AWS Lambda コンソールで Greengrass Lambda 関数を個別に実行するために必要なモジュールは含まれていません。これらのモジュール (例えば greengrass_common) が関数に提供されるのは、Greengrass Core にデプロイされた後になります。

    次に、Lambda 関数の最初のバージョンを発行します。次に、バージョンのエイリアスを作成します。

    Greengrass グループは、Lambda 関数をエイリアス別 (推奨) またはバージョン別に参照できます。エイリアスを使用すると、関数コードを更新する時にサブスクリプションテーブルやグループ定義を変更する必要がないため、コード更新を簡単に管理できます。その代わりに、新しい関数バージョンにエイリアスを指定するだけで済みます。

  7. [アクション] メニューから、[新しいバージョンを発行] を選択します。

  8. [バージョンの説明] に「First version」と入力し、[発行] を選択します。

  9. [TestLRA:1] 設定ページで、[Actions] から、[Create alias] を選択します。

  10. [エイリアスの作成] ページの [名前] に、「test」と入力します。[バージョン] に、[1] と選択します。

    注記

    AWS IoT Greengrass は、$LATEST バージョンの Lambda エイリアスをサポートしていません。

  11. [Create] を選択します。

    
      [Create a new alias (新しいエイリアスの作成)] ページで [作成] が強調表示されています。

    Greengrass グループに Lambda 関数を追加できるようになりました。

ステップ 3: Lambda 関数を Greengrass グループに追加する

このステップでは、この関数をグループに追加し、その関数のライフサイクルを設定します。

まず、Greengrass グループに Lambda 関数を追加します。

  1. AWS IoT コンソールのナビゲーションペインの [Manage] (管理) で、[Greengrass devices] (Greengrass デバイス) を展開して、[Groups (V1)](グループ (V1)) を選択します。

  2. Lambda 関数を追加する Greengrass グループを選択します。

  3. グループ設定ページで、[Lambda functions] (Lambda 関数) タブを選択します。

  4. [My Lambda functions] (自分の Lambda 関数) セクションで、 [Add] (追加) を選択します。

  5. [Add Lambda function] (Lambda 関数の追加) ページで、 [Lambda function](Lambda 関数)を選択します。TestLRA を選択します。

  6. [Lambda 関数のバージョン] を選択します。

  7. [Lambda function configuration] (Lambda 関数の設定) セクションで、[System user and group] (システムユーザーとグループ)、[Lambda function containerization] (Lambda 関数のコンテナ化) の順に選択します。

     

    次に、Lambda 関数のライフサイクルを設定します。

  8. [タイムアウト] で、[30 秒] を選択します。

    重要

    この手順で説明されているように、ローカルリソースを使用する Lambda 関数は、Greengrass コンテナ内で実行する必要があります。それ以外の場合は、関数をデプロイしようとすると、デプロイが失敗します。詳細については、「コンテナ化」を参照してください。

  9. ページの下部で、[Add Lambda function] (Lambda 関数の追加) を選択します。

ステップ 4: Greengrass グループにローカルリソースを追加する

このステップでは、Greengrass グループにローカルボリュームリソースを追加し、リソースへの読み取りと書き込みアクセスを許可します。ローカルリソースにはグループレベルのスコープがあります。グループ内の任意の Lambda 関数に、リソースにアクセスするためのアクセス権限を付与できます。

  1. グループ設定ページで、[Resources] (リソース) タブを選択します。

  2. [Local resources] (ローカルリソース) セクションから [Add] (追加)を選択します。

  3. [Add a local resource] (ローカルリソースの追加) ページで、次の値を使用します。

    1. [リソース名] に testDirectory と入力します。

    2. [リソースタイプ] で、[ボリューム] を選択します。

    3. [Local device path] (ローカルデバイスパス) には、「/src/LRAtest」と入力します。このパスはホスト OS 上に存在している必要があります。

      ローカルデバイスは、コアデバイスのファイルシステム上のリソースのローカル絶対パスです。この場所は、関数が実行されるコンテナの外側です。このパスの先頭を /sys にすることはできません。

    4. [送信先] に「/dest/LRAtest」と入力します。このパスはホスト OS 上に存在している必要があります。

      送信先パスは、Lambda 名前空間にあるリソースの絶対パスです。この場所は、関数が実行されるコンテナの内側です。

    5. [System group owner and file access permission] (システムグループ所有者のファイルアクセス許可) で、[Automatically add file system permissions of the system group that owns the resource] (リソースを所有する システムグループのファイルシステム権限を自動的に追加する) を選択します。

      [System group owner and file access permission] (システムグループ所有者のファイルアクセス権限) オプションを使用すると、Lambda プロセスに追加のファイルアクセス権限をグラントできます。詳細については、「グループ所有者のファイルアクセス権限」を参照してください。

  4. [Add resource] (リソースを追加) を選択します。[リソース] ページで、新しい testDirectory リソースが表示されます。

ステップ 5: サブスクリプションを Greengrass グループに追加する

このステップでは、2 つのサブスクリプションを Greengrass グループに追加します。これらのサブスクリプションにより、Lambda 関数と AWS IoT 間の双方向通信が可能になります。

まず、AWS IoT にメッセージを送信する Lambda 関数のサブスクリプションを作成します。

  1. グループ設定ページで、[Subscriptions] (サブスクリプション) タブを選択します。

  2. [Add] (追加) を選択します。

  3. [Create a subscription] (サブスクリプションの作成) ページで、ソースおよびターゲットを次のように設定します。

    1. [Source type] (ソースタイプ) で、[Lambda function] (Lambda 関数)、[TestLRA] の順に選択します。

    2. [Target type] (ターゲットタイプ)で、[Service] (サービス)、[IoT Cloud] (IoT クラウド) の順に選択します。

    3. [Topic filter] (トピックのフィルター) で、LRA/test と入力し、 [Create subscription] (サブスクリプションの作成) を選択します。

  4. [Subscriptions] ページに新しいサブスクリプションが表示されます。

     

    次に、AWS IoT から関数を呼び出すサブスクリプションを設定します。

  5. [Subscriptions] ページで [Add Subscription] を選択します。

  6. [ソースとターゲットの選択] ページで、ソースおよびターゲットを次のように設定します。

    1. [Source type] (ソースタイプ) で、[Lambda function] (Lambda 関数)、[IoT Cloud] (IoT クラウド) の順に選択します。

    2. [Target type] (ターゲットタイプ) で、[Service] (サービス)、[TestLRA]の順に選択します。

    3. [Next] を選択します。

  7. [トピックでデータをフィルタリングする] ページの [トピックフィルター] に「invoke/LRAFunction」と入力し、[Next (次へ)] を選択します。

  8. [Finish] (終了) を選択します。[Subscriptions] ページに両方のサブスクリプションが表示されます。

ステップ 6: AWS IoT Greengrass グループをデプロイする

このステップでは、グループ定義の現在のバージョンをデプロイします。

  1. AWS IoT Greengrass Core が実行されていることを確認します。必要に応じて、Raspberry Pi のターミナルで以下のコマンドを実行します。

    1. デーモンが実行中であるかどうかを確認するには

      ps aux | grep -E 'greengrass.*daemon'

      出力に root/greengrass/ggc/packages/1.11.6/bin/daemon エントリが含まれる場合、デーモンは実行されています。

      注記

      パスのバージョンは、コアデバイスにインストールされている AWS IoT Greengrass Core ソフトウェアのバージョンによって異なります。

    2. 次のようにしてデーモンを開始します。

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. グループ設定ページで、[Deploy] (デプロイ) を選択します。

    注記

    コンテナ化を使用せずに Lambda 関数を実行し、アタッチ済みのローカルリソースにアクセスしようとすると、デプロイは失敗します。

  3. プロンプトが表示されたら、[Lambda function] (Lambda 関数) タブの [System Lambda functions] (システム Lambda 関数) から、[IP detector] (IP ディテクター)、[Edit] (編集)、[Automatically detect] (自動的に検出) の順に選択します。

    これにより、デバイスは、IP アドレス、DNS、ポート番号など、コアの接続情報を自動的に取得できます。自動検出が推奨されますが、AWS IoT Greengrass は手動で指定されたエンドポイントもサポートしています。グループが初めてデプロイされたときにのみ、検出方法の確認が求められます。

    注記

    プロンプトが表示されたら、Greengrass サービスロールの作成権限を付与し、そのロールを現在の AWS リージョン の AWS アカウント に関連付けます。このロールを付与することで、AWS IoT Greengrass は AWS サービスのリソースにアクセスできます。

    [Deployments] ページでは、デプロイのタイムスタンプ、バージョン ID、ステータスが表示されます。完了すると、デプロイステータスは、[Completed] (完了) になります。

    トラブルシューティングヘルプについては、AWS IoT Greengrass のトラブルシューティング を参照してください。

ローカルリソースアクセスのテスト

これで、ローカルリソースアクセスが正しく設定されているかどうかを確認できます。テストするには、LRA/test トピックにサブスクライブし、invoke/LRAFunction トピックに発行します。Lambda 関数が AWS IoT に予想されるペイロードを送信する場合、テストは成功です。

  1. [AWS IoT console] (- コンソール) ナビゲーションメニューから、[Test] (テスト) で、 [MQTT test client] (MQTT テストクライアント) を選択します。

  2. [Subscribe to a topic] (トピックへのサブスクライブ) で、[Topic filter] (トピックのフィルター) に、LRA/testと入力します。

  3. [Additional information] (追加情報) から、[MQTT payload display] (MQTT ペイロード表示) で、[Display payloads as strings] (文字列としてペイロードを表示) を選択します。

  4. [Subscribe] (サブスクライブ) を選択します。Lambda 関数は LRA/test トピックに発行します。

    
      [サブスクリプション] ページで [トピックへのサブスクライブ] が強調表示されています。
  5. [Publish to a topic] (トピックに発行) から、[Topic name] (トピック名) で、invoke/LRAFunctionと入力し、[Publish] (発行) を選択して、Lambda 関数を呼び出します。ページに関数の 3 つのメッセージペイロードが表示されている場合、テストは成功です。

    
      [サブスクリプション] ページで、[invoke/LRAFunction] トピックと [トピックに発行] が強調表示され、メッセージデータと共にテスト結果が表示されています。

Lambda 関数によって作成されたテストファイルは、Greengrass コアデバイスの /src/LRAtest ディレクトリにあります。Lambda 関数によって、/dest/LRAtest ディレクトリのファイルに書き込まれ、そのファイルは Lambda 名前空間でのみ表示されます。通常の Linux 名前空間には表示されません。送信先パスの変更は、ファイルシステムのソースパスに反映されます。

トラブルシューティングヘルプについては、AWS IoT Greengrass のトラブルシューティング を参照してください。