グループの一括デプロイを作成する - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は 2023 年 6 月 30 日に延長ライフフェーズに参加しました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日以降、 AWS IoT Greengrass V1 は機能、機能強化、バグ修正、またはセキュリティパッチを提供する更新をリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行することを強くお勧めします。 AWS IoT Greengrass Version 2これにより、重要な新機能が追加され、プラットフォーム のサポートが追加されます

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

グループの一括デプロイを作成する

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

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

このチュートリアルには、以下の手順の概要が含まれます。

前提条件

このチュートリアルを完了するには、以下が必要です。

  • 1 つ以上のデプロイ可能な Greengrass グループ。AWS IoT Greengrass のグループと Core の作成の詳細については、「の開始方法 AWS IoT Greengrass」を参照してください。

  • コンピュータにインストールされて設定されている AWS CLI。詳細については、「AWS CLI ユーザーガイド」を参照してください。

  • AWS IoT Greengrass と同じ AWS リージョン に作成された S3 バケット。新しいバケットの作成の詳細については、「Amazon Simple Storage Service ユーザーガイド」の「Amazon S3 バケットの作成、設定、操作」を参照してください。

    注記

    現在、SSE KMS 対応バケットはサポートされていません。

ステップ 1: 一括デプロイ入力ファイルを作成してアップロードする

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

  1. 以下のコマンドを実行して、デプロイするグループごとに groupId を取得します。デプロイする各グループが AWS IoT Greengrass によって識別されるように、groupId を一括デプロイ入力ファイルに入力します。

    注記

    これらの値は AWS IoT コンソールにもあります。グループ ID は、グループの [Settings (設定)] ページに表示されます。グループバージョン ID は、グループの [Deployments] (デプロイ) タブに表示されます。

    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" }
  2. 使用しているコンピュータのターミナルまたはエディタで、以下の例の 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"} ...

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

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

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

    aws s3 cp path/MyBulkDeploymentInputFile s3://my-bucket/

ステップ 2: IAM 実行ロールを作成して設定する

このステップでは、IAM コンソールを使用してスタンドアロンの実行ロールを作成します。そのロールと AWS IoT Greengrass との間に信頼関係を確立し、IAM ユーザーがお客様の実行ロールの PassRole アクセス許可を持つようにします。これにより、AWS IoT Greengrass はお客様の実行ロールを引き受け、お客様に代わってデプロイを作成できます。

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

    IAM ロールの作成とアクセス許可の委任の詳細については、「IAM ロールの作成」を参照してください。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "greengrass:CreateDeployment", "Resource": [ "arn:aws:greengrass:region:accountId:/greengrass/groups/groupId1", "arn:aws:greengrass:region:accountId:/greengrass/groups/groupId2", "arn:aws:greengrass:region:accountId:/greengrass/groups/groupId3", ... ] } ] }
    注記

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

    "Resource": ["*"]
  2. AWS IoT Greengrass を含めるように実行ロールの信頼関係を変更します。これにより、AWS IoT Greengrass は実行ロールとそれにアタッチされたアクセス許可を使用できます。詳細については、「既存のロールの信頼関係の編集」を参照してください。

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "greengrass.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:greengrass:region:account-id:*" } } } ] }
  3. 実行ロールの IAM PassRole アクセス許可を IAM ユーザーに付与します。この IAM ユーザーは、一括デプロイを開始するために使用されます。PassRole アクセス許可により、IAM ユーザーは実行ロールを AWS IoT Greengrass に渡せるようになります。詳細については、Granting a user permissions to pass a role to an AWS service を参照してください。

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

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

ステップ 3: 実行ロールに S3 バケットへのアクセスを許可する

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

詳細については、「S3 バケットポリシーを追加する方法」を参照してください。

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

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

aws s3api get-bucket-policy --bucket my-bucket
注記

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

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

ステップ 4: グループをデプロイする

このステップでは、一括デプロイ入力ファイルで設定したすべてのグループバージョンに対して一括デプロイオペレーションを開始します。各グループバージョンに対するデプロイアクションのタイプは 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 イベントルールを作成して、個々のグループのデプロイステータスの変更通知を受け取ることができます。詳細については、「デプロイ通知の取得」を参照してください。

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

    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: デプロイをテストする

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" }

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

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

一括デプロイのトラブルシューティング

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

入力ファイルのエラーのトラブルシューティングを行う

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

  • InvalidInputFile: Missing GroupId at line number: line number

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

  • 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 とみなされないことを示します。

同時一括デプロイがないことを確認する

新しい一括デプロイは、別の一括デプロイが実行中など終了以外の状態では開始できません。この場合、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 を確認する

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

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

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

AWS IoT Greengrass Core ログを確認する

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

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

AWS IoT Greengrass ログ記録の詳細については、「AWS IoT Greengrass ログでのモニタリング」を参照してください。

以下も参照してください。

詳細については、以下の リソースを参照してください。