

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

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

# グループの一括デプロイを作成する
<a name="bulk-deploy-cli"></a>

 シンプルな API コールを使用して、多数の Greengrass グループを一度にデプロイできます。これらのデプロイは、上限が固定された適応レートでトリガーされます。

 このチュートリアルでは、 を使用して AWS CLI で一括グループデプロイを作成およびモニタリングする方法について説明します AWS IoT Greengrass。このチュートリアルの一括デプロイ例には、複数のグループが含まれています。この例をお客様の実装に使用して、必要な数のグループを追加できます。

 このチュートリアルのおおまかな手順は以下のとおりです。

1. [一括デプロイ入力ファイルを作成してアップロードする](#bulk-deploy-cli-create-input-file)

1. [一括デプロイ用の IAM 実行ロールを作成および設定する](#bulk-deploy-cli-create-role)

1. [実行ロールに S3 バケットへのアクセスを許可する](#bulk-deploy-cli-modify-bucket)

1. [グループをデプロイする](#bulk-deploy-cli-start-bulk-deployments)

1. [デプロイをテストする](#bulk-deploy-cli-test)

## 前提条件
<a name="bulk-deploy-cli-prerequisites"></a>

 このチュートリアルを完了するには、以下が必要です。
+  1 つ以上のデプロイ可能な Greengrass グループ。 AWS IoT Greengrass のグループと Core の作成の詳細については、「[の開始方法 AWS IoT Greengrass](gg-gs.md)」を参照してください。
+  マシンに AWS CLI インストールおよび設定されている 。詳細については、「[AWS CLI ユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」を参照してください。
+  AWS リージョン と同じ で作成された S3 バケット AWS IoT Greengrass。新しいバケットの作成の詳細については、「Amazon Simple Storage Service ユーザーガイド」の「[Amazon S3 バケットの作成、設定、操作](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-configure-bucket.html)」を参照してください。
**注記**  
 現在、SSE KMS 対応バケットはサポートされていません。

## ステップ 1: 一括デプロイ入力ファイルを作成してアップロードする
<a name="bulk-deploy-cli-create-input-file"></a>

 このステップでは、デプロイ入力ファイルを作成し、Amazon S3 バケットにアップロードします。このファイルは、一括デプロイの各グループに関する情報を含むシリアル化された行区切りの JSON ファイルです。 AWS IoT Greengrass は、一括グループのデプロイを初期化するときに、この情報を使用してユーザーに代わって各グループをデプロイします。

1.  以下のコマンドを実行して、デプロイするグループごとに `groupId` を取得します。デプロイする各グループが AWS IoT Greengrass によって識別されるように、`groupId` を一括デプロイ入力ファイルに入力します。
**注記**  
<a name="find-group-ids-console"></a>これらの値は AWS IoT コンソールでも確認できます。グループ ID は、グループの [**設定**] ページに表示されます。グループバージョン ID は、グループの **[デプロイ]** タブに表示されます。

   ```
   aws greengrass list-groups
   ```

    レスポンスには、 AWS IoT Greengrass アカウント内の各グループに関する情報が含まれます。

   ```
   {
     "Groups": [
       {
         "Name": "string",
         "Id": "string",
         "Arn": "string",
         "LastUpdatedTimestamp": "string",
         "CreationTimestamp": "string",
         "LatestVersion": "string",
         "LatestVersionArn": "string"
       }
     ],
     "NextToken": "string"
   }
   ```

    以下のコマンドを実行して、デプロイするグループごとに `groupVersionId` を取得します。

   ```
   list-group-versions --group-id groupId
   ```

    レスポンスには、グループのすべてのバージョンに関する情報が含まれています。使用するグループバージョンの `Version` の値を記録します。

   ```
   {
     "Versions": [
       {
         "Arn": "string",
         "Id": "string",
         "Version": "string",
         "CreationTimestamp": "string"
       }
     ],
     "NextToken": "string"
   }
   ```

1.  使用しているコンピュータのターミナルまたはエディタで、以下の例の *MyBulkDeploymentInputFile* というファイルを作成します。このファイルには、一括デプロイに含める各 AWS IoT Greengrass グループに関する情報が含まれています。この例では複数のグループを定義していますが、このチュートリアルでは 1 つのグループを定義するだけでもかまいません。
**注記**  
 このファイルのサイズは 100 MB 未満であることが必要です。

   ```
   {"GroupId":"groupId1", "GroupVersionId":"groupVersionId1", "DeploymentType":"NewDeployment"}
   {"GroupId":"groupId2", "GroupVersionId":"groupVersionId2", "DeploymentType":"NewDeployment"}
   {"GroupId":"groupId3", "GroupVersionId":"groupVersionId3", "DeploymentType":"NewDeployment"}
   ...
   ```

    各レコード (行) には、グループオブジェクトが含まれています。各グループオブジェクトには、対応する `GroupId` と `GroupVersionId`、および `DeploymentType` が含まれています。現在、 は`NewDeployment`一括デプロイタイプのみ AWS IoT Greengrass をサポートしています。

    このファイルを保存して閉じます。ファイルの場所を記録します。

1.  ターミナルで以下のコマンドを使用して、入力ファイルを Amazon S3 バケットにアップロードします。ファイルパスを先ほどのファイルの場所と名前に置き換えます。詳細については、「[バケットへのオブジェクトの追加](https://docs.aws.amazon.com/AmazonS3/latest/gsg/PuttingAnObjectInABucket.html)」を参照してください。

   ```
   aws s3 cp path/MyBulkDeploymentInputFile s3://amzn-s3-demo-bucket/
   ```

## ステップ 2: IAM 実行ロールを作成して設定する
<a name="bulk-deploy-cli-create-role"></a>

 このステップでは、IAM コンソールを使用してスタンドアロンの実行ロールを作成します。次に、ロールと の間に信頼関係を確立 AWS IoT Greengrass し、IAM ユーザーに実行ロールに対する`PassRole`権限があることを確認します。これにより、 AWS IoT Greengrass は実行ロールを引き受け、ユーザーに代わってデプロイを作成できます。

1.  以下のポリシーを使用して、実行ロールを作成します。このポリシードキュメントでは、お客様に代わって各デプロイを作成するときに一括デプロイ入力ファイルにアクセスすることを AWS IoT Greengrass に許可します。

    IAM ロールの作成とアクセス許可の委任の詳細については、「[IAM ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)」を参照してください。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": "greengrass:CreateDeployment",
               "Resource": [
               "arn:aws:greengrass:us-east-1:123456789012:/greengrass/groups/groupId1",
       "arn:aws:greengrass:us-east-1:123456789012:/greengrass/groups/groupId2",
       "arn:aws:greengrass:us-east-1:123456789012:/greengrass/groups/groupId3"
               ]
           }
       ]
   }
   ```

------
**注記**  
 このポリシーでは、 AWS IoT Greengrassによってデプロイされる一括デプロイ入力ファイル内の各グループまたはグループバージョン用にリソースが必要です。すべてのグループにアクセスを許可するには、`Resource` でアスタリスクを指定します。  

   ```
   "Resource": ["*"]
   ```

1.  AWS IoT Greengrassを含めるように実行ロールの信頼関係を変更します。これにより、 AWS IoT Greengrass は実行ロールとそれにアタッチされたアクセス許可を使用できます。詳細については、「[既存のロールの信頼関係の編集](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html)」を参照してください。

   また、`aws:SourceArn` と `aws:SourceAccount` のグローバル条件コンテキストキーを信頼ポリシーに加えることで、「混乱した代理」によるセキュリティ上の問題への対策にすることをお勧めします。条件コンテキストキーを使用すると、指定したアカウントと Greengrass ワークスペースからのリクエストのみを許可するようにアクセスを制限できます。「混乱した代理」問題の詳細については、「[サービス間の混乱した代理の防止](cross-service-confused-deputy-prevention.md)」を参照してください。

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "",
         "Effect": "Allow",
         "Principal": {
           "Service": "greengrass.amazonaws.com"
         },
         "Action": "sts:AssumeRole",
         "Condition": {
           "StringEquals": {
           "aws:SourceAccount": "123456789012"
           },
           "ArnLike": {
             "aws:SourceArn": "arn:aws:greengrass:us-east-1:123456789012:*"
           }
         }
       }
     ]
   }
   ```

------

1.  実行ロールの IAM `PassRole` アクセス許可を IAM ユーザーに付与します。この IAM ユーザーは、一括デプロイを開始するために使用されます。`PassRole` アクセス許可により、IAM ユーザーは実行ロールを AWS IoT Greengrass に渡せるようになります。詳細については、[「 AWS サービスにロールを渡すアクセス許可をユーザーに付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)」を参照してください。

    次の例を参考にして、実行ロールにアタッチされた IAM ポリシーを更新します。必要に応じて、この例を変更します。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Stmt1508193814000",
               "Effect": "Allow",
               "Action": [
                   "iam:PassRole"
               ],
               "Resource": [
                   "arn:aws:iam::123456789012:user/executionRoleArn"
               ],
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": "greengrass.amazonaws.com"
                   }
               }
           }
       ]
   }
   ```

------

## ステップ 3: 実行ロールに S3 バケットへのアクセスを許可する
<a name="bulk-deploy-cli-modify-bucket"></a>

 一括デプロイを開始するには、実行ロールが Amazon S3 バケットから一括デプロイ入力ファイルを読み取ることができる必要があります。以下のポリシー例を Amazon S3 バケットにアタッチして、そのバケットに対する `GetObject` アクセス許可が実行ロールに付与されるようにします。

 詳細については、「[S3 バケットポリシーを追加する方法](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html)」を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "examplePolicy",
    "Statement": [
        {
            "Sid": "Stmt1535408982966",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "executionRoleArn"
                ]
            },
            "Action": "s3:GetObject",
            "Resource":
            "arn:aws:s3:::amzn-s3-demo-bucket/objectKey"
        }
    ]
}
```

