

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

# Greengrass コアデバイスを別の AWS アカウント またはリージョンに切り替える
<a name="switch-core-device-connectivity"></a>

nucleus 設定の更新をデプロイして、コアデバイスの IoT 接続を 1 つ AWS アカウント またはリージョンから別のリージョンに切り替えることができます。これは、以下のシナリオで役立ちます。
+ **製造から本番への移行** – 製造中にステージングアカウントにデバイスをプロビジョニングし、フィールドのインストール中に送信先アカウントに移動します。
+ **地理的再配置** – あるリージョンから別のリージョンに移動するデバイスは、レイテンシーを減らすためにローカルリージョンの AWS IoT エンドポイントに接続する必要があります。
+ **障害の影響軽減** – 最初は 1 つのアカウントに集中したデバイスを複数のアカウントに分散し、サービスクォータの制限やセキュリティインシデントなどのアカウントレベルの問題の影響を制限します。

IoT 接続スイッチをデプロイすると、nucleus は変更を適用する前に新しいエンドポイントへの接続を検証し、接続が失敗すると自動的にロールバックします。

この機能には、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 thing** – ソースアカウントと同じ名前のモノを作成します。
+ **証明書** – 送信先アカウントに同じデバイス証明書を登録します。証明書は、デバイスがソースアカウントで使用する証明書と同じである必要があります。
+ **AWS IoT policy** – 証明書にポリシーをアタッチします。ポリシーでは、クライアント ID にワイルドカードサフィックスを使用するリソース ARN `iot:Connect`で を許可する必要があります。

  ```
  "Resource": "arn:aws:iot:*:*:client/${iot:Connection.Thing.ThingName}*"
  ```

  nucleus のプリフライト接続チェックではクライアント ID が使用されるため、ワイルドカードサフィックスを含める必要があります`{{thing-name}}#endpoint-switch`。
+ **AWS IoT ロールエイリアス** – Greengrass オペレーションの適切な IAM ロールアクセス許可を持つロールエイリアスを送信先リージョンに作成します。

**注記**  
ポリシー`${iot:Connection.Thing.ThingName}`で などの AWS IoT モノの AWS IoT ポリシー変数を使用するには、証明書を送信先アカウントの AWS IoT モノにのみアタッチする必要があります。

Greengrass nucleus コアデバイスの場合、nucleus 設定**iotdata**でも を `greengrassDataPlaneEndpoint`に設定する必要があります。この設定は、接続スイッチのデプロイ時または初期プロビジョニング時に含めます。

この設定がない場合、データプレーンは切り替え後も元のアカウントにバインドされたままになります。これにより、コンポーネントアーティファクトのダウンロードとコントロールプレーンオペレーションが中断されます。詳細については、 `greengrassDataPlaneEndpoint`の設定パラメータを参照してください[Greengrass nucleus](greengrass-nucleus-component.md)。

Greengrass nucleus lite コアデバイスの場合、nucleus に設定の更新をデプロイする前に、アカウントにプライベート`aws.greengrass.NucleusLite`コンポーネントを作成する必要があります。 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}} を nucleus `aws.greengrass.Nucleus`の場合は 、nucleus lite `aws.greengrass.NucleusLite`の場合は に置き換えます。
   + {{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 nucleus コアデバイスの場合は**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>

nucleus は、変更を適用する前に新しいエンドポイントへの接続を検証します。デバイスが新しいエンドポイントに接続できない場合、デプロイは失敗し、デバイスはソースアカウントに接続したままになります。

nucleus は、プリフライト接続チェック`{{thing-name}}#endpoint-switch`にクライアント ID を使用します。

設定を適用すると、nucleus は新しいエンドポイントへの接続をテストします。接続に失敗すると、nucleus は自動的に元の設定に戻ります。`FAILED` ソースアカウントのデプロイレポート。

接続スイッチが成功すると、`SUCCEEDED`ソースアカウントのデプロイレポートが作成されます。 は、新しいエンドポイントに関連付けられたアカウントとリージョンにコアデバイス AWS IoT Greengrass を作成します。

**注記**  
接続スイッチ中、nucleus はトークン交換サービスに強い依存関係を持つコンポーネントを再起動します。この再起動により、新しい認証情報エンドポイントから AWS IoT 認証情報が更新されます。nucleus は他のコンポーネントを再起動せず、既存の状態で実行し続けます。

## スイッチを確認する
<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/v2}}/logs/greengrass.log` にある Greengrass ログでエラーの詳細を確認します。接続スイッチオペレーションに関連する一般的なエラーコードについては、「」を参照してください[詳細なデプロイエラーコード](troubleshooting-deployment.md)。