

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

# Lambda 関数をコンポーネント (AWS CLI) としてインポートする
<a name="import-lambda-function-cli"></a>

[CreateComponentVersion](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_CreateComponentVersion.html) オペレーションを使用して、Lambda 関数からコンポーネントを作成します。このオペレーションを呼び出すときは、`lambdaFunction` を指定して Lambda 関数をインポートします。

**Topics**
+ [ステップ 1: Lambda 関数の設定を定義する](#create-lambda-function-configuration-cli)
+ [ステップ 2: Lambda 関数コンポーネントを作成する](#create-lambda-component-cli)

## ステップ 1: Lambda 関数の設定を定義する
<a name="create-lambda-function-configuration-cli"></a>

1. `lambda-function-component.json` という名前のファイルを作成して、次の JSON オブジェクトをファイルにコピーします。`lambdaArn` を、インポートする Lambda 関数のARNに置き換えます。

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1"
     }
   }
   ```
**重要**  
インポートする関数のバージョンが含まれた ARN を指定する必要があります。`$LATEST` のようなバージョンエイリアスは使用できません。

1. (オプション) コンポーネントの名前 (`componentName`) を指定します。このパラメータを省略すると、 は Lambda 関数の名前でコンポーネント AWS IoT Greengrass を作成します。

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
       "componentName": "com.example.HelloWorldLambda"
     }
   }
   ```

1. (オプション) コンポーネントのバージョン (`componentVersion`) を指定します。このパラメータを省略すると、 は Lambda 関数のバージョンを有効なセマンティックバージョンとしてコンポーネント AWS IoT Greengrass を作成します。例えば、関数のバージョンが `3` である場合、コンポーネントのバージョンは `3.0.0` になります。
**注記**  
<a name="component-version-uniqueness-para"></a>アップロードする各コンポーネントバージョンは一意である必要があります。アップロード後は編集できないため、必ず正しいコンポーネントバージョンをアップロードしてください。  
<a name="semver-para"></a>AWS IoT Greengrass はコンポーネントにセマンティックバージョンを使用します。セマンティックバージョンは、major.minor.patch といった番号システムに準拠します。例えば、バージョン `1.0.0` は、コンポーネントの最初のメジャーリリースを表しています。詳細については、「[セマンティックバージョンの仕様](https://semver.org/)」を参照してください。

   ```
   {
     "lambdaFunction": {
       "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
       "componentName": "com.example.HelloWorldLambda",
       "componentVersion": "1.0.0"
     }
   }
   ```

1. (オプション) この Lambda 関数がサポートするプラットフォームを指定します。各プラットフォームには、プラットフォームを識別するための属性のマップが含まれます。すべてのコアデバイスには、オペレーティングシステム (`os`) とアーキテクチャ (`architecture`) の属性があります。 AWS IoT Greengrass Core ソフトウェアは、他のプラットフォーム属性を追加する場合があります。コアデバイスに [Greengrass nucleus コンポーネント](greengrass-nucleus-component.md) をデプロイする際、カスタムのプラットフォーム属性を指定することもできます。以下の操作を実行します。

   1. `lambda-function-component.json` の Lambda 関数にプラットフォームのリスト (`componentPlatforms`) を追加します。

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
          
          ]
        }
      }
      ```

   1. サポートされている各プラットフォームをリストに追加します。各プラットフォームには識別用のフレンドリー `name` と属性のマップがあります。以下の例は、この関数が Linux を実行する x86 デバイスをサポートすることを指定しています。

      ```
      {
        "name": "Linux x86",
        "attributes": {
          "os": "linux",
          "architecture": "x86"
        }
      }
      ```

      `lambda-function-component.json` には以下の例のようなドキュメントが含まれる場合があります。

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ]
        }
      }
      ```

