

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

# ステップ 5: AWS IoT Greengrass サービスでコンポーネントを作成する
<a name="upload-first-component"></a>

コアデバイスでのコンポーネントの開発が完了したら、コンポーネントを AWS クラウドの AWS IoT Greengrass サービスにアップロードすることができます。また、コンポーネントを[AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass)で直接作成することもできます。 AWS IoT Greengrass はコンポーネントをホストするコンポーネント管理サービスを提供するため、個々のデバイスやデバイスのフリートにデプロイすることができます。コンポーネントを AWS IoT Greengrass サービスにアップロードするには、次の手順を実行します。
+ コンポーネントのアーティファクトを S3 バケットにのアップロードします。
+ 各アーティファクトの Amazon Simple Storage Service (Amazon S3) URI をコンポーネント recipe に追加します。
+ コンポーネントレシピ AWS IoT Greengrass から にコンポーネントを作成します。

このセクションでは、Greengrass コアデバイスでこれらのステップを完了して、Hello World コンポーネントを AWS IoT Greengrass サービスにアップロードします。

## でコンポーネントを作成する AWS IoT Greengrass (コンソール)
<a name="upload-first-component-console"></a>

1.  AWS アカウントの S3 バケットを使用して、 AWS IoT Greengrass コンポーネントアーティファクトをホストします。コンポーネントをコアデバイスにデプロイすると、デバイスがバケットからコンポーネントのアーティファクトをダウンロードします。

   既存の S3 バケットを使用するか、新しいバケットを作成することができます。

   1. [Amazon S3 コンソール](https://console.aws.amazon.com/s3)で **[Buckets]** (バケット)、**[Create bucket]** (バケットの作成) の順に選択します。

   1. **[Bucket name]** (バケット名) に、一意のバケット名前を入力します。たとえば、**greengrass-component-artifacts-*region*-*123456789012*** を使用できます。*123456789012* を AWS アカウント ID に置き換え、*リージョン* AWS リージョン をこのチュートリアルで使用する に置き換えます。

   1. **AWS リージョン**の場合は、このチュートリアルで使用する AWS リージョンを選択します。

   1. **[Create bucket]** (バケットの作成) を選択します。

   1. **[Buckets]** (バケット) で作成したバケットを選択し、`hello_world.py` スクリプトをバケット内の `artifacts/com.example.HelloWorld/1.0.0` フォルダにアップロードします。オブジェクトを S3 バケットにアップロードする方法の詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[オブジェクトのアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)」を参照してください。

   1. S3 バケット内にある `hello_world.py` オブジェクトの S3 URI をコピーします。この URI は次の例のようになります。amzn-s3-demo-bucket を S3 バケットの名前に置き換えます。

      ```
      s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
      ```

1. <a name="core-device-allow-s3-bucket-access-console"></a><a name="core-device-allow-s3-bucket-access-console-intro-1"></a>コアデバイスが S3 バケット内のコンポーネントアーティファクトにアクセスすることを許可します。

   <a name="core-device-allow-s3-bucket-access-console-intro-2"></a>各コアデバイスには、 とやり取り AWS IoT して AWS クラウドにログを送信できるようにする[コアデバイス IAM ロール](device-service-role.md)があります。このデバイスロールは、デフォルトでは S3 バケットへのアクセスを許可しないため、コアデバイスが S3 バケットからコンポーネントアーティファクトを取得できるようにするポリシーを作成して、アタッチする必要があります。

   <a name="core-device-allow-s3-bucket-access-console-intro-3"></a>デバイスのロールで S3 バケットへのアクセスが既に許可されている場合は、このステップを省略できます。そうでない場合は、次に示す方法で、アクセスを許可する IAM ポリシーを作成し、ロールにアタッチします。

   1. <a name="core-device-allow-s3-bucket-access-console-step-1"></a>[[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) ナビゲーションメニューで、**[Policies]** (ポリシー) を選択し、**[Create policy]** (ポリシーの作成) を選択します。

   1. <a name="core-device-allow-s3-bucket-access-console-step-2"></a>**JSON** タブで、プレースホルダーコンテンツを以下のポリシーに置き換えます。amzn-s3-demo-bucket をコアデバイスでダウンロードするコンポーネントアーティファクトが含まれる S3 バケットの名前に置き換えます。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
          }
        ]
      }
      ```

   1. <a name="core-device-allow-s3-bucket-access-console-step-3"></a>[**次へ**] を選択します。

   1. <a name="core-device-allow-s3-bucket-access-console-step-4"></a>**[ポリシーの詳細セクション]** で、**[名前]** に「**MyGreengrassV2ComponentArtifactPolicy**」と入力します。

   1. <a name="core-device-allow-s3-bucket-access-console-step-5"></a>[**Create policy**] (ポリシーの作成) を選択します。

   1. <a name="core-device-allow-s3-bucket-access-console-step-6"></a>[[IAM console]](https://console.aws.amazon.com/iam) (IAM コンソール) ナビゲーションメニューで、**[Role]** (ロール) をクリックし、コアデバイスのロールの名前を選択します。 AWS IoT Greengrass Core ソフトウェアのインストール時にこのロール名を指定しました。名前を指定していない場合、デフォルトで `GreengrassV2TokenExchangeRole` が設定されます。

   1. <a name="core-device-allow-s3-bucket-access-console-step-7"></a>**[Permissions]** (アクセス許可) タブを選択し、**[Add permissions]** (アクセス許可の追加) を選択してから、**[Attach policies]** (ポリシーの添付) を選択します。

   1. <a name="core-device-allow-s3-bucket-access-console-step-8"></a>**[アクセス許可の追加]** ページで、作成した `MyGreengrassV2ComponentArtifactPolicy` ポリシーの横にあるチェックボックスを選択し、**[アクセス許可の追加]** を選択します。

1. コンポーネント recipe を使用して、[AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass)にコンポーネントを作成します。

   1. [AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass)のナビゲーションメニューで、**[Components]** (コンポーネント) 、**[Create component]** (コンポーネントを作成) の順に選択します。

   1. **[Component information]** (コンポーネント情報) で、**[Enter recipe as JSON]** (recipe を JSON として入力します) を選択します。プレースホルダ recipe は、次の例のようになります。

      ```
      {
        "RecipeFormatVersion": "2020-01-25",
        "ComponentName": "com.example.HelloWorld",
        "ComponentVersion": "1.0.0",
        "ComponentDescription": "My first AWS IoT Greengrass component.",
        "ComponentPublisher": "Amazon",
        "ComponentConfiguration": {
          "DefaultConfiguration": {
            "Message": "world"
          }
        },
        "Manifests": [
          {
            "Platform": {
              "os": "linux"
            },
            "Lifecycle": {
              "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
            },
            "Artifacts": [
              {
                "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
              }
            ]
          },
          {
            "Platform": {
              "os": "windows"
            },
            "Lifecycle": {
              "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
            },
            "Artifacts": [
              {
                "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
              }
            ]
          }
        ]
      }
      ```

   1. 各 `Artifacts` セクションにあるプレースホルダー URI を、`hello_world.py` オブジェクトの S3 URI に置き換えます。

   1. **[Create component]** (コンポーネントの作成) を選択します。

   1. **com.example.HelloWorld** コンポーネントページで、コンポーネントの **[Status]** (ステータス) が **[Deployable]** (デプロイ可能) になっていることを確認します。

## ( AWS IoT Greengrass AWS CLI) でコンポーネントを作成する
<a name="upload-first-component-cli"></a>

**Hello World コンポーネントをアップロードするには**

1. で S3 バケット AWS アカウント を使用して、 AWS IoT Greengrass コンポーネントアーティファクトをホストします。コンポーネントをコアデバイスにデプロイすると、デバイスがバケットからコンポーネントのアーティファクトをダウンロードします。

   既存の S3 バケットを使用するか、次のコマンドを実行してバケットを作成します。このコマンドは、 AWS アカウント ID と を使用してバケットを作成し AWS リージョン 、一意のバケット名を作成します。*123456789012* を AWS アカウント ID に置き換え、*リージョン* AWS リージョン をこのチュートリアルで使用する に置き換えます。

   ```
   aws s3 mb s3://greengrass-component-artifacts-123456789012-region
   ```

   以下は、リクエストが成功した場合の出力です。

   ```
   make_bucket: greengrass-component-artifacts-123456789012-region
   ```

1. <a name="core-device-allow-s3-bucket-access-cli"></a>コアデバイスが S3 バケット内のコンポーネントアーティファクトにアクセスすることを許可します。

   各コアデバイスには、 とのやり取り AWS IoT と へのログの送信を許可する[コアデバイス IAM ロール](device-service-role.md)があります AWS クラウド。このデバイスロールは、デフォルトでは S3 バケットへのアクセスを許可しないため、コアデバイスが S3 バケットからコンポーネントアーティファクトを取得できるようにするポリシーを作成して、アタッチする必要があります。

   コアデバイスのロールで S3 バケットへのアクセスが既に許可されている場合は、このステップを省略できます。そうでない場合は、次に示す方法で、アクセスを許可する IAM ポリシーを作成し、ロールにアタッチします。

   1. `component-artifact-policy.json` という名前のファイルを作成して、次の JSON をファイルにコピーします。このポリシーは、S3 バケット内のすべてのファイルへのアクセスを許可します。amzn-s3-demo-bucket を S3 バケットの名前に置き換えます。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
          }
        ]
      }
      ```

   1. 次のコマンドを実行して、`component-artifact-policy.json` のポリシードキュメントからポリシーを作成します。