------

 ターミナルで以下のコマンドを使用して、バケットのポリシーを確認できます。

```
aws s3api get-bucket-policy --bucket amzn-s3-demo-bucket
```

**注記**  
 代わりに、Amazon S3 バケットに対する `GetObject` アクセス許可が実行ロールに付与されるように、そのロールを直接変更することもできます。そのためには、以下のポリシー例を実行ロールにアタッチします。  

****  

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

## ステップ 4: グループをデプロイする
<a name="bulk-deploy-cli-start-bulk-deployments"></a>

 このステップでは、一括デプロイ入力ファイルで設定したすべてのグループバージョンに対して一括デプロイオペレーションを開始します。各グループバージョンに対するデプロイアクションのタイプは `NewDeploymentType` です。

**注記**  
 同じアカウントの別の一括デプロイがまだ実行されている間は、**StartBulkDeployment** を呼び出すことはできません。リクエストは却下されました。

1.  以下のコマンドを使用して、一括デプロイを開始します。

    各 **StartBulkDeployment** リクエストに `X-Amzn-Client-Token` トークンを含めることをお勧めします。これらのリクエストは、トークンおよびリクエストパラメータに対してべき等です。このトークンは、最大 64 バイトの ASCII 文字で、大文字と小文字を区別する一意の文字列です。

   ```
   aws greengrass start-bulk-deployment --cli-input-json "{
             "InputFileUri":"URI of file in S3 bucket", 
             "ExecutionRoleArn":"ARN of execution role",
             "AmznClientToken":"your Amazon client token"
             }"
   ```

    このコマンドを実行した結果、成功ステータスコード `200` が以下のレスポンスと共に返されます。

   ```
   {
     "bulkDeploymentId": UUID
   }
   ```

    一括デプロイ ID を記録します。この ID は、一括デプロイのステータスの確認に使用します。
