

サポート終了通知: 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)」を参照してください。

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

# AWS コマンドラインインターフェイスを使用してローカルリソースアクセスを設定する方法
<a name="lra-cli"></a>

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

ローカルリソースを使用するには、Greengrass Core デバイスにデプロイされたグループ定義にリソース定義を追加する必要があります。グループ定義には、Lambda 関数にローカルリソースに対するアクセス権限を付与する Lambda 関数定義も含める必要があります。要件と制約を含む詳細については、「[Lambda 関数とコネクタを使用してローカルリソースにアクセスする](access-local-resources.md)」を参照してください。

このチュートリアルでは、 AWS Command Line Interface (CLI) を使用してローカルリソースを作成し、そのリソースへのアクセスを設定するプロセスについて説明します。このチュートリアルのステップを実行するには、「[の開始方法 AWS IoT Greengrass](gg-gs.md)」で説明するように、Greengrass グループをすでに作成している必要があります。

を使用するチュートリアルについては AWS マネジメントコンソール、「」を参照してください[を使用してローカルリソースアクセスを設定する方法 AWS マネジメントコンソール](lra-console.md)。

## ローカルリソースの作成
<a name="lra-cli-create-resources"></a>

まず、`[CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)` コマンドを使用して、アクセス先のリソースを指定するリソース定義を作成します。この例では、2 つのリソースとして `TestDirectory` と `TestCamera` を作成します。

```
aws greengrass create-resource-definition  --cli-input-json '{
    "Name": "MyLocalVolumeResource",
    "InitialVersion": {
        "Resources": [
            {
                "Id": "data-volume",
                "Name": "TestDirectory",
                "ResourceDataContainer": {
                    "LocalVolumeResourceData": {
                        "SourcePath": "/src/LRAtest",
                        "DestinationPath": "/dest/LRAtest",
                        "GroupOwnerSetting": {
                            "AutoAddGroupOwner": true,
                            "GroupOwner": ""
                        }
                    }
                }
            },
            {
                "Id": "data-device",
                "Name": "TestCamera",
                "ResourceDataContainer": {
                    "LocalDeviceResourceData": {
                        "SourcePath": "/dev/video0",
                        "GroupOwnerSetting": {
                            "AutoAddGroupOwner": true,
                            "GroupOwner": ""
                        }
                    }
                }
            }
        ]
    }
}'
```

**Resources**: Greengrass グループの `Resource` オブジェクトのリスト。1 つの Greengrass グループには、最大 50 個のリソースを含めることができます。

**Resource\$1Id**: リソースの一意の識別子。この ID は、Lambda 関数の設定でリソースを参照するために使用されます。最大長: 128 文字。パターン: [a-zA-Z0-9:\$1-]\$1。

**Resource\$1Name**: リソースの論理名。このリソース名は、Greengrass コンソールに表示されます。最大長: 128 文字。パターン: [a-zA-Z0-9:\$1-]\$1。

**LocalDeviceResourceData\$1SourcePath**: デバイスリソースのローカル絶対パス。デバイスリソースのソースパスは、`/dev` の文字デバイスまたはブロックデバイスのみを参照できます。

