翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ステップ 5: AWS IoT Greengrass サービスでコンポーネントを作成する
コアデバイスでのコンポーネントの開発が完了したら、コンポーネントを AWS クラウドの AWS IoT Greengrass
サービスにアップロードすることができます。また、コンポーネントをAWS IoT Greengrass コンソール
-
コンポーネントのアーティファクトを S3 バケットにのアップロードします。
-
各アーティファクトの Amazon Simple Storage Service (Amazon S3) URIをコンポーネント recipe に追加します。
-
コンポーネント recipe AWS IoT Greengrass から にコンポーネントを作成します。
このセクションでは、Greengrass コアデバイスでこれらのステップを完了して、Hello World コンポーネントを AWS IoT Greengrass サービスにアップロードします。
-
AWS アカウントの S3 バケットを使用して、 AWS IoT Greengrass コンポーネントアーティファクトをホストします。コンポーネントをコアデバイスにデプロイすると、デバイスがバケットからコンポーネントのアーティファクトをダウンロードします。
既存の S3 バケットを使用するか、新しいバケットを作成することができます。
-
Amazon S3 コンソール
で [Buckets] (バケット)、[Create bucket] (バケットの作成) の順に選択します。 -
[Bucket name] (バケット名) に、一意のバケット名前を入力します。たとえば、
greengrass-component-artifacts-
を使用できます。置換region
-123456789012
123456789012
AWS アカウント ID とregion
このチュートリアル AWS リージョン で使用する を使用します。 -
AWS リージョン では、このチュートリアルで使用する AWS リージョンを選択します。
-
[Create bucket] (バケットの作成) を選択します。
-
[Buckets] (バケット) で作成したバケットを選択し、
hello_world.py
スクリプトをバケット内のartifacts/com.example.HelloWorld/1.0.0
フォルダにアップロードします。オブジェクトを S3 バケットにアップロードする際の詳細については、「Amazon Simple Storage Service ユーザーガイド」の「オブジェクトをアップロードする」を参照してください。 -
S3 バケット内の
hello_world.py
オブジェクトURIの S3 をコピーします。これは次の例のURIようになります。amzn-s3-demo-bucket を S3 バケットの名前に置き換えます。s3://amzn-s3-demo-bucket/artifacts/com.example.HelloWorld/1.0.0/hello_world.py
-
-
コアデバイスが S3 バケット内のコンポーネントアーティファクトにアクセスすることを許可します。
各コアデバイスには、 とやり取り AWS IoT して AWS クラウドにログを送信できるようにするコアデバイスIAMロールがあります。このデバイスロールは、デフォルトでは S3 バケットへのアクセスを許可しないため、コアデバイスが S3 バケットからコンポーネントアーティファクトを取得できるようにするポリシーを作成して、アタッチする必要があります。
デバイスのロールで S3 バケットへのアクセスが既に許可されている場合は、このステップを省略できます。それ以外の場合は、次のようにアクセスを許可する IAM ポリシーを作成し、ロールにアタッチします。
-
IAM コンソール
のナビゲーションメニューで、ポリシー を選択し、ポリシーの作成 を選択します。 -
JSON タブで、プレースホルダーコンテンツを次のポリシーに置き換えます。amzn-s3-demo-bucket を、ダウンロードするコアデバイスのコンポーネントアーティファクトを含む S3 バケットの名前に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }
-
[Next (次へ)] を選択します。
-
[ポリシーの詳細セクション] で、[名前] に「
MyGreengrassV2ComponentArtifactPolicy
」と入力します。 -
[Create policy] を選択します。
-
IAM コンソール
のナビゲーションメニューで、ロール を選択し、コアデバイスのロールの名前を選択します。 AWS IoT Greengrass Core ソフトウェアをインストールしたときに、このロール名を指定しました。名前を指定していない場合、デフォルトで GreengrassV2TokenExchangeRole
が設定されます。 -
[Permissions] (アクセス許可) タブを選択し、[Add permissions] (アクセス許可の追加) を選択してから、[Attach policies] (ポリシーの添付) を選択します。
-
[アクセス許可の追加] ページで、作成した
MyGreengrassV2ComponentArtifactPolicy
ポリシーの横にあるチェックボックスを選択し、[アクセス許可の追加] を選択します。
-
-
コンポーネント recipe を使用して、AWS IoT Greengrass コンソール
にコンポーネントを作成します。 -
AWS IoT Greengrass コンソール
のナビゲーションメニューで、[Components] (コンポーネント) 、[Create component] (コンポーネントを作成) の順に選択します。 -
コンポーネント情報 で、レシピを として入力 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" } ] } ] }
-
各
Artifacts
セクションURIのプレースホルダーをhello_world.py
オブジェクトURIの S3 に置き換えます。 -
[コンポーネントを作成] を選択します。
-
com.example.HelloWorld component ページで、コンポーネントのステータスが Deployable であることを確認します。
-
Hello World コンポーネントをアップロードするには
-
の S3 バケット AWS アカウント を使用して、 AWS IoT Greengrass コンポーネントアーティファクトをホストします。コンポーネントをコアデバイスにデプロイすると、デバイスがバケットからコンポーネントのアーティファクトをダウンロードします。
既存の S3 バケットを使用するか、次のコマンドを実行してバケットを作成します。このコマンドは、 AWS アカウント ID と を使用してバケット AWS リージョン を作成し、一意のバケット名を形成します。置換
123456789012
AWS アカウント ID とregion
このチュートリアル AWS リージョン で使用する を使用します。aws s3 mb s3://greengrass-component-artifacts-
123456789012
-region
以下は、リクエストが成功した場合の出力です。
make_bucket: greengrass-component-artifacts-
123456789012
-region
-
コアデバイスが S3 バケット内のコンポーネントアーティファクトにアクセスすることを許可します。
各コアデバイスには、 とのやり取り AWS IoT と へのログの送信を許可するコアデバイスIAMロールがあります AWS クラウド。このデバイスロールは、デフォルトでは S3 バケットへのアクセスを許可しないため、コアデバイスが S3 バケットからコンポーネントアーティファクトを取得できるようにするポリシーを作成して、アタッチする必要があります。
コアデバイスのロールで S3 バケットへのアクセスが既に許可されている場合は、このステップを省略できます。それ以外の場合は、次のようにアクセスを許可する IAM ポリシーを作成し、ロールにアタッチします。
-
という名前のファイル
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/*" } ] }
-
次のコマンドを実行して、
component-artifact-policy.json
のポリシードキュメントからポリシーを作成します。出力のポリシーメタデータからポリシー Amazon リソースネーム (ARN) をコピーします。これを使用してARN、次のステップでこのポリシーをコアデバイスロールにアタッチします。
-
次のコマンドを実行して、ポリシーをコアデバイスのロールにアタッチします。置換
GreengrassV2TokenExchangeRole
コアデバイスのロールの名前。 AWS IoT Greengrass Core ソフトウェアをインストールしたときに、このロール名を指定しました。ポリシーを前のステップARNの ARNに置き換えます。成功した場合は、コマンドからの出力はありません。コアデバイスが、この S3 バケットにアップロードしたアーティファクトにアクセスできるようになりました。
-
-
Hello World Python スクリプトアーティファクトを S3 バケットにアップロードします。
次のコマンドを実行して、スクリプトが AWS IoT Greengrass コアに存在するバケット内の同じパスにスクリプトをアップロードします。amzn-s3-demo-bucket を S3 バケットの名前に置き換えます。
リクエストが成功した場合、コマンドは
upload:
で始まる行を出力します。 -
アーティファクトの 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 の 構造
Artifacts
を含む のリストを追加しますURI。 Amazon S3 -
recipe AWS IoT Greengrass から にコンポーネントリソースを作成します。次のコマンドを実行して、recipe からコンポーネントを作成します。このコンポーネントをバイナリファイルとして提供します。
リクエストが成功すると、レスポンスは次の例のようになります。
{ "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 コンソール
の [Components] (コンポーネント) ページでも確認できます。 -
コンポーネントが作成され、デプロイする準備が整っていることを確認します。コンポーネントを作成すると、その状態は
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 コアデバイスまたは他のコアデバイスにデプロイして戻すことができます。