**注記**  
一括デプロイオペレーションは現在サポートされていませんが、Amazon EventBridge イベントルールを作成して、個々のグループのデプロイステータスの変更通知を受け取ることができます。詳細については、「[デプロイ通知の取得](deployment-notifications.md)」を参照してください。

1.  以下のコマンドを使用して、一括デプロイのステータスを確認します。

   ```
   aws greengrass get-bulk-deployment-status --bulk-deployment-id 1234567
   ```

    このコマンドを実行した結果、成功ステータスコード `200` が情報の JSON ペイロードと共に返されます。

   ```
    {
     "BulkDeploymentStatus": Running,
     "Statistics": {
        "RecordsProcessed": integer,
        "InvalidInputRecords": integer,
        "RetryAttempts": integer
     },
     "CreatedAt": "string",
     "ErrorMessage": "string",
     "ErrorDetails": [
       {
         "DetailedErrorCode": "string",
         "DetailedErrorMessage": "string"
       }
     ]
   }
   ```

    `BulkDeploymentStatus` には、一括実行の現在のステータスが含まれています。実行は 以下の 6 つの異なるステータスのいずれかになります。
   + `Initializing`。一括デプロイリクエストが受け取られ、デプロイの実行を開始する準備中です。
   + `Running`。一括デプロイの実行が開始されました。
   + `Completed`。一括デプロイの実行により、すべてのレコードの処理が完了しました。
   + `Stopping`。一括デプロイの実行は停止コマンドを受け取り、間もなく終了します。前のデプロイが `Stopping` 状態になっている間は、新しい一括デプロイを開始できません。
   + `Stopped`。一括デプロイの実行は手動で停止されました。
   + `Failed`。一括デプロイの実行中にエラーが発生し、デプロイの実行は終了しました。エラーの詳細は、`ErrorDetails` フィールドで確認できます。

    JSON ペイロードには、一括デプロイの進行状況に関する統計情報も含まれています。この情報を使用して、処理されたグループの数と失敗したグループの数を判断できます。統計情報は以下のとおりです。
   +  `RecordsProcessed`: 試行されたグループレコードの数。
   +  `InvalidInputRecords`: 再試行不可のエラーを返したレコードの合計数。例えば、入力ファイルのグループレコードで無効な形式を使用している場合や、存在しないグループバージョンを指定している場合、デプロイの実行によりグループまたはグループバージョンをデプロイするアクセス許可が付与されない場合に、このエラーが発生します。
   +  `RetryAttempts`: 再試行可能なエラーを返したデプロイ試行の回数。例えば、グループをデプロイしようとしてスロットリングエラーが返された場合は、再試行がトリガーされます。グループデプロイは 5 回まで再試行できます。

    一括デプロイの実行に失敗した場合、このペイロードには、トラブルシューティングに使用できる `ErrorDetails` セクションも含まれています。このセクションに、実行失敗の原因に関する情報が含まれています。

    一括デプロイの状態を定期的にチェックして、デプロイが想定どおりに進行していることを確認できます。デプロイが完了したら、`RecordsProcessed` は、一括デプロイの入力ファイルで指定したデプロイグループの数と一致しています。これは、各レコードが処理されたことを示します。

