本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 Greengrass 核心裝置切換到不同的 AWS 帳戶 或 區域
您可以部署核心組態更新,將核心裝置的 IoT 連線從一個 AWS 帳戶 或區域切換到另一個區域。這在下列案例中非常有用:
-
生產轉換 – 您在生產期間在預備帳戶中佈建裝置,並在現場安裝期間將裝置移至目的地帳戶。
-
地理位置重新定位 – 從某個區域移至另一個區域的裝置必須連線至本機區域的 AWS IoT 端點,以減少延遲。
-
減少故障影響 – 您將最初集中在單一帳戶中的裝置重新分配到多個帳戶,以限制帳戶層級問題的影響,例如服務配額限制或安全事件。
當您部署 IoT 連線切換時, 核會在套用變更之前驗證新端點的連線,並在連線失敗時自動轉返。
此功能需要 Greengrass nucleus v2.18.0 或更新版本,或 Greengrass nucleus lite v2.6.0 或更新版本。
先決條件
部署連線切換之前,請在目的地 AWS 帳戶 和區域中設定下列項目:
-
AWS IoT 物件 – 建立與來源帳戶中相同名稱的物件。
-
憑證 – 在目的地帳戶中註冊相同的裝置憑證。憑證必須與裝置在來源帳戶中使用的憑證相同。
-
AWS IoT 政策 – 將政策連接到憑證。此政策必須使用使用萬用字元尾碼做為用戶端 ID
iot:Connect的資源 ARN 允許 :"Resource": "arn:aws:iot:*:*:client/${iot:Connection.Thing.ThingName}*"您必須包含萬用字元尾碼,因為核子傳輸前連線檢查使用用戶端 ID
。thing-name#endpoint-switch -
AWS IoT 角色別名 – 使用 Greengrass 操作的適當 IAM 角色許可,在目的地區域中建立角色別名。
注意
若要使用 AWS IoT 物件政策變數,例如 AWS IoT 政策${iot:Connection.Thing.ThingName}中的 ,您必須僅將憑證連接到目的地帳戶中的 AWS IoT 物件。
對於 Greengrass 核核心裝置,您還必須在核組態iotdata中greengrassDataPlaneEndpoint將 設定為 。在連線切換部署中或在初始佈建期間包含此設定。
如果沒有此設定,資料平面會在切換後保持繫結至原始帳戶。這會中斷元件成品下載和控制平面操作。如需詳細資訊,請參閱 中的greengrassDataPlaneEndpoint組態參數Greengrass 核。
對於 Greengrass nucleus lite 核心裝置,您必須先在帳戶中建立私有aws.greengrass.NucleusLite元件,才能將組態更新部署到 nucleus。 AWS IoT Greengrass 部署只能以帳戶元件登錄檔中存在的元件為目標,而且沒有 nucleus lite 的公有元件。
建立具有aws_nucleus_lite執行期和空生命週期 (無動作) 的元件。元件版本必須與裝置上執行的 nucleus lite 版本相符。
建立部署
建立以來源帳戶中的核心裝置或其物件群組為目標的部署。部署會將合併組態更新傳送至具有新 AWS IoT 端點值的 nucleus 元件。
部署連線切換 (AWS CLI)
-
建立稱為
switch-deployment.json的檔案,其中具有以下內容。將預留位置值取代為目的地帳戶的值。-
將
targetArn取代為來源帳戶中 AWS IoT 物件群組或核心裝置的 ARN。 -
將
componentName取代aws.greengrass.Nucleus為適用於 nucleus 或aws.greengrass.NucleusLite適用於 nucleus lite。 -
將
componentVersion取代為裝置上執行的 nucleus 版本。
{ "targetArn": "targetArn", "deploymentName": "SwitchConnectivity", "components": { "componentName": { "componentVersion": "componentVersion", "configurationUpdate": { "merge": "{\"iotDataEndpoint\":\"account-prefix-ats.iot.region.amazonaws.com\",\"iotCredEndpoint\":\"account-prefix.credentials.iot.region.amazonaws.com\",\"awsRegion\":\"region\",\"iotRoleAlias\":\"role-alias-name\"}" } } }, "deploymentPolicies": { "failureHandlingPolicy": "ROLLBACK" } }對於尚未
greengrassDataPlaneEndpoint設定為 的 Greengrass 核核心裝置iotdata,將其新增至合併組態:"merge": "{\"iotDataEndpoint\":\"...\",\"iotCredEndpoint\":\"...\",\"awsRegion\":\"...\",\"iotRoleAlias\":\"...\",\"greengrassDataPlaneEndpoint\":\"iotdata\"}"將
merge值編碼為 JSON 字串。使用反斜線 () 逸出所有內部引號\"。使用 JSON 驗證工具在建立部署之前驗證語法。 -
-
執行下列命令來建立部署。
aws greengrassv2 create-deployment \ --cli-input-json file://switch-deployment.json
預期事項
核會先驗證新端點的連線,再套用變更。如果裝置無法連線至新端點,部署會失敗,且裝置會保持連線至來源帳戶。
核會使用用戶端 ID 進行預檢連線檢查。thing-name#endpoint-switch
套用組態後, 核會測試新端點的連線能力。如果連線失敗,核心會自動轉返至原始組態。來源帳戶中FAILED的部署報告。
如果連線切換成功,部署會在SUCCEEDED來源帳戶中報告。 會在與新端點相關聯的帳戶和區域中 AWS IoT Greengrass 建立核心裝置。
注意
在連線切換期間, 核會重新啟動對權杖交換服務具有硬相依性的元件。此重新啟動會從新的登入資料端點重新整理 AWS IoT 登入資料。核心不會重新啟動其他元件,而且它們會以其現有狀態繼續執行。
驗證交換器
部署完成後,請確認連線切換是否成功。
驗證連線切換
-
檢查來源帳戶中的部署狀態。裝置連線至新端點
SUCCEEDED後,部署會報告 。aws greengrassv2 list-effective-deployments \ --core-device-thing-namething-name -
確認核心裝置出現在目的地帳戶中。開啟 AWS IoT Greengrass 主控台
或執行下列命令。 aws greengrassv2 get-core-device \ --core-device-thing-namething-name
物件 AWS IoT 和核心裝置記錄會在切換後保留在來源帳戶中。為了防止未來的部署以裝置為目標,請將其從來源帳戶的物件群組中移除。
如果部署狀態不是 SUCCEEDED,請檢查裝置上的 Greengrass 日誌 以取得錯誤詳細資訊。如需與連線切換操作相關的常見錯誤代碼,請參閱詳細部署錯誤代碼。/logs/greengrass.log/greengrass/v2