

サポート終了通知: 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-local-resources"></a>

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

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

ローカルリソースへのアクセスを開始するには、次のチュートリアルを参照してください。
+ [AWS コマンドラインインターフェイスを使用してローカルリソースアクセスを設定する方法](lra-cli.md)
+ [を使用してローカルリソースアクセスを設定する方法 AWS マネジメントコンソール](lra-console.md)

## サポートされているリソースタイプ
<a name="lra-resource-types"></a>

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

**ボリュームリソース**  
ルートファイルシステム上のファイルまたはディレクトリ (`/sys`、`/dev` または `/var` を除く)。具体的には次のとおりです。  
+ Greengrass Lambda 関数 (例えば、`/usr/lib/python2.x/site-packages/local`) を介して情報を読み書きするためのフォルダまたはファイル。
+ ホストの /proc ファイルシステムのフォルダまたはファイル (`/proc/net` または `/proc/stat` など)。v1.6 以降でサポートされています。追加の要件については、[/proc ディレクトリのボリュームリソース](#lra-proc-resources)を参照してください。
`/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 は、機械学習推論の実行に使用されるリソースタイプもサポートしています。詳細については、「[機械学習の推論を実行する](ml-inference.md)」を参照してください。

## 要件
<a name="lra-requirements"></a>

ローカルリソースへのセキュアなアクセスの設定には、以下の要件が適用されます。
+  AWS IoT Greengrass Core Software v1.3 以降を使用している必要があります。ホストの /proc ディレクトリにリソースを作成するには、v1.6 以降を使用する必要があります。
+ ローカルリソース (必要なドライバーとライブラリのすべてを含む) は、Greengrass コアデバイスに正しくインストールされ、使用中も常にアクセス可能であることが必要です。
+ 必要になるリソースの操作とリソースへのアクセスに root 権限は不要です。
+ `read` または `read and write` アクセス許可のみが使用可能です。Lambda 関数は、リソースに対して特別な権限が必要なオペレーションを実行することはできません。
+ Greengrass コアデバイスのオペレーティングシステム上のローカルリソースの完全パスを指定することが必要です。
+ リソース名または ID の最大長は 128 文字で、パターン `[a-zA-Z0-9:_-]+` を使用する必要があります。

### /proc ディレクトリのボリュームリソース
<a name="lra-proc-resources"></a>

ホストの /proc ディレクトリにあるボリュームリソースには、以下の考慮事項が適用されます。
+  AWS IoT Greengrass Core Software v1.6 以降を使用している必要があります。
+ Lambda 関数には読み取り専用アクセスを許可できますが、読み取り/書き込みアクセスは許可できません。このレベルのアクセスは によって管理されます AWS IoT Greengrass。
+ また、ファイルシステムに読み取りアクセスを可能にする OS グループ権限を付与することが必要になる場合があります。例えば、リソースディレクトリあるいはファイルに 660 ファイルアクセス許可があるとします。これは、このグループの所有者あるいはユーザーのみに読み取り (あるいは書き込み) アクセスがあることを意味します。この場合、このリソースに OS グループ所有者の権限を追加する必要があります。詳細については、「[グループ所有者のファイルアクセス権限](#lra-group-owner)」を参照してください。
+ ホスト環境および Lambda 名前空間には、その両方に /proc ディレクトリがあるため、配置先パスを指定するときに名前の競合を回避するように注意します。例えば、/proc がソースパスの場合、/host-proc を配置先パスとして指定できます (または、「*/proc*」を除く任意のパス名)。

## グループ所有者のファイルアクセス権限
<a name="lra-group-owner"></a>

 AWS IoT Greengrass Lambda 関数プロセスは通常、 `ggc_user`および として実行されます`ggc_group`。ただし、次のように、ローカルリソース定義の Lambda 関数プロセスに追加のファイルアクセス許可を与えることができます。
+ リソースを所有する Linux グループのアクセス権限を追加するには、`GroupOwnerSetting#AutoAddGroupOwner` パラメータまたは **[Automatically add file system permissions of the system group that owns the resource]** (リソースを所有するシステムグループのアクセス権限をファイルシステムに自動的に追加) コンソールオプションを使用します。
+ 別の Linux グループのアクセス権限を追加するには、`GroupOwnerSetting#GroupOwner` パラメータまたは **[Specify another system group to add file system permissions]** (ファイルシステムの許可を追加するために、別のシステムグループを指定) コンソールオプションを使用します。`GroupOwnerSetting#AutoAddGroupOwner` が true の場合、`GroupOwner` 値は無視されます。

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

## 関連情報
<a name="lra-seealso"></a>
+ *Amazon Web Services 全般のリファレンス* 内のリソースの [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass)

# 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` に変更して、問題を解決します。

# を使用してローカルリソースアクセスを設定する方法 AWS マネジメントコンソール
<a name="lra-console"></a>

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

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

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

1. [Lambda 関数デプロイパッケージを作成する](#lra-console-create-package)

1. [Lambda 関数を作成して発行する](#lra-console-create-function)

1. [グループに Lambda 関数を追加する](#lra-console-add-function)

1. [グループにローカルリソースを追加する](#lra-console-create-resource)

1. [サブスクリプションをグループに追加する](#lra-console-add-subscription)

1. [グループをデプロイする](#lra-console-deploy-group)

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

## 前提条件
<a name="lra-console-prerequisites"></a>

このチュートリアルを完了するには、以下が必要です。
+ Greengrass グループと Greengrass コア (v1.3 以降)。Greengrass グループまたはコアを作成するには、「[の開始方法 AWS IoT Greengrass](gg-gs.md)」を参照してください。
+ Greengrass コアデバイス上にある以下のディレクトリでは、次のとおりです。
  + /src/LRAtest
  + /dest/LRAtest

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

  ```
  sudo chmod 0775 /src/LRAtest
  ```

## ステップ 1: Lambda 関数デプロイパッケージを作成する
<a name="lra-console-create-package"></a>

このステップでは、Lambda 関数のデプロイパッケージを作成します。これは、関数のコードと依存関係を含む ZIP ファイルです。また、 AWS IoT Greengrass Core 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
   ```

1. <a name="download-ggc-sdk"></a> [AWS IoT Greengrass Core SDK](what-is-gg.md#gg-core-sdk-download) ダウンロードページから、 AWS IoT Greengrass Core SDK for Python をコンピュータにダウンロードします。

1. <a name="unzip-ggc-sdk"></a>ダウンロードしたパッケージを解凍し、SDK を取得します。SDK は `greengrasssdk` フォルダです。

1. 以下の項目を `lraTestLambda.zip` という名前のファイルに圧縮します。
   + `lraTest.py`。アプリケーションロジック。
   + `greengrasssdk`。すべての Python Lambda 関数に必要なライブラリ。

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

## ステップ 2: Lambda 関数を作成して発行する
<a name="lra-console-create-function"></a>

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

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

1. で AWS マネジメントコンソール、**サービス**を選択し、コンソールを開きます AWS Lambda 。

1. **関数**を選択します。

1. <a name="lambda-console-create-function"></a>**[Create function]** (関数の作成) を選択し、**[Author from scratch]** (一から作成) を選択します。

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

   1. **[関数名]** に「**TestLRA**」と入力します。

   1. **[ランタイム]** で **[Python 3.7]** を選択します。

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

1. [**関数の作成**] を選択してください。  
![\[[関数の作成] ページで [関数の作成] が強調表示されます。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/lra-console/create-function.png)

    

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

   1. <a name="lambda-console-upload"></a>**[Code]** (コード) タブの **[Code source]** (コードソース) で、**[Upload from]** (アップロード元) を選択します。ドロップダウンから **[.zip ファイル]** を選択します。  
![\[[.zip ファイル] が強調表示された [アップロード元] ドロップダウンリスト。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. **[アップロード]** を選択し、`lraTestLambda.zip` デプロイパッケージを選択します。次に、**[保存]** を選択します。

   1. <a name="lambda-console-runtime-settings-para"></a>関数の **[Code]** (コード) タブにある **[Runtime settings]** (ランタイム設定) で **[Edit]** (編集) を選択し、次の値を入力します。
      + **[ランタイム]** で **[Python 3.7]** を選択します。
      + [**ハンドラ**] で、[**lraTest.function\$1handler**] と入力します。

   1. <a name="lambda-console-save-config"></a>**[保存]** を選択します。
**注記**  
 AWS Lambda コンソールの**テスト**ボタンは、この関数では機能しません。 AWS IoT Greengrass Core SDK には、Greengrass Lambda 関数を AWS Lambda コンソールで個別に実行するために必要なモジュールは含まれていません。これらのモジュール (例えば `greengrass_common`) が関数に提供されるのは、Greengrass Core にデプロイされた後になります。

   次に、Lambda 関数の最初のバージョンを発行します。その後、[バージョンのエイリアス](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)を作成します。

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

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

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

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

1. [**エイリアスの作成**] ページの [**名前**] に、「**test**」と入力します。[**バージョン**] に、[**1**] と選択します。
**注記**  
AWS IoT Greengrass は、**\$1LATEST** バージョンの Lambda エイリアスをサポートしていません。

1. **[作成]** を選択します。  
![\[[Create a new alias (新しいエイリアスの作成)] ページで [作成] が強調表示されています。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/lra-console/create-alias.png)

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

## ステップ 3: Lambda 関数を Greengrass グループに追加する
<a name="lra-console-add-function"></a>

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

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

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

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

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

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

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

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

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

    

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

1. [**タイムアウト**] で、[**30 秒**] を選択します。
**重要**  
この手順で説明されているように、ローカルリソースを使用する Lambda 関数は、Greengrass コンテナ内で実行する必要があります。それ以外の場合は、関数をデプロイしようとすると、デプロイが失敗します。詳細については、「[コンテナ化](lambda-group-config.md#lambda-function-containerization)」を参照してください。

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

## ステップ 4: Greengrass グループにローカルリソースを追加する
<a name="lra-console-create-resource"></a>

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

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

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

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

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

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

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

      ローカルデバイスは、コアデバイスのファイルシステム上のリソースのローカル絶対パスです。この場所は、関数が実行される[コンテナ](lambda-group-config.md#lambda-function-containerization)の外側です。このパスの先頭を `/sys` にすることはできません。

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

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

   1. **[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 プロセスに追加のファイルアクセス権限をグラントできます。詳細については、「[グループ所有者のファイルアクセス権限](access-local-resources.md#lra-group-owner)」を参照してください。

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

## ステップ 5: サブスクリプションを Greengrass グループに追加する
<a name="lra-console-add-subscription"></a>

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

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

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

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

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

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

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

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

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

    

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

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

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

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

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

   1. [**次へ**] を選択します。

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

1. [**Finish**] を選択してください。[**Subscriptions**] ページに両方のサブスクリプションが表示されます。

## ステップ 6: AWS IoT Greengrass グループをデプロイする
<a name="lra-console-deploy-group"></a>

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

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

   1. デーモンが実行中かどうかを確認するには、以下を実行します。

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

      出力に `root` で実行中の `/greengrass/ggc/packages/1.11.6/bin/daemon` のエントリが含まれていれば、デーモンは実行されています。
**注記**  
パスのバージョンは、コアデバイスにインストールされている AWS IoT Greengrass Core ソフトウェアのバージョンによって異なります。

   1. デーモンを開始するには、以下を実行します。

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. グループ設定ページで、**[Deploy]** (デプロイ) を選択します。
**注記**  
コンテナ化を使用せずに Lambda 関数を実行し、アタッチ済みのローカルリソースにアクセスしようとすると、デプロイは失敗します。

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

   これにより、デバイスは、IP アドレス、DNS、ポート番号など、コアの接続情報を自動的に取得できます。自動検出が推奨されますが、手動で指定されたエンドポイント AWS IoT Greengrass もサポートされます。グループが初めてデプロイされたときにのみ、検出方法の確認が求められます。
**注記**  
プロンプトが表示されたら、[Greengrass サービスロール](service-role.md)を作成し、それを現在の AWS アカウント の に関連付けるアクセス許可を付与します AWS リージョン。このロールにより AWS IoT Greengrass 、 は AWS サービスのリソースにアクセスできます。

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

   トラブルシューティングのヘルプについては、[トラブルシューティング AWS IoT Greengrass](gg-troubleshooting.md) を参照してください。

## ローカルリソースアクセスのテスト
<a name="lra-console-test-results"></a>

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

1.  AWS IoT コンソールのナビゲーションメニューから、**テスト**で **MQTT テストクライアント**を選択します。

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

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

1. **[サブスクライブ]** を選択します。Lambda 関数は LRA/test トピックに発行します。  
![\[[サブスクリプション] ページで [トピックへのサブスクライブ] が強調表示されています。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/lra-console/test-subscribe.png)

1. **[Publish to a topic]** (トピックに発行) から、**[Topic name]** (トピック名) で、**invoke/LRAFunction**と入力し、**[Publish]** (発行) を選択して、Lambda 関数を呼び出します。ページに関数の 3 つのメッセージペイロードが表示されている場合、テストは成功です。  
![\[[サブスクリプション] ページで、[invoke/LRAFunction] トピックと [トピックに発行] が強調表示され、メッセージデータと共にテスト結果が表示されています。\]](http://docs.aws.amazon.com/ja_jp/greengrass/v1/developerguide/images/lra-console/test-publish.png)

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

トラブルシューティングのヘルプについては、[トラブルシューティング AWS IoT Greengrass](gg-troubleshooting.md) を参照してください。