## ステップ 5: デプロイをテストする
<a name="bulk-deploy-cli-test"></a>

 **ListBulkDeployments** コマンドを使用して、一括デプロイの ID を見つけます。

```
aws greengrass list-bulk-deployments
```

 このコマンドは、最も新しいものから古いものまですべての一括デプロイのリストを `BulkDeploymentId` も含めて返します。

```
{
  "BulkDeployments": [
    {
      "BulkDeploymentId": 1234567,
      "BulkDeploymentArn": "string",
      "CreatedAt": "string"
    }
  ],
  "NextToken": "string"
}
```

 次に、**ListBulkDeploymentDetailedReports** コマンドを呼び出して、各デプロイに関する詳細情報を収集します。

```
aws greengrass list-bulk-deployment-detailed-reports --bulk-deployment-id 1234567 
```

 このコマンドを実行した結果、成功ステータスコード `200` が情報の JSON ペイロードと共に返されます。

```
{ 
  "BulkDeploymentResults": [
    {
      "DeploymentId": "string",
      "GroupVersionedArn": "string",
      "CreatedAt": "string",
      "DeploymentStatus": "string",
      "ErrorMessage": "string",
      "ErrorDetails": [
        {
          "DetailedErrorCode": "string",
          "DetailedErrorMessage": "string"
        }
      ]
    }
  ],
  "NextToken": "string"
}
```

 このペイロードには通常、最も新しいものから古いものまで各デプロイとそのデプロイステータスのページ分割されたリストが含まれています。また、一括デプロイの実行に失敗した場合の詳細情報も含まれています。先ほど説明したように、リストに示されたデプロイの合計数は、一括デプロイの入力ファイルで指定したグループの数と一致しています。

 返される情報は、デプロイが終了状態 (成功または失敗) になるまで変わります。それまでは、このコマンドを定期的に呼び出すことができます。

## 一括デプロイのトラブルシューティング
<a name="bulk-deploy-cli-troubleshooting"></a>

 一括デプロイに成功しなかった場合は、以下のトラブルシューティング手順を試すことができます。ターミナルで以下のコマンドを実行します。

