

サポート終了通知: 2026 年 10 月 7 日、 AWS はサポートを終了します AWS IoT Greengrass Version 1。2026 年 10 月 7 日以降、 AWS IoT Greengrass V1 リソースにアクセスできなくなります。詳細については、[「 からの移行 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)」を参照してください。

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

# Lambda 関数から機械学習リソースにアクセスする
<a name="access-ml-resources"></a>

ユーザー定義の Lambda 関数は、機械学習リソースにアクセスして、 AWS IoT Greengrass コアでローカル推論を実行できます。機械学習リソースは、トレーニングを受けたモデルと、コアデバイスにダウンロードされるその他のアーティファクトで構成されます。

Lambda 関数がコアの機械学習リソースにアクセスできるようにするには、リソースを Lambda 関数にアタッチし、アクセス権限を定義する必要があります。その際の手順は、関連付けられた (またはアタッチされた) Lambda 関数の[コンテナ化モード](lambda-group-config.md#lambda-function-containerization)によって決まります。

## 機械学習リソースのアクセス権限
<a name="ml-resource-permissions"></a>

 AWS IoT Greengrass Core v1.10.0 以降では、機械学習リソースのリソース所有者を定義できます。リソース所有者は、 がリソースアーティファクトのダウンロード AWS IoT Greengrass に使用する OS グループとアクセス許可を表します。リソース所有者が定義されていない場合、ダウンロードされたリソースアーティファクトはルートにのみアクセスできます。
+ コンテナ化されていない Lambda 関数が機械学習リソースにアクセスする場合、コンテナからのアクセス権限制御がないため、リソースの所有者を定義する必要があります。コンテナ化されていない Lambda 関数は、リソース所有者のアクセス権限を継承し、それらを使用してリソースにアクセスできます。

   
+ コンテナ化された Lambda 関数だけがリソースにアクセスする場合は、リソース所有者を定義するのではなく、関数レベルのアクセス権限を使用することをお勧めします。

   

### リソース所有者のプロパティ
<a name="ml-resource-owner"></a>

リソース所有者は、グループ所有者とグループ所有者の権限を指定します。

  
**グループの所有者**。コアデバイス上の既存の Linux OS グループのグループ ID (GID)。グループの権限が Lambda プロセスに追加されます。具体的には、Lambda 関数の補足グループ ID に GID が追加されます。  
Greengrass グループの Lambda 関数が、機械学習リソースのリソース所有者と同じ OS グループ[として実行](lambda-group-config.md#lambda-access-identity)されるように設定されている場合は、そのリソースを Lambda 関数にアタッチする必要があります。それ以外の場合、この設定により Lambda 関数が AWS IoT Greengrass 認可なしでリソースにアクセスするために使用できる暗黙的なアクセス許可が付与されるため、デプロイは失敗します。Lambda 関数がルート (UID=0) として実行されている場合、デプロイ検証チェックはスキップされます。  
Greengrass Core の他のリソース、Lambda 関数、ファイルで使用されていない OS グループを使用することをお勧めします。共有 OS グループを使用すると、アタッチされた Lambda 関数が必要以上に多くのアクセス権限を付与できます。共有 OS グループを使用する場合は、アタッチされた Lambda 関数も、その共有 OS グループを使用するすべての機械学習リソースにアタッチする必要があります。それ以外の場合、デプロイは失敗します。

  
**グループ所有者の権限**。Lambda プロセスに追加する読み取り専用権限、または読み取り/書き込み権限。  
コンテナ化されていない Lambda 関数は、リソースに対するこれらのアクセス権限を継承する必要があります。コンテナ化された Lambda 関数は、これらのリソースレベルのアクセス権限を継承するか、関数レベルのアクセス権限を定義できます。関数レベルのアクセス権限を定義する場合、アクセス権限はリソースレベルのアクセス権限と同じか、制限がより大きいものである必要があります。

次のテーブルに、サポートされているアクセス権限の設定を示します。

------
#### [ GGC v1.10 or later ]


| プロパティ | コンテナ化された Lambda 関数のみがリソースにアクセスする場合 | コンテナ化されていない Lambda 関数がリソースにアクセスする場合 | 
| --- |--- |--- |
| **関数レベルのプロパティ** | 
| --- |
| 権限 (読み取り/書き込み) |  リソースがリソース所有者を定義していない場合は必須です。リソース所有者が定義されている場合、関数レベルのアクセス権限は、リソース所有者のアクセス権限と同じか、制限がより大きいものである必要があります。 コンテナ化された Lambda 関数だけがリソースにアクセスする場合は、リソースの所有者を定義しないことをお勧めします。  |  **コンテナ化されていない Lambda 関数:** サポート外。コンテナ化されていない Lambda 関数は、リソースレベルのアクセス権限を継承する必要があります。 **コンテナ化された Lambda 関数:** オプション。ただし、リソースレベルのアクセス権限と同じか制限がより大きいものである必要があります。 | 
| **リソースレベルのプロパティ** | 
| --- |
| リソース所有者 | オプション (推奨しません)。 | 必須。 | 
| 権限 (読み取り/書き込み) | オプション (推奨しません)。 | 必須。 | 

------
#### [ GGC v1.9 or earlier ]


| プロパティ | コンテナ化された Lambda 関数のみがリソースにアクセスする場合 | コンテナ化されていない Lambda 関数がリソースにアクセスする場合 | 
| --- |--- |--- |
| **関数レベルのプロパティ** | 
| --- |
| 権限 (読み取り/書き込み) |  必須。  | サポート外。 | 
| **リソースレベルのプロパティ** | 
| --- |
| リソース所有者 | サポート外。 | サポート外。 | 
| 権限 (読み取り/書き込み) | サポート外。 | サポート外。 | 

------

**注記**  
 AWS IoT Greengrass API を使用して Lambda 関数とリソースを設定する場合、関数レベルの`ResourceId`プロパティも必要です。`ResourceId` プロパティは、機械学習リソースを Lambda 関数にアタッチします。

## Lambda 関数のアクセス権限の定義 (コンソール)
<a name="ml-resource-permissions-console"></a>

 AWS IoT コンソールでは、機械学習リソースを設定するとき、または Lambda 関数にアタッチするときにアクセス許可を定義します。

**コンテナ化された Lambda 関数**  
コンテナ化された Lambda 関数だけが機械学習リソースにアタッチされている場合:  
+ 機械学習リソースのリソース所有者として **[No system group]** (システムグループなし) を選択します。これは、コンテナ化された Lambda 関数だけが機械学習リソースにアクセスする場合に推奨される設定です。そうしないと、アタッチされた Lambda 関数が必要以上に多くのアクセス権限を与える可能性があります。

   
 

**コンテナ化されていない Lambda 関数** (GGC v1.10 以降が必要)  
コンテナ化されていない Lambda 関数が機械学習リソースにアタッチされている場合:  
+ 機械学習リソースのリソース所有者として使用する **System group ID (GID)** (システムグループ ID (GID)) を指定します。**[Specify system group and permissions]** (システムグループと権限を指定) を選択し、GID を入力します。コアデバイスで `getent group` コマンドを使用して、システムグループ ID を検索できます。

   
+ **[System group permissions]** (システムグループの権限) には **[Read-only access]** (読み取り専用アクセス) または **[Read and write access]** (読み取り/書き込みアクセス)] を選択します。

## Lambda 関数 (API) のアクセス権限の定義
<a name="ml-resource-permissions-api"></a>

 AWS IoT Greengrass API では、Lambda 関数の `ResourceAccessPolicy`プロパティまたはリソースの `OwnerSetting`プロパティで機械学習リソースへのアクセス許可を定義します。

**コンテナ化された Lambda 関数**  
コンテナ化された Lambda 関数だけが機械学習リソースにアタッチされている場合:  
+ コンテナ化された Lambda 関数の場合は、`ResourceAccessPolicies` プロパティの `Permission` プロパティにアクセス権限を定義します。例:

  ```
  "Functions": [
      {
          "Id": "my-containerized-function",
          "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", 
          "FunctionConfiguration": {
              "Environment": {
                  "ResourceAccessPolicies": [
                      { 
                          "ResourceId": "my-resource-id",
                          "Permission": "ro-or-rw"
                      }
                  ]
              }, 
              "MemorySize": 512, 
              "Pinned": true, 
              "Timeout": 5
          }
      }
  ]
  ```
+ 機械学習リソースの場合は、`OwnerSetting` プロパティを省略します。例:

  ```
  "Resources": [
      {
          "Id": "my-resource-id",
          "Name": "my-resource-name",
          "ResourceDataContainer": {
              "S3MachineLearningModelResourceData": {
                  "DestinationPath": "/local-destination-path",
                  "S3Uri": "s3://uri-to-resource-package"
              }
          }
      }
  ]
  ```

  これは、コンテナ化された Lambda 関数だけが機械学習リソースにアクセスする場合に推奨される設定です。そうしないと、アタッチされた Lambda 関数が必要以上に多くのアクセス権限を与える可能性があります。
 

**コンテナ化されていない Lambda 関数** (GGC v1.10 以降が必要)  
コンテナ化されていない Lambda 関数が機械学習リソースにアタッチされている場合:  
+ コンテナ化されていない Lambda 関数の場合は、`ResourceAccessPolicies` の `Permission` プロパティを省略します。この設定は必須で、関数がリソースレベルのアクセス権限を継承できるようにします。例:

  ```
  "Functions": [
      {
          "Id": "my-non-containerized-function",
          "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", 
          "FunctionConfiguration": {
              "Environment": {
                  "Execution": {
                      "IsolationMode": "NoContainer",
                  },            
                  "ResourceAccessPolicies": [
                      { 
                          "ResourceId": "my-resource-id"
                      }
                  ]
              }, 
              "Pinned": true, 
              "Timeout": 5
          }
      }
  ]
  ```
+ 機械学習リソースにもアクセスするコンテナ化された Lambda 関数の場合は、`ResourceAccessPolicies` で `Permission` プロパティを省略するか、リソースレベルのアクセス権限と同じ、または制限のより厳しいアクセス権限を定義します。例:

  ```
  "Functions": [
      {
          "Id": "my-containerized-function",
          "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", 
          "FunctionConfiguration": {
              "Environment": {
                  "ResourceAccessPolicies": [
                      { 
                          "ResourceId": "my-resource-id",
                          "Permission": "ro-or-rw" // Optional, but cannot exceed the GroupPermission defined for the resource.
                      }
                  ]
              }, 
              "MemorySize": 512, 
              "Pinned": true, 
              "Timeout": 5
          }
      }
  ]
  ```
+ 機械学習リソースの場合は、子 `GroupOwner` および `GroupPermission` プロパティを含む `OwnerSetting` プロパティを定義します。例:

  ```
  "Resources": [
      {
          "Id": "my-resource-id",
          "Name": "my-resource-name",
          "ResourceDataContainer": {
              "S3MachineLearningModelResourceData": {
                  "DestinationPath": "/local-destination-path",
                  "S3Uri": "s3://uri-to-resource-package",
                  "OwnerSetting": { 
                      "GroupOwner": "os-group-id",
                      "GroupPermission": "ro-or-rw"
                  }
              }
          }
      }
  ]
  ```

## Lambda 関数コードから機械学習リソースにアクセスする
<a name="access-resource-function-code"></a>

ユーザー定義の Lambda 関数は、プラットフォーム固有の OS インターフェイスを使用して、Core デバイスの機械学習リソースにアクセスします。

------
#### [ GGC v1.10 or later ]

コンテナ化された Lambda 関数の場合、リソースは Greengrass コンテナ内にマウントされ、リソースに対して定義されたローカルの送信先パスで利用できます。コンテナ化されていない Lambda 関数の場合、リソースは Lambda 専用の作業ディレクトリにシンボリックリンクされ、Lambda プロセス内の `AWS_GG_RESOURCE_PREFIX` 環境変数に渡されます。

機械学習リソースのダウンロードされたアーティファクトへのパスを取得するために、Lambda 関数は、リソースに対して定義されたローカルの送信先パスに `AWS_GG_RESOURCE_PREFIX` 環境変数を追加します。コンテナ化された Lambda 関数の場合、返される値は 1 つのスラッシュ (`/`) です。

```
resourcePath = os.getenv("AWS_GG_RESOURCE_PREFIX") + "/destination-path"
with open(resourcePath, 'r') as f:
    # load_model(f)
```

------
#### [ GGC v1.9 or earlier ]

機械学習リソースのダウンロードされたアーティファクトは、リソースに対して定義されたローカルの送信先パスにあります。 AWS IoT Greengrass Core v1.9 以前の機械学習リソースにアクセスできるのは、コンテナ化された Lambda 関数だけです。

```
resourcePath = "/local-destination-path"
with open(resourcePath, 'r') as f:
    # load_model(f)
```

------

モデルのロード実装は、ML ライブラリによって異なります。

## トラブルシューティング
<a name="access-ml-resources-troubleshooting"></a>

次の情報を使用して、機械学習リソースへのアクセスに関する問題のトラブルシューティングに役立ててください。

**Topics**
+ [InvalidMLModelOwner - GroupOwnerSetting は ML モデルリソースに提供されていますが、GroupOwner または GroupPermission がありません](#nocontainer-lambda-invalid-ml-model-owner)
+ [NoContainer 関数は、機械学習リソースをアタッチするときにアクセス権限を設定できません。<function-arn> は、リソースアクセスポリシーでアクセス権限 <ro/rw> を持つ機械学習リソース <resource-id> を参照します。](#nocontainer-lambda-invalid-resource-access-policy)
+ [関数 <function-arn> は機械学習リソース <resource-id> を参照しますが、ResourceAccessPolicy とリソースの OwnerSetting のどちらにもアクセス権限がありません。](#nocontainer-lambda-missing-access-permission)
+ [関数 <function-arn> は \$1"rw\$1" アクセス権限で機械学習リソース <resource-id> を参照しますが、リソース所有者設定の GroupPermission で許可されているのは \$1"ro\$1" のみです。](#container-lambda-invalid-rw-permissions)
+ [NoContainer 関数 <function-arn> は、ネストされた送信先パスのリソースを参照します。](#nocontainer-lambda-nested-destination-path)
+ [Lambda <function-arn> は、同じグループ所有者 ID を共有することでリソース <resource-id> にアクセスします。](#lambda-runas-and-resource-owner)

### InvalidMLModelOwner - GroupOwnerSetting は ML モデルリソースに提供されていますが、GroupOwner または GroupPermission がありません
<a name="nocontainer-lambda-invalid-ml-model-owner"></a>

**解決策:** このエラーは、機械学習リソースに [ResourceDownloadOwnerSetting](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-resourcedownloadownersetting.html) オブジェクトが含まれていても、必須の `GroupOwner` または `GroupPermission` プロパティが定義されていない場合に表示されます。この問題を解決するには、不足しているプロパティを定義します。

 

### NoContainer 関数は、機械学習リソースをアタッチするときにアクセス権限を設定できません。<function-arn> は、リソースアクセスポリシーでアクセス権限 <ro/rw> を持つ機械学習リソース <resource-id> を参照します。
<a name="nocontainer-lambda-invalid-resource-access-policy"></a>

**解決策:** コンテナ化されていない Lambda 関数が機械学習リソースに対する関数レベルのアクセス権限を指定した場合、このエラーが表示されます。コンテナ化されていない関数は、機械学習リソースに定義されているリソース所有者のアクセス権限からアクセス権限を継承する必要があります。この問題を解決するには、コンソールから [[inherit resource owner permissions]](#non-container-config-console) (リソース所有者のアクセス許可を継承する) を選択するか、API を使用して [Lambda 関数のリソースアクセスポリシーからアクセス権限を削除する](#non-container-config-api)かを選択します。

 

### 関数 <function-arn> は機械学習リソース <resource-id> を参照しますが、ResourceAccessPolicy とリソースの OwnerSetting のどちらにもアクセス権限がありません。
<a name="nocontainer-lambda-missing-access-permission"></a>

**解決策:** このエラーは、機械学習リソースへのアクセス権限が、アタッチされた Lambda 関数またはリソースに対して設定されていない場合に表示されます。この問題を解決するには、Lambda 関数の [ResourceAccessPolicy](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-resourceaccesspolicy.html) プロパティか、またはリソースの [OwnerSetting](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-ownersetting.html) プロパティにアクセス権限を設定します。

 

### 関数 <function-arn> は \$1"rw\$1" アクセス権限で機械学習リソース <resource-id> を参照しますが、リソース所有者設定の GroupPermission で許可されているのは \$1"ro\$1" のみです。
<a name="container-lambda-invalid-rw-permissions"></a>

**解決策:** このエラーは、アタッチされた Lambda 関数に定義されたアクセス権限が、機械学習リソースに対して定義されたリソース所有者のアクセス権限を超えた場合に表示されます。この問題を解決するには、Lambda 関数に対して制限のより厳しいアクセス権限を設定するか、リソース所有者の制限がより低いアクセス権限を設定します。

 

### NoContainer 関数 <function-arn> は、ネストされた送信先パスのリソースを参照します。
<a name="nocontainer-lambda-nested-destination-path"></a>

**解決策:** コンテナ化されていない Lambda 関数にアタッチされた複数の機械学習リソースが同じ送信先パスまたはネストされた送信先パスを使用している場合に、このエラーが表示されます。この問題を解決するには、リソースに別の送信先パスを指定します。

 

### Lambda <function-arn> は、同じグループ所有者 ID を共有することでリソース <resource-id> にアクセスします。
<a name="lambda-runas-and-resource-owner"></a>

**解決策:** このエラーは、Lambda 関数の[実行者](lambda-group-config.md#lambda-access-identity) ID と、機械学習リソースの[リソース所有者](#ml-resource-owner)に同じ OS グループを指定しながら、リソースが Lambda 関数にアタッチされていない場合に `runtime.log` に記録されます。この設定では、Lambda 関数に暗黙のアクセス権限が付与されます。このアクセス権限は、 AWS IoT Greengrass の認可なしでリソースにアクセスするために使用できます。

この問題を解決するには、プロパティの 1 つに別の OS グループを使用するか、機械学習リソースを Lambda 関数にアタッチします。

## 関連情報
<a name="access-ml-resources-see-also"></a>
+ [機械学習の推論を実行する](ml-inference.md)
+ [を使用して機械学習推論を設定する方法 AWS マネジメントコンソール](ml-console.md)
+ [を使用して最適化された機械学習推論を設定する方法 AWS マネジメントコンソール](ml-dlc-console.md)
+ [AWS IoT Greengrass Version 1 API リファレンス](https://docs.aws.amazon.com/greengrass/v1/apireference/api-doc.html)