------
#### [ Linux or Unix ]

      ```
      aws iam create-policy \\
        --policy-name MyGreengrassV2ComponentArtifactPolicy \\
        --policy-document file://component-artifact-policy.json
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iam create-policy ^
        --policy-name MyGreengrassV2ComponentArtifactPolicy ^
        --policy-document file://component-artifact-policy.json
      ```

------
#### [ PowerShell ]

      ```
      aws iam create-policy `
        --policy-name MyGreengrassV2ComponentArtifactPolicy `
        --policy-document file://component-artifact-policy.json
      ```

------

      出力のポリシーメタデータから、ポリシーの Amazon リソースネーム (ARN) をコピーします。この ARN を使用して、次の手順で、このポリシーをコアデバイスのロールにアタッチします。

   1. 次のコマンドを実行して、ポリシーをコアデバイスのロールにアタッチします。*GreengrassV2TokenExchangeRole* を、コアデバイスのロール名に置き換えます。 AWS IoT Greengrass Core ソフトウェアのインストール時にこのロール名を指定しました。ポリシー ARN を、前のステップで書き留めた ARN に置き換えます。

------
#### [ Linux or Unix ]

      ```
      aws iam attach-role-policy \\
        --role-name GreengrassV2TokenExchangeRole \\
        --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iam attach-role-policy ^
        --role-name GreengrassV2TokenExchangeRole ^
        --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      ```