### 入力ファイルのエラーのトラブルシューティングを行う
<a name="bulk-deploy-cli-troubleshooting-input-file-errors"></a>

 一括デプロイ入力ファイルに構文エラーがある場合、一括デプロイは失敗する可能性があります。これにより、一括デプロイステータス `Failed` が、最初の検証エラーの行番号を示すエラーメッセージと共に返されます。以下の 4 つのエラーが考えられます。
+ 

  ```
  InvalidInputFile: Missing GroupId at line number: line number
  ```

   このエラーは、指定された入力ファイル行で、指定されたパラメータを登録できないことを示します。パラメータ `GroupId` と `GroupVersionId` が指定されていない可能性があります。
+ 

  ```
  InvalidInputFile: Invalid deployment type at line number : line number. Only valid type is 'NewDeployment'.
  ```

   このエラーは、指定された入力ファイル行で無効なデプロイタイプが指定されていることを示します。現時点でサポートされているデプロイタイプは `NewDeployment` のみです。
+ 

  ```
  Line %s is too long in S3 File. Valid line is less than 256 chars.
  ```

   このエラーは、指定された入力ファイルの行が長すぎるため、短くする必要があることを示します。
+ 

  ```
  Failed to parse input file at line number: line number
  ```

   このエラーは、指定された入力ファイル行が有効な JSON とみなされないことを示します。

### 同時一括デプロイがないことを確認する
<a name="bulk-deploy-cli-troubleshooting-concurrent-bulk-deployments"></a>

 新しい一括デプロイは、別の一括デプロイが実行中など終了以外の状態では開始できません。この場合、`Concurrent Deployment Error` になります。**ListBulkDeployments** コマンドを使用して、一括デプロイが現在実行中ではないことを確認できます。このコマンドは、最も新しいものから古いものまで一括デプロイを一覧表示します。

```
{
  "BulkDeployments": [
    {
      "BulkDeploymentId": BulkDeploymentId,
      "BulkDeploymentArn": "string",
      "CreatedAt": "string"
    }
  ],
  "NextToken": "string"
}
```

 **GetBulkDeploymentStatus** コマンドを実行するには、最初に一覧表示された一括デプロイの `BulkDeploymentId` を使用します。最も新しい一括デプロイが実行状態 (`Initializing` または `Running`) である場合は、以下のコマンドを使用して一括デプロイを停止します。

```
aws greengrass stop-bulk-deployment --bulk-deployment-id BulkDeploymentId
```

 このアクションを実行した結果、デプロイのステータスは `Stopped` になるまで `Stopping` になります。デプロイのステータスが `Stopped` になったら、新しい一括デプロイを開始できます。

### ErrorDetails を確認する
<a name="bulk-deploy-cli-troubleshooting-check-error-details"></a>

 `GetBulkDeploymentStatus` コマンドを実行すると、一括デプロイの実行の失敗に関する情報を含む JSON ペイロードが返されます。

```
  "Message": "string",
  "ErrorDetails": [
    {
      "DetailedErrorCode": "string",
      "DetailedErrorMessage": "string"
    }
  ]
```

 エラーで終了すると、この呼び出しによって返された `ErrorDetails` JSON ペイロードには、一括デプロイの実行の失敗に関する詳細が含まれています。例えば、`400` 番台のエラーステータスコードは、入力パラメータまたは呼び出し元依存関係の入力エラーを示します。

### AWS IoT Greengrass コアログを確認する
<a name="bulk-deploy-cli-troubleshooting-check-core-log"></a>

 AWS IoT Greengrass コアログを表示することで、問題をトラブルシューティングできます。`runtime.log` を表示するには、以下のコマンドを使用します。

```
cd /greengrass/ggc/var/log
sudo cat system/runtime.log | more
```

 AWS IoT Greengrass ログ記録の詳細については、「」を参照してください[AWS IoT Greengrass ログによるモニタリング](greengrass-logs-overview.md)。

## 関連情報
<a name="bulk-deploy-cli-see-also"></a>

詳細については、以下のリソースを参照してください。
+ [AWS IoT Greengrass コアに AWS IoT Greengrass グループをデプロイする](deployments.md)
+ 「AWS CLI コマンドリファレンス」の [Amazon S3 API コマンド](https://docs.aws.amazon.com/cli/latest/reference/s3api)
+ <a name="see-also-gg-cli"></a>[AWS IoT Greengrass コマンド](https://docs.aws.amazon.com/cli/latest/reference/greengrass/index.html)*AWS CLI リファレンスの コマンド*