1. (オプション) Lambda 関数のコンポーネントの依存関係を指定します。Lambda 関数コンポーネントをデプロイすると、関数を実行するためのこれらの依存関係がデプロイに含まれます。
**重要**  <a name="import-v1-lambda-note"></a>
 AWS IoT Greengrass V1 で実行するために作成した Lambda 関数をインポートするには、シークレット、ローカルシャドウ、ストリームマネージャーなど、関数が使用する機能の個々のコンポーネントの依存関係を定義する必要があります。これらのコンポーネントを[ハード依存関係](component-recipe-reference.md)として定義し、依存関係の状態が変化すると Lambda 関数コンポーネントが再起動するようにしてください。詳細については、「[V1 Lambda 関数をインポートする](set-up-v2-test-device.md#run-v1-lambda-functions)」を参照してください。

   以下の操作を実行します。

   1. `lambda-function-component.json` の Lambda 関数にコンポーネントの依存関係 (`componentDependencies`) のマップを追加します。

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            
          }
        }
      }
      ```

   1. 各コンポーネントの依存関係をマップに追加します。コンポーネント名をキーとして指定し、以下のパラメータを使用してオブジェクトを指定します。
      + `versionRequirement` – コンポーネントの依存関係において互換性のあるバージョンを識別する npm スタイルのセマンティックバージョン制約。1 つのバージョンまたはバージョンの範囲を指定できます。セマンティックバージョン制約の詳細については、[npm semver calculator](https://semver.npmjs.com/) を参照してください。
      + `dependencyType` – (オプション) 依存関係のタイプ。以下から選択します。
        + `SOFT` - 依存関係が状態を変化させても、Lambda 関数コンポーネントは再起動しません。
        + `HARD` - 依存関係が状態を変化させると、Lambda 関数コンポーネントが再起動します。

        デフォルトは `HARD` です。

      次の例では、この Lambda 関数が[ストリームマネージャーコンポーネント](stream-manager-component.md)の最初のメジャーバージョンのすべてのバージョンに依存することを指定しています。Lambda 関数コンポーネントは、ストリームマネージャーが再起動または更新されたときに再起動します。

      ```
      {
        "aws.greengrass.StreamManager": {
          "versionRequirement": "^1.0.0",
          "dependencyType": "HARD"
        }
      }
      ```

      `lambda-function-component.json` には以下の例のようなドキュメントが含まれる場合があります。

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            "aws.greengrass.StreamManager": {
              "versionRequirement": "^1.0.0",
              "dependencyType": "HARD"
            }
          }
        }
      }
      ```