------
#### [ PowerShell ]

      ```
      aws iam attach-role-policy `
        --role-name GreengrassV2TokenExchangeRole `
        --policy-arn arn:aws:iam::123456789012:policy/MyGreengrassV2ComponentArtifactPolicy
      ```

------

      成功した場合は、コマンドからの出力はありません。コアデバイスが、この S3 バケットにアップロードしたアーティファクトにアクセスできるようになりました。

1. Hello World Python スクリプトアーティファクトを S3 バケットにアップロードします。

   次のコマンドを実行して、スクリプトが AWS IoT Greengrass コアに存在するバケット内の同じパスにスクリプトをアップロードします。amzn-s3-demo-bucket を S3 バケットの名前に置き換えます。

------
#### [ Linux or Unix ]

   ```
   aws s3 cp \
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py \
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   aws s3 cp ^
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py ^
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------
#### [ PowerShell ]

   ```
   aws s3 cp `
     artifacts/com.example.HelloWorld/1.0.0/hello_world.py `
     s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------

   リクエストが成功した場合、コマンドは `upload:` で始まる行を出力します。

1. アーティファクトの Amazon S3 URI をコンポーネント recipe に追加します。

   Amazon S3 URI は、バケット名とバケット内のアーティファクトオブジェクトへのパスで設定されます。スクリプトアーティファクトの Amazon S3 URI は、前のステップでアーティファクトをアップロードした URI です。この URI は次の例のようになります。amzn-s3-demo-bucket を S3 バケットの名前に置き換えます。

   ```
   s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   アーティファクトを recipe に追加するには、Amazon S3 URI の構造が含まれる `Artifacts` のリストを追加します。

------
#### [ JSON ]

   ```
   "Artifacts": [
     {
       "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
     }
   ]
   ```

   テキストエディタで recipe ファイルを開きます。

   <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

   ```
   nano recipes/com.example.HelloWorld-1.0.0.json
   ```

   アーティファクトを recipe に追加します。recipe ファイルは次の例のようになります。

   ```
   {
     "RecipeFormatVersion": "2020-01-25",
     "ComponentName": "com.example.HelloWorld",
     "ComponentVersion": "1.0.0",
     "ComponentDescription": "My first AWS IoT Greengrass component.",
     "ComponentPublisher": "Amazon",
     "ComponentConfiguration": {
       "DefaultConfiguration": {
         "Message": "world"
       }
     },
     "Manifests": [
       {
         "Platform": {
           "os": "linux"
         },
         "Lifecycle": {
           "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
           }
         ]
       },
       {
         "Platform": {
           "os": "windows"
         },
         "Lifecycle": {
           "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\""
         },
         "Artifacts": [
           {
             "URI": "s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py"
           }
         ]
       }
     ]
   }
   ```

------
#### [ YAML ]

   ```
   Artifacts:
     - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

   テキストエディタで recipe ファイルを開きます。

   <a name="nano-command-intro"></a>例えば、Linux ベースのシステムでは、次のコマンドを実行し、GNU nano を使用してファイルを作成できます。

   ```
   nano recipes/com.example.HelloWorld-1.0.0.yaml
   ```

   アーティファクトを recipe に追加します。recipe ファイルは次の例のようになります。

   ```
   ---
   RecipeFormatVersion: '2020-01-25'
   ComponentName: com.example.HelloWorld
   ComponentVersion: '1.0.0'
   ComponentDescription: My first AWS IoT Greengrass component.
   ComponentPublisher: Amazon
   ComponentConfiguration:
     DefaultConfiguration:
       Message: world
   Manifests:
     - Platform:
         os: linux
       Lifecycle:
         Run: |
           python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
     - Platform:
         os: windows
       Lifecycle:
         Run: |
           py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"
       Artifacts:
         - URI: s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
   ```

