

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 Greengrass 核心裝置切換到不同的 AWS 帳戶 或 區域
<a name="switch-core-device-connectivity"></a>

您可以部署核心組態更新，將核心裝置的 IoT 連線從一個 AWS 帳戶 或區域切換到另一個區域。這在下列案例中非常有用：
+ **生產轉換 –** 您在生產期間在預備帳戶中佈建裝置，並在現場安裝期間將裝置移至目的地帳戶。
+ **地理位置重新定位** – 從某個區域移至另一個區域的裝置必須連線至本機區域的 AWS IoT 端點，以減少延遲。
+ **減少故障影響** – 您將最初集中在單一帳戶中的裝置重新分配到多個帳戶，以限制帳戶層級問題的影響，例如服務配額限制或安全事件。

當您部署 IoT 連線切換時， 核會在套用變更之前驗證新端點的連線，並在連線失敗時自動轉返。

此功能需要 Greengrass nucleus v2.18.0 或更新版本，或 Greengrass nucleus lite v2.6.0 或更新版本。

**Topics**
+ [先決條件](#switch-connectivity-prerequisites)
+ [建立部署](#switch-connectivity-create-deployment)
+ [預期事項](#switch-connectivity-what-to-expect)
+ [驗證交換器](#switch-connectivity-verify)

## 先決條件
<a name="switch-connectivity-prerequisites"></a>

部署連線切換之前，請在目的地 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-component.md)。

對於 Greengrass nucleus lite 核心裝置，您必須先在帳戶中建立私有`aws.greengrass.NucleusLite`元件，才能將組態更新部署到 nucleus。 AWS IoT Greengrass 部署只能以帳戶元件登錄檔中存在的元件為目標，而且沒有 nucleus lite 的公有元件。

建立具有`aws_nucleus_lite`執行期和空生命週期 （無動作） 的元件。元件版本必須與裝置上執行的 nucleus lite 版本相符。

## 建立部署
<a name="switch-connectivity-create-deployment"></a>

建立以來源帳戶中的核心裝置或其物件群組為目標的部署。部署會將合併組態更新傳送至具有新 AWS IoT 端點值的 nucleus 元件。

**部署連線切換 (AWS CLI)**

1. 建立稱為 `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 驗證工具在建立部署之前驗證語法。

1. 執行下列命令來建立部署。

   ```
   aws greengrassv2 create-deployment \
     --cli-input-json file://switch-deployment.json
   ```

## 預期事項
<a name="switch-connectivity-what-to-expect"></a>

核會先驗證新端點的連線，再套用變更。如果裝置無法連線至新端點，部署會失敗，且裝置會保持連線至來源帳戶。

核會使用用戶端 ID `{{thing-name}}#endpoint-switch`進行預檢連線檢查。

套用組態後， 核會測試新端點的連線能力。如果連線失敗，核心會自動轉返至原始組態。來源帳戶中`FAILED`的部署報告。

如果連線切換成功，部署會在`SUCCEEDED`來源帳戶中報告。 會在與新端點相關聯的帳戶和區域中 AWS IoT Greengrass 建立核心裝置。

**注意**  
在連線切換期間， 核會重新啟動對權杖交換服務具有硬相依性的元件。此重新啟動會從新的登入資料端點重新整理 AWS IoT 登入資料。核心不會重新啟動其他元件，而且它們會以其現有狀態繼續執行。

## 驗證交換器
<a name="switch-connectivity-verify"></a>

部署完成後，請確認連線切換是否成功。

**驗證連線切換**

1. 檢查來源帳戶中的部署狀態。裝置連線至新端點`SUCCEEDED`後，部署會報告 。

   ```
   aws greengrassv2 list-effective-deployments \
     --core-device-thing-name {{thing-name}}
   ```

1. 確認核心裝置出現在目的地帳戶中。開啟 [AWS IoT Greengrass 主控台](https://console.aws.amazon.com/greengrass)或執行下列命令。

   ```
   aws greengrassv2 get-core-device \
     --core-device-thing-name {{thing-name}}
   ```

物件 AWS IoT 和核心裝置記錄會在切換後保留在來源帳戶中。為了防止未來的部署以裝置為目標，請將其從來源帳戶的物件群組中移除。

如果部署狀態不是 `SUCCEEDED`，請檢查裝置上的 Greengrass `{{/greengrass/v2}}/logs/greengrass.log` 日誌 以取得錯誤詳細資訊。如需與連線切換操作相關的常見錯誤代碼，請參閱[詳細部署錯誤代碼](troubleshooting-deployment.md)。