**LocalVolumeResourceData\$1SourcePath**: Greengrass コアデバイス上のボリュームリソースのローカル絶対パス。この場所は、関数が実行される[コンテナ](lambda-group-config.md#lambda-function-containerization)の外側です。ボリュームリソースタイプのソースパスは、`/sys` で始めることはできません。

**LocalVolumeResourceData\$1DestinationPath**: Lambda 環境内のボリュームリソースの絶対パス。この場所は、関数が実行されるコンテナの内側です。

**GroupOwnerSetting**: Lambda プロセスの追加のグループ権限を設定できます。このフィールドはオプションです。詳細については、「[グループ所有者のファイルアクセス権限](access-local-resources.md#lra-group-owner)」を参照してください。

**GroupOwnerSetting\$1AutoAddGroupOwner**: true の場合は、リソースの指定した Linux OS グループ所有者の権限が Lambda プロセスに Greengrass によって自動的に追加されます。つまり、Lambda プロセスには、追加された Linux グループのファイルアクセス権限があります。

**GroupOwnerSetting\$1GroupOwner**: Lambda プロセスに権限が追加される Linux OS グループの名前を指定します。このフィールドはオプションです。

`[CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)` によって、リソース定義バージョン ARN が返されます。この ARN はグループ定義の更新時に使用する必要があります。

```
{
    "LatestVersionArn": "arn:aws:greengrass:us-west-2:012345678901:/greengrass/definition/resources/ab14d0b5-116e-4951-a322-9cde24a30373/versions/a4d9b882-d025-4760-9cfe-9d4fada5390d",
    "Name": "MyLocalVolumeResource",
    "LastUpdatedTimestamp": "2017-11-15T01:18:42.153Z",
    "LatestVersion": "a4d9b882-d025-4760-9cfe-9d4fada5390d",
    "CreationTimestamp": "2017-11-15T01:18:42.153Z",
    "Id": "ab14d0b5-116e-4951-a322-9cde24a30373",
    "Arn": "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/resources/ab14d0b5-116e-4951-a322-9cde24a30373"
}
```

## Greengrass 関数を作成する
<a name="lra-cli-create-function"></a>

リソースが作成されたら、`[CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)` コマンドを使用して Greengrass 関数を作成し、その関数にリソースへのアクセス許可を付与します。

```
aws greengrass create-function-definition --cli-input-json '{
    "Name": "MyFunctionDefinition",
    "InitialVersion": {
        "Functions": [
            {
                "Id": "greengrassLraTest",
                "FunctionArn": "arn:aws:lambda:us-west-2:012345678901:function:lraTest:1",
                "FunctionConfiguration": {
                    "Pinned": false,
                    "MemorySize": 16384,
                    "Timeout": 30,
                    "Environment": {
                        "ResourceAccessPolicies": [
                            {
                                "ResourceId": "data-volume",
                                "Permission": "rw"
                            },
                            {
                                "ResourceId": "data-device",
                                "Permission": "ro"
                            }                            
                        ],
                        "AccessSysfs": true
                    }
                }
            }
        ]
    }
}'
```

**ResourceAccessPolicies**: Lambda 関数にリソースへのアクセスを許可する `resourceId` と `permission` が含まれます。Lambda 関数は最大 20 のリソースにアクセスできます。

**ResourceAccessPolicy\$1Permission**: Lambda 関数のリソースに対するアクセス権限を指定します。使用可能なオプションは、`rw` (読み取り/書き込み) または `ro` (読み取り専用) です。

**AccessSysfs**: true の場合、Lambda プロセスには Greengrass コアデバイスの `/sys` フォルダに対する読み取りアクセス権限が付与されます。これは、Greengrass Lambda 関数が `/sys` からデバイス情報を読み取る必要がある場合に使用されます。

ここでも、`[CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)` によって関数定義バージョン ARN が返されます。この ARN はグループ定義バージョンで使用する必要があります。

```
{
    "LatestVersionArn": "arn:aws:greengrass:us-west-2:012345678901:/greengrass/definition/functions/3c9b1685-634f-4592-8dfd-7ae1183c28ad/versions/37f0d50e-ef50-4faf-b125-ade8ed12336e", 
    "Name": "MyFunctionDefinition", 
    "LastUpdatedTimestamp": "2017-11-22T02:28:02.325Z", 
    "LatestVersion": "37f0d50e-ef50-4faf-b125-ade8ed12336e", 
    "CreationTimestamp": "2017-11-22T02:28:02.325Z", 
    "Id": "3c9b1685-634f-4592-8dfd-7ae1183c28ad", 
    "Arn": "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/3c9b1685-634f-4592-8dfd-7ae1183c28ad"
}
```

## グループに Lambda 関数を追加する
<a name="lra-cli-add-function"></a>

最後に、`[CreateGroupVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/creategroupversion-post.html)` を使用して関数をグループに追加します。例:

```
aws greengrass create-group-version --group-id "b36a3aeb-3243-47ff-9fa4-7e8d98cd3cf5" \
--resource-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/resources/db6bf40b-29d3-4c4e-9574-21ab7d74316c/versions/31d0010f-e19a-4c4c-8098-68b79906fb87" \
--core-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/cores/adbf3475-f6f3-48e1-84d6-502f02729067/versions/297c419a-9deb-46dd-8ccc-341fc670138b" \
--function-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/d1123830-da38-4c4c-a4b7-e92eec7b6d3e/versions/a2e90400-caae-4ffd-b23a-db1892a33c78" \
--subscription-definition-version-arn "arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/subscriptions/7a8ef3d8-1de3-426c-9554-5b55a32fbcb6/versions/470c858c-7eb3-4abd-9d48-230236bfbf6a"
```

**注記**  
このコマンドで使用するグループ ID を取得する方法については、「[グループ ID の取得](deployments.md#api-get-group-id)」を参照してください。

新しいグループのバージョンが返されます。

```
{
    "Arn": "arn:aws:greengrass:us-west-2:012345678901:/greengrass/groups/b36a3aeb-3243-47ff-9fa4-7e8d98cd3cf5/versions/291917fb-ec54-4895-823e-27b52da25481",
    "Version": "291917fb-ec54-4895-823e-27b52da25481",
    "CreationTimestamp": "2017-11-22T01:47:22.487Z",
    "Id": "b36a3aeb-3243-47ff-9fa4-7e8d98cd3cf5"
}
```

Greengrass グループには、TestDirectory と TestCamera の 2 つのリソースにアクセスできる *lraTest* Lambda 関数が含まれています。

Python で書かれたこのサンプル Lambda 関数 `lraTest.py` は、ローカルボリュームリソースを書き込みます。

```
# 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
```

以下のコマンドは Greengrass API に用意されており、リソース定義とリソース定義バージョンの作成と管理に使用します。
+ [CreateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinition-post.html)
+ [CreateResourceDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/createresourcedefinitionversion-post.html)
+  [DeleteResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/deleteresourcedefinition-delete.html)
+  [GetResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/getresourcedefinition-get.html)
+  [GetResourceDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/getresourcedefinitionversion-get.html)
+  [ListResourceDefinitions](https://docs.aws.amazon.com/greengrass/v1/apireference/listresourcedefinitions-get.html)
+  [ListResourceDefinitionVersions](https://docs.aws.amazon.com/greengrass/v1/apireference/listresourcedefinitionversions-get.html)
+  [UpdateResourceDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/updateresourcedefinition-put.html)

## トラブルシューティング
<a name="lra-faqs"></a>
+ **Q:** Greengrass グループのデプロイに失敗するのはなぜですか?

  ```
  group config is invalid: 
      ggc_user or [ggc_group root tty] don't have ro permission on the file: /dev/tty0
  ```

  **A:** このエラーは、指定したリソースに対するアクセス権限が Lambda プロセスにないことを示します。解決策は、Lambda がアクセスできるようにリソースのファイルアクセス権限を変更することです。(詳細については、「[グループ所有者のファイルアクセス権限](access-local-resources.md#lra-group-owner)」を参照してください)。
+ **Q:** ボリュームリソースとして `/var/run` を設定すると、runtime.log にエラーメッセージが記録され、Lambda 関数が開始されないのはなぜですか?

  ```
  [ERROR]-container_process.go:39,Runtime execution error: unable to start lambda container. 
  container_linux.go:259: starting container process caused "process_linux.go:345: 
  container init caused \"rootfs_linux.go:62: mounting \\\"/var/run\\\" to rootfs \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys\\\" at \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys/run\\\" 
  caused \\\"invalid argument\\\"\""
  ```

  **A:** AWS IoT Greengrass core は現在、ボリュームリソース`/var/lib`としての `/var`、`/var/run`、および の設定をサポートしていません。1 つの回避策は、最初に `/var`、`/var/run`、`/var/lib` を別のフォルダーにマウントし、そのフォルダーをボリュームリソースとして設定することです。
+ **Q:** `/dev/shm` を読み取り専用アクセス権限のあるボリュームリソースとして設定すると、runtime.log にエラーが記録されて、Lambda 関数が開始されないのはなぜですか?

  ```
  [ERROR]-container_process.go:39,Runtime execution error: unable to start lambda container. 
  container_linux.go:259: starting container process caused "process_linux.go:345: 
  container init caused \"rootfs_linux.go:62: mounting \\\"/dev/shm\\\" to rootfs \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys\\\" at \\\"/greengrass/ggc/packages/1.3.0/rootfs_sys/dev/shm\\\" 
  caused \\\"operation not permitted\\\"\""”
  ```

  **A:** `/dev/shm` は読み取り/書き込みとしてのみ設定できます。リソースに対するアクセス許可を `rw` に変更して、問題を解決します。