------

1. レシピ AWS IoT Greengrass から にコンポーネントリソースを作成します。次のコマンドを実行して、recipe からコンポーネントを作成します。このコンポーネントをバイナリファイルとして提供します。

------
#### [ JSON ]

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.json
   ```

------
#### [ YAML ]

   ```
   aws greengrassv2 create-component-version --inline-recipe fileb://recipes/com.example.HelloWorld-1.0.0.yaml
   ```

------

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

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0",
     "componentName": "com.example.HelloWorld",
     "componentVersion": "1.0.0",
     "creationTimestamp": "Mon Nov 30 09:04:05 UTC 2020",
     "status": {
       "componentState": "REQUESTED",
       "message": "NONE",
       "errors": {}
     }
   }
   ```

   次のステップでコンポーネントの状態をチェックするために、出力から `arn` をコピーします。
**注記**  
Hello World コンポーネントは、[AWS IoT Greengrass コンソール](https://console.aws.amazon.com/greengrass)の **[Components]** (コンポーネント) ページでも確認できます。

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

   ```
   aws greengrassv2 describe-component --arn "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0"
   ```

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

   ```
   {
     "arn": "arn:aws:greengrass:region:123456789012:components:com.example.HelloWorld:versions:1.0.0",
     "componentName": "com.example.HelloWorld",
     "componentVersion": "1.0.0",
     "creationTimestamp": "2020-11-30T18:04:05.823Z",
     "publisher": "Amazon",
     "description": "My first Greengrass component.",
     "status": {
       "componentState": "DEPLOYABLE",
       "message": "NONE",
       "errors": {}
     },
     "platforms": [
       {
         "os": "linux",
         "architecture": "all"
       }
     ]
   }
   ```

Hello World コンポーネントが で使用できるようになりました AWS IoT Greengrass。この Greengrass コアデバイスまたは他のコアデバイスにデプロイして戻すことができます。