1. (オプション) 関数の実行に使用する Lambda 関数のパラメータを設定します。環境変数、メッセージイベントソース、タイムアウト、コンテナ設定などのオプションを設定できます。以下の操作を実行します。

   1. Lambda パラメータオブジェクト (`componentLambdaParameters`) を `lambda-function-component.json` の Lambda 関数に追加します。

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            "aws.greengrass.StreamManager": {
              "versionRequirement": "^1.0.0",
              "dependencyType": "HARD"
            }
          },
          "componentLambdaParameters": {
          
          }
        }
      }
      ```

   1. (オプション) Lambda 関数が作業メッセージのためにサブスクライブするイベントソースを指定します。イベントソースを指定して、この関数をローカルのパブリッシュ/サブスクライブメッセージと AWS IoT Core MQTT メッセージにサブスクライブできます。Lambda 関数は、イベントソースからメッセージを受信したときに呼び出されます。
**注記**  
この関数を他の Lambda 関数またはコンポーネントからのメッセージにサブスクライブするには、この Lambda 関数コンポーネントをデプロイするときに[レガシーサブスクリプションルーターコンポーネント](legacy-subscription-router-component.md)をデプロイしてください。レガシーサブスクリプションルーターコンポーネントをデプロイするときは、Lambda 関数が使用するサブスクリプションを指定します。

      以下の操作を実行します。

      1. Lambda 関数のパラメータにイベントソース (`eventSources`) のリストを追加します。

         ```
         {
           "lambdaFunction": {
             "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
             "componentName": "com.example.HelloWorldLambda",
             "componentVersion": "1.0.0",
             "componentPlatforms": [
               {
                 "name": "Linux x86",
                 "attributes": {
                   "os": "linux",
                   "architecture": "x86"
                 }
               }
             ],
             "componentDependencies": {
               "aws.greengrass.StreamManager": {
                 "versionRequirement": "^1.0.0",
                 "dependencyType": "HARD"
               }
             },
             "componentLambdaParameters": {
               "eventSources": [
               
               ]
             }
           }
         }
         ```

      1. 各イベントソースをリストに追加します。各イベントソースには以下のパラメータがあります。
         + `topic` – メッセージをサブスクライブするためのトピック。
         + `type` – イベントソースのタイプ。次のオプションから選択します。
           + `PUB_SUB` - ローカルのパブリッシュ/サブスクライブメッセージをサブスクライブします。

             [Greengrass nucleus](greengrass-nucleus-component.md) v2.6.0 以降と、[Lambda マネージャー](lambda-manager-component.md) v2.2.5 以降を使用する場合、`topic` のタイプを指定する際に (その中で)、MQTT トピックのワイルドカード (`+` および `#`) を使用できます。
           + `IOT_CORE` – AWS IoT Core MQTT メッセージをサブスクライブします。

             `topic` のタイプを指定する際に、MQTT ワイルドカード (`+` および `#`) を使用できます。

           次の の例では、トピックフィルターに一致する`hello/world/+`トピックで AWS IoT Core MQTT にサブスクライブします。

           ```
           {
             "topic": "hello/world/+",
             "type": "IOT_CORE"
           }
           ```

           `lambda-function-component.json` は、次の例のようになります。

           ```
           {
             "lambdaFunction": {
               "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
               "componentName": "com.example.HelloWorldLambda",
               "componentVersion": "1.0.0",
               "componentPlatforms": [
                 {
                   "name": "Linux x86",
                   "attributes": {
                     "os": "linux",
                     "architecture": "x86"
                   }
                 }
               ],
               "componentDependencies": {
                 "aws.greengrass.StreamManager": {
                   "versionRequirement": "^1.0.0",
                   "dependencyType": "HARD"
                 }
               },
               "componentLambdaParameters": {
                 "eventSources": [
                   {
                     "topic": "hello/world/+",
                     "type": "IOT_CORE"
                   }
                 ]
               }
             }
           }
           ```

   1. (オプション) Lambda 関数パラメータオブジェクトで、次のパラメータのいずれかを指定します。
      + `environmentVariables` – 実行時に Lambda 関数を利用できる環境変数のマップ。
      + `execArgs` – 実行時に Lambda 関数に渡す引数のリスト。
      + `inputPayloadEncodingType` – Lambda 関数がサポートするペイロードのタイプ。次のオプションから選択します。
        +  `json` 
        +  `binary` 

        デフォルト: `json`
      + `pinned` – Lambda 関数をピン留めするかどうかを示します。デフォルトは `true` です。<a name="lambda-function-lifecycle-type"></a>
        + 固定 (または存続期間の長い) Lambda 関数は、 AWS IoT Greengrass が起動したときに開始され、独自のコンテナで実行され続けます。
        + ピン留めされていない (またはオンデマンドの) Lambda 関数は、作業項目を受け取ったときのみ開始し、アイドル状態のまま指定された最大アイドル時間を過ぎると終了します。関数に複数の作業項目がある場合、 AWS IoT Greengrass Core ソフトウェアは関数の複数のインスタンスを作成します。

        `maxIdleTimeInSeconds` を使用して、関数の最大アイドル時間を設定します。
      + `timeoutInSeconds` - Lambda 関数がタイムアウトするまでの最大実行時間 (秒)。デフォルト値は 3 秒です。
      + `statusTimeoutInSeconds` – Lambda 関数のコンポーネントが Lambda マネージャーコンポーネントにステータスの更新を送信する間隔 (秒)。このパラメータは、ピン留めされた関数にのみ適用されます。デフォルト値は 60 秒です。
      + `maxIdleTimeInSeconds` – AWS IoT Greengrass Core ソフトウェアがプロセスを停止するまでに、ピン留めされていない Lambda 関数がアイドル状態にできる秒単位の最大時間。デフォルト値は 60 秒です。
      + `maxInstancesCount` – ピン留めされていない Lambda 関数が同時に実行できるインスタンスの最大数。デフォルトは 100 件です。
      + `maxQueueSize` – Lambda 関数コンポーネントのメッセージキューの最大サイズ。 AWS IoT Greengrass Core ソフトウェアは、Lambda 関数を実行して各メッセージを消費できるようになるまで、メッセージを FIFO (first-in-first-outキューに保存します。デフォルトはメッセージ 1,000 件です。

      `lambda-function-component.json` には以下の例のようなドキュメントが含まれる場合があります。

      ```
      {
        "lambdaFunction": {
          "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
          "componentName": "com.example.HelloWorldLambda",
          "componentVersion": "1.0.0",
          "componentPlatforms": [
            {
              "name": "Linux x86",
              "attributes": {
                "os": "linux",
                "architecture": "x86"
              }
            }
          ],
          "componentDependencies": {
            "aws.greengrass.StreamManager": {
              "versionRequirement": "^1.0.0",
              "dependencyType": "HARD"
            }
          },
          "componentLambdaParameters": {
            "eventSources": [
              {
                "topic": "hello/world/+",
                "type": "IOT_CORE"
              }
            ],
            "environmentVariables": {
              "LIMIT": "300"
            },
            "execArgs": [
              "-d"
            ],
            "inputPayloadEncodingType": "json",
            "pinned": true,
            "timeoutInSeconds": 120,
            "statusTimeoutInSeconds": 30,
            "maxIdleTimeInSeconds": 30,
            "maxInstancesCount": 50,
            "maxQueueSize": 500
          }
        }
      }
      ```

   1. (オプション) Lambda 関数のコンテナ設定を行います。デフォルトでは、Lambda 関数は AWS IoT Greengrass Core ソフトウェア内の分離されたランタイム環境で実行されます。また、Lambda 関数を分離されないプロセスとして実行することもできます。コンテナで Lambda 関数を実行する場合は、コンテナのメモリサイズと Lambda 関数で利用できるシステムリソースを設定します。以下の操作を実行します。

      1. Linux プロセスパラメータオブジェクト (`linuxProcessParams`) を、`lambda-function-component.json` の Lambda パラメータオブジェクトに追加します

         ```
         {
           "lambdaFunction": {
             "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
             "componentName": "com.example.HelloWorldLambda",
             "componentVersion": "1.0.0",
             "componentPlatforms": [
               {
                 "name": "Linux x86",
                 "attributes": {
                   "os": "linux",
                   "architecture": "x86"
                 }
               }
             ],
             "componentDependencies": {
               "aws.greengrass.StreamManager": {
                 "versionRequirement": "^1.0.0",
                 "dependencyType": "HARD"
               }
             },
             "componentLambdaParameters": {
               "eventSources": [
                 {
                   "topic": "hello/world/+",
                   "type": "IOT_CORE"
                 }
               ],
               "environmentVariables": {
                 "LIMIT": "300"
               },
               "execArgs": [
                 "-d"
               ],
               "inputPayloadEncodingType": "json",
               "pinned": true,
               "timeoutInSeconds": 120,
               "statusTimeoutInSeconds": 30,
               "maxIdleTimeInSeconds": 30,
               "maxInstancesCount": 50,
               "maxQueueSize": 500,
               "linuxProcessParams": {
               
               }
             }
           }
         }
         ```

      1. (オプション) Lambda 関数をコンテナで実行するかどうかを指定します。`isolationMode` パラメータをプロセスパラメータオブジェクトに追加し、次のオプションから選択します。
         + `GreengrassContainer` – Lambda 関数はコンテナで実行されます。
         + `NoContainer` – Lambda 関数は分離されないプロセスとして実行されます。

         デフォルトは `GreengrassContainer` です。

      1. (オプション) コンテナで Lambda 関数を実行する場合、コンテナを利用できるメモリの量とシステムリソース (ボリュームやデバイスなど) を設定できます。以下の操作を実行します。

         1. コンテナパラメータオブジェクト (`containerParams`) を、`lambda-function-component.json` の Linux プロセスパラメータオブジェクトに追加します

            ```
            {
              "lambdaFunction": {
                "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                "componentName": "com.example.HelloWorldLambda",
                "componentVersion": "1.0.0",
                "componentPlatforms": [
                  {
                    "name": "Linux x86",
                    "attributes": {
                      "os": "linux",
                      "architecture": "x86"
                    }
                  }
                ],
                "componentDependencies": {
                  "aws.greengrass.StreamManager": {
                    "versionRequirement": "^1.0.0",
                    "dependencyType": "HARD"
                  }
                },
                "componentLambdaParameters": {
                  "eventSources": [
                    {
                      "topic": "hello/world/+",
                      "type": "IOT_CORE"
                    }
                  ],
                  "environmentVariables": {
                    "LIMIT": "300"
                  },
                  "execArgs": [
                    "-d"
                  ],
                  "inputPayloadEncodingType": "json",
                  "pinned": true,
                  "timeoutInSeconds": 120,
                  "statusTimeoutInSeconds": 30,
                  "maxIdleTimeInSeconds": 30,
                  "maxInstancesCount": 50,
                  "maxQueueSize": 500,
                  "linuxProcessParams": {
                    "containerParams": {
                    
                    }
                  }
                }
              }
            }
            ```

         1. (オプション) `memorySizeInKB` パラメータを追加して、コンテナのメモリサイズを指定します。デフォルトは 16,384 KB (16 MB) です。

         1. (オプション) `mountROSysfs`パラメータを追加して、コンテナがデバイスの `/sys` フォルダから情報を読み取れるかどうかを指定します。デフォルトは `false` です。

         1. (オプション) コンテナ化された Lambda 関数がアクセスできるローカルボリュームを設定します。ボリュームを定義すると、 AWS IoT Greengrass Core ソフトウェアはソースファイルをコンテナ内の宛先にマウントします。以下の操作を実行します。

            1. ボリュームのリスト (`volumes`) をコンテナパラメータに追加します。

               ```
               {
                 "lambdaFunction": {
                   "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                   "componentName": "com.example.HelloWorldLambda",
                   "componentVersion": "1.0.0",
                   "componentPlatforms": [
                     {
                       "name": "Linux x86",
                       "attributes": {
                         "os": "linux",
                         "architecture": "x86"
                       }
                     }
                   ],
                   "componentDependencies": {
                     "aws.greengrass.StreamManager": {
                       "versionRequirement": "^1.0.0",
                       "dependencyType": "HARD"
                     }
                   },
                   "componentLambdaParameters": {
                     "eventSources": [
                       {
                         "topic": "hello/world/+",
                         "type": "IOT_CORE"
                       }
                     ],
                     "environmentVariables": {
                       "LIMIT": "300"
                     },
                     "execArgs": [
                       "-d"
                     ],
                     "inputPayloadEncodingType": "json",
                     "pinned": true,
                     "timeoutInSeconds": 120,
                     "statusTimeoutInSeconds": 30,
                     "maxIdleTimeInSeconds": 30,
                     "maxInstancesCount": 50,
                     "maxQueueSize": 500,
                     "linuxProcessParams": {
                       "containerParams": {
                         "memorySizeInKB": 32768,
                         "mountROSysfs": true,
                         "volumes": [
                         
                         ]
                       }
                     }
                   }
                 }
               }
               ```

            1. 各ボリュームをリストに追加します。各ボリュームには以下のパラメータがあります。
               + `sourcePath` – コアデバイスのソースフォルダへのパス。
               + `destinationPath` – コンテナの保存先フォルダへのパス。
               + `permission` - (オプション) コンテナからソースフォルダへのアクセス権限。次のオプションから選択します。
                 + `ro` – Lambda 関数はソースフォルダへの読み取り専用アクセス権が与えられます。
                 + `rw` – Lambda 関数はソースフォルダへの読み取り/書き込みアクセス権が与えられます。

                 デフォルトは `ro` です。
               + `addGroupOwner` – (オプション) Lambda 関数コンポーネントを実行するシステムグループをソースフォルダの所有者として追加するかどうか。デフォルトは `false` です。

               `lambda-function-component.json` には以下の例のようなドキュメントが含まれる場合があります。

               ```
               {
                 "lambdaFunction": {
                   "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                   "componentName": "com.example.HelloWorldLambda",
                   "componentVersion": "1.0.0",
                   "componentPlatforms": [
                     {
                       "name": "Linux x86",
                       "attributes": {
                         "os": "linux",
                         "architecture": "x86"
                       }
                     }
                   ],
                   "componentDependencies": {
                     "aws.greengrass.StreamManager": {
                       "versionRequirement": "^1.0.0",
                       "dependencyType": "HARD"
                     }
                   },
                   "componentLambdaParameters": {
                     "eventSources": [
                       {
                         "topic": "hello/world/+",
                         "type": "IOT_CORE"
                       }
                     ],
                     "environmentVariables": {
                       "LIMIT": "300"
                     },
                     "execArgs": [
                       "-d"
                     ],
                     "inputPayloadEncodingType": "json",
                     "pinned": true,
                     "timeoutInSeconds": 120,
                     "statusTimeoutInSeconds": 30,
                     "maxIdleTimeInSeconds": 30,
                     "maxInstancesCount": 50,
                     "maxQueueSize": 500,
                     "linuxProcessParams": {
                       "containerParams": {
                         "memorySizeInKB": 32768,
                         "mountROSysfs": true,
                         "volumes": [
                           {
                             "sourcePath": "/var/data/src",
                             "destinationPath": "/var/data/dest",
                             "permission": "rw",
                             "addGroupOwner": true
                           }
                         ]
                       }
                     }
                   }
                 }
               }
               ```

         1. (オプション) コンテナ化された Lambda 関数がアクセスできるローカルシステムデバイスを設定します。以下の操作を実行します。

            1. システムデバイスのリスト (`devices`) をコンテナパラメータに追加します。

               ```
               {
                 "lambdaFunction": {
                   "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                   "componentName": "com.example.HelloWorldLambda",
                   "componentVersion": "1.0.0",
                   "componentPlatforms": [
                     {
                       "name": "Linux x86",
                       "attributes": {
                         "os": "linux",
                         "architecture": "x86"
                       }
                     }
                   ],
                   "componentDependencies": {
                     "aws.greengrass.StreamManager": {
                       "versionRequirement": "^1.0.0",
                       "dependencyType": "HARD"
                     }
                   },
                   "componentLambdaParameters": {
                     "eventSources": [
                       {
                         "topic": "hello/world/+",
                         "type": "IOT_CORE"
                       }
                     ],
                     "environmentVariables": {
                       "LIMIT": "300"
                     },
                     "execArgs": [
                       "-d"
                     ],
                     "inputPayloadEncodingType": "json",
                     "pinned": true,
                     "timeoutInSeconds": 120,
                     "statusTimeoutInSeconds": 30,
                     "maxIdleTimeInSeconds": 30,
                     "maxInstancesCount": 50,
                     "maxQueueSize": 500,
                     "linuxProcessParams": {
                       "containerParams": {
                         "memorySizeInKB": 32768,
                         "mountROSysfs": true,
                         "volumes": [
                           {
                             "sourcePath": "/var/data/src",
                             "destinationPath": "/var/data/dest",
                             "permission": "rw",
                             "addGroupOwner": true
                           }
                         ],
                         "devices": [
                         
                         ]
                       }
                     }
                   }
                 }
               }
               ```

            1. 各システムデバイスをリストに追加します。各システムデバイスには以下のパラメータがあります。
               + `path` – コアデバイスのシステムデバイスへのパス。
               + `permission` – (オプション) コンテナからシステムデバイスへのアクセス権限。次のオプションから選択します。
                 + `ro` – Lambda 関数はシステムデバイスへの読み取り専用アクセス権が与えられます。
                 + `rw` – Lambda 関数はシステムデバイスへの読み取り/書き込みアクセス権が与えられます。

                 デフォルトは `ro` です。
               + `addGroupOwner` – (オプション) Lambda 関数コンポーネントを実行するシステムグループをシステムデバイスの所有者として追加するかどうか。デフォルトは `false` です。

            `lambda-function-component.json` には以下の例のようなドキュメントが含まれる場合があります。

            ```
            {
              "lambdaFunction": {
                "lambdaArn": "arn:aws:lambda:region:account-id:function:HelloWorld:1",
                "componentName": "com.example.HelloWorldLambda",
                "componentVersion": "1.0.0",
                "componentPlatforms": [
                  {
                    "name": "Linux x86",
                    "attributes": {
                      "os": "linux",
                      "architecture": "x86"
                    }
                  }
                ],
                "componentDependencies": {
                  "aws.greengrass.StreamManager": {
                    "versionRequirement": "^1.0.0",
                    "dependencyType": "HARD"
                  }
                },
                "componentLambdaParameters": {
                  "eventSources": [
                    {
                      "topic": "hello/world/+",
                      "type": "IOT_CORE"
                    }
                  ],
                  "environmentVariables": {
                    "LIMIT": "300"
                  },
                  "execArgs": [
                    "-d"
                  ],
                  "inputPayloadEncodingType": "json",
                  "pinned": true,
                  "timeoutInSeconds": 120,
                  "statusTimeoutInSeconds": 30,
                  "maxIdleTimeInSeconds": 30,
                  "maxInstancesCount": 50,
                  "maxQueueSize": 500,
                  "linuxProcessParams": {
                    "containerParams": {
                      "memorySizeInKB": 32768,
                      "mountROSysfs": true,
                      "volumes": [
                        {
                          "sourcePath": "/var/data/src",
                          "destinationPath": "/var/data/dest",
                          "permission": "rw",
                          "addGroupOwner": true
                        }
                      ],
                      "devices": [
                        {
                          "path": "/dev/sda3",
                          "permission": "rw",
                          "addGroupOwner": true
                        }
                      ]
                    }
                  }
                }
              }
            }
            ```

1. (オプション) コンポーネントのタグ (`tags`) を追加します。詳細については、「[AWS IoT Greengrass Version 2 リソースにタグを付ける](tag-resources.md)」を参照してください。

## ステップ 2: Lambda 関数コンポーネントを作成する
<a name="create-lambda-component-cli"></a>

1. 以下のコマンドを実行して、`lambda-function-component.json` から Lambda 関数コンポーネントを作成します。

   ```
   aws greengrassv2 create-component-version --cli-input-json file://lambda-function-component.json
   ```

   リクエストが成功すると、レスポンスは次の例のようになります。

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorldLambda:versions:1.0.0",
     "componentName": "com.example.HelloWorldLambda",
     "componentVersion": "1.0.0",
     "creationTimestamp": "Mon Dec 15 20:56:34 UTC 2020",
     "status": {
       "componentState": "REQUESTED",
       "message": "NONE",
       "errors": {}
     }
   }
   ```

   次のステップでコンポーネントの状態をチェックするために、出力から `arn` をコピーします。

1. コンポーネントを作成すると、その状態は `REQUESTED` になります。次に、 はコンポーネントがデプロイ可能であることを AWS IoT Greengrass 検証します。次のコマンドを実行して、コンポーネントのステータスを照会し、コンポーネントがデプロイ可能であることを確認します。`arn` を、前のステップで書き留めた ARN に置き換えます。

   ```
   aws greengrassv2 describe-component \
     --arn "arn:aws:greengrass:region:account-id:components:com.example.HelloWorldLambda:versions:1.0.0"
   ```

   コンポーネントが検証されると、レスポンスでコンポーネントの状態が `DEPLOYABLE` であることが示されます。

   ```
   {
     "arn": "arn:aws:greengrass:region:account-id:components:com.example.HelloWorldLambda:versions:1.0.0",
     "componentName": "com.example.HelloWorldLambda",
     "componentVersion": "1.0.0",
     "creationTimestamp": "2020-12-15T20:56:34.376000-08:00",
     "publisher": "AWS Lambda",
     "status": {
       "componentState": "DEPLOYABLE",
       "message": "NONE",
       "errors": {}
     },
     "platforms": [
       {
         "name": "Linux x86",
         "attributes": {
           "architecture": "x86",
           "os": "linux"
         }
       }
     ]
   }
   ```

   コンポーネントが `DEPLOYABLE` になった後は、Lambda 関数をコアデバイスにデプロイできます。詳細については、「[AWS IoT Greengrass コンポーネントをデバイスにデプロイする](manage-deployments.md)」を参照してください。