Lambda 関数とコネクタを使ってローカルリソースにアクセスする - AWS IoT Greengrass

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

Lambda 関数とコネクタを使ってローカルリソースにアクセスする

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

AWS IoT Greengrass では、AWS Lambda 関数を作成して、クラウドにコネクタを設定し、ローカル実行できるようにコアデバイスにデプロイします。Linux を実行する Greengrass Core で、これらのローカルにデプロイされた Lambda 関数およびコネクタは、Greengrass Core デバイスに物理的に存在するローカルリソースにアクセスできます。たとえば、Modbus または CANbus を介して接続されているデバイスと通信するには、Lambda 関数を有効にして、コアデバイスのシリアルポートにアクセスします。ローカルリソースへの安全なアクセスを設定するには、物理的なハードウェアおよび Greengrass コアデバイス OS のセキュリティを保証する必要があります。

ローカルリソースへのアクセスを開始するには、次のチュートリアルを参照してください。

サポートされているリソースタイプ

ボリュームリソースとデバイスリソースの 2 種類のローカルリソースにアクセスできます。

ボリュームリソース

ルートファイルシステム上のファイルまたはディレクトリ (/sys/dev または /var を除く)。具体的には次のとおりです。

  • Greengrass Lambda 関数 (たとえば、/usr/lib/python2.x/site-packages/local) を介して情報を読み書きするためのフォルダまたはファイル。

  • ホストの /proc ファイルシステムのフォルダまたはファイル (/proc/net または /proc/stat など)。v1.6 or later のみでサポートされます。追加の要件については、「/proc ディレクトリのボリュームリソース」を参照してください。

ヒント

/var/var/run、および /var/lib ディレクトリをボリュームリソースとして設定するには、最初にディレクトリを別のフォルダにマウントし、フォルダをボリュームリソースとして設定します。

ボリュームリソースを設定するときは、ソースパスと送信先パスを指定します。ソースパスはホスト上のリソースの絶対パスです。送信先パスは Lambda 名前空間環境内のリソースの絶対パスです。これは、Greengrass Lambda 関数またはコネクタが実行されるコンテナです。送信先パスの変更はホストファイルシステムのソースパスに反映されます。

注記

送信先パスのファイルは Lambda 名前空間でのみ表示されます。通常の Linux 名前空間では表示できません。

デバイスリソース

/dev の下にあるファイル。/dev の下のキャラクターデバイスまたはブロックデバイスだけがデバイスリソースに使用できます。具体的には次のとおりです。

  • シリアルポート (/dev/ttyS0/dev/ttyS1 など) を介して接続されたデバイスとの通信に使用されるシリアルポート。

  • USB 周辺機器 (/dev/ttyUSB0 または /dev/bus/usb など) を接続するために使用される USB。

  • GPIO (/dev/gpiomem など) を介してセンサーとアクチュエーターに使用される GPIO。

  • オンボード GPU (/dev/nvidia0 など) を使用して機械学習を加速するために使用される GPU。

  • 画像や動画のキャプチャに使用されるカメラ (/dev/video0 など)。

注記

/dev/shm は例外です。これは、ボリュームリソースとしてのみ設定できます。/dev/shm リソースには rw アクセス許可が付与されている必要があります。

AWS IoT Greengrass は、Machine Learning (ML) Inference の実行に使用されるリソースタイプもサポートしています。詳細については、「機械学習の推論を実行する」を参照してください。

要件

ローカルリソースへのセキュアなアクセスの設定には、以下の要件が適用されます。

  • AWS IoT Greengrass Core ソフトウェア v1.3 or later を使用していることが必要です。ホストの /proc ディレクトリにリソースを作成するには、v1.6 or later を使用する必要があります。

  • ローカルリソース (必要なドライバーとライブラリのすべてを含む) は、Greengrass コアデバイスに正しくインストールされ、使用中も常にアクセス可能であることが必要です。

  • 必要になるリソースの操作とリソースへのアクセスに root 権限は不要です。

  • read または read and write アクセス許可のみが使用可能です。Lambda 関数は、リソースに対して特別な権限が必要なオペレーションを実行することはできません。

  • Greengrass コアデバイスのオペレーティングシステム上のローカルリソースの完全パスを指定することが必要です。

  • リソース名または ID の最大長は 128 文字で、パターン [a-zA-Z0-9:_-]+ を使用する必要があります。

/proc ディレクトリのボリュームリソース

ホストの /proc ディレクトリにあるボリュームリソースには、以下の考慮事項が適用されます。

  • AWS IoT Greengrass Core ソフトウェア v1.6 or later を使用していることが必要です。

  • Lambda 関数には読み取り専用アクセスを許可できますが、読み取り/書き込みアクセスは許可できません。このレベルのアクセスは、AWS IoT Greengrass によって管理されます。

  • また、ファイルシステムに読み取りアクセスを可能にする OS グループ権限を付与することが必要になる場合があります。たとえば、リソースディレクトリあるいはファイルに 660 ファイルアクセス許可があるとします。これは、このグループの所有者あるいはユーザーのみに読み取り (あるいは書き込み) アクセスがあることを意味します。この場合、このリソースに OS グループ所有者の権限を追加する必要があります。詳細については、「グループ所有者のファイルアクセス権限」を参照してください。

  • ホスト環境および Lambda 名前空間には、その両方に /proc ディレクトリがあるため、配置先パスを指定するときに名前の競合を回避するように注意します。たとえば、/proc がソースパスの場合、/host-proc を配置先パスとして指定できます (または、「/proc」を除く任意のパス名)。

グループ所有者のファイルアクセス権限

AWS IoT Greengrass Lambda 関数プロセスは通常、ggc_userggc_group として実行されます。ただし、次のように、ローカルリソース定義の Lambda 関数プロセスに追加のファイルアクセス許可を与えることができます。

  • リソースを所有する Linux グループのアクセス権限を追加するには、GroupOwnerSetting#AutoAddGroupOwner パラメータまたは [Automatically add OS group permissions of the Linux group that owns the resource] (リソースを所有する Linux グループのアクセス権限を OS グループに自動的に追加) コンソールオプションを使用します。

  • 別の Linux グループのアクセス権限を追加するには、GroupOwnerSetting#GroupOwner パラメータまたは [Specify another OS group to add permission] (アクセス権限を追加する別の OS グループを指定) コンソールオプションを使用します。GroupOwnerSetting#AutoAddGroupOwner が true の場合、GroupOwner 値は無視されます。

AWS IoT Greengrass Lambda 関数プロセスは、ggc_userggc_group および Linux グループ (追加されている場合) のすべてのファイルシステムアクセス許可を継承します。Lambda 関数がリソースにアクセスするためには、このリソースに要求されるアクセス許可が Lambda 関数プロセスにあることが必要です。必要に応じて、chmod(1) コマンドを使用して、リソースへのアクセス許可を変更できます。

以下の資料も参照してください。