本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
步驟 5:在 AWS IoT Greengrass 服務中建立元件
當您完成核心裝置上的元件開發時,您可以將其 AWS IoT Greengrass 上傳至 中的服務 AWS 雲端。您也可以直接在 AWS IoT Greengrass 主控台
-
將元件成品上傳至 S3 儲存貯體。
-
將每個成品的 Amazon Simple Storage Service (Amazon S3) URI 新增至元件配方。
-
AWS IoT Greengrass 從元件配方在 中建立元件。
在本節中,您可以在 Greengrass 核心裝置上完成這些步驟,將 Hello World 元件上傳至 AWS IoT Greengrass 服務。
-
使用 AWS 您帳戶中的 S3 儲存貯體來託管 AWS IoT Greengrass 元件成品。當您將元件部署到核心裝置時,裝置會從儲存貯體下載元件的成品。
您可以使用現有的 S3 儲存貯體,也可以建立新的儲存貯體。
-
在 Amazon S3 主控台
的儲存貯體下,選擇建立儲存貯體。 -
針對儲存貯體名稱,輸入唯一的儲存貯體名稱。例如,您可以使用
greengrass-component-artifacts-
.region
-123456789012
123456789012
將 取代為 AWS 您的帳戶 ID AWS 區域 ,並將region
取代為您用於本教學課程的 。 -
針對AWS 區域,選取您用於本教學 AWS 課程的區域。
-
選擇建立儲存貯體。
-
在儲存貯體下,選擇您建立的儲存貯體,將
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 儲存貯體中的元件成品。
每個核心裝置都有一個核心裝置IAM角色,允許它與 互動 AWS IoT 並將日誌傳送到 AWS 雲端。根據預設,此裝置角色不允許存取 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
。 -
選擇 建立政策。
-
在IAM主控台
導覽功能表中,選擇角色,然後選擇核心裝置的角色名稱。您在安裝 AWS IoT Greengrass Core 軟體時指定此角色名稱。如果您未指定名稱,則預設為 GreengrassV2TokenExchangeRole
。 -
在許可下,選擇新增許可,然後選擇連接政策。
-
在新增許可頁面上,選取您建立
MyGreengrassV2ComponentArtifactPolicy
的政策旁的核取方塊,然後選擇新增許可。
-
-
使用元件配方在AWS IoT Greengrass 主控台
中建立元件。 -
在AWS IoT Greengrass 主控台
導覽功能表中,選擇元件,然後選擇建立元件。 -
在元件資訊下,選擇將配方輸入為 JSON。預留位置配方看起來應該類似於下列範例。
{ "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元件頁面上,確認元件的狀態為可部署。
-
上傳您的 Hello World 元件
-
在 中使用 S3 儲存貯體 AWS 帳戶 來託管 AWS IoT Greengrass 元件成品。當您將元件部署到核心裝置時,裝置會從儲存貯體下載元件的成品。
您可以使用現有的 S3 儲存貯體,或執行下列命令來建立儲存貯體。此命令會使用您的 AWS 帳戶 ID 和 建立儲存貯體 AWS 區域 ,以形成唯一的儲存貯體名稱。
123456789012
將 取代為您的 AWS 帳戶 ID,並將 AWS 區域region
取代為您用於本教學課程的 。aws s3 mb s3://greengrass-component-artifacts-
123456789012
-region
如果請求成功,命令會輸出下列資訊。
make_bucket: greengrass-component-artifacts-
123456789012
-region
-
允許核心裝置存取 S3 儲存貯體中的元件成品。
每個核心裝置都有一個核心裝置IAM角色,允許它與 互動 AWS IoT 並將日誌傳送到 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 Resource Name (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 新增至元件配方。
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
若要將成品新增至配方,請新增
Artifacts
包含具有 Amazon S3 結構的 清單URI。 -
AWS IoT Greengrass 從配方在 中建立元件資源。執行下列命令,從您提供的二進位檔案配方建立元件。
如果請求成功,回應看起來與下列範例類似。
{ "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
從輸出複製 ,以在下一個步驟中檢查元件的狀態。注意
您也可以在 AWS IoT Greengrass 主控台
的元件頁面上看到 Hello World 元件。 -
確認元件已建立並準備好部署。當您建立元件時,其狀態為
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 核心裝置或其他核心裝置。