

# ステージングディストリビューションと継続的デプロイポリシーを使用する
<a name="working-with-staging-distribution-continuous-deployment-policy"></a>

ステージングディストリビューションと継続的デプロイポリシーは、CloudFront コンソール、AWS Command Line Interface (AWS CLI)、または CloudFront API で作成、更新、変更できます。

## ステージングディストリビューションと継続的デプロイポリシーを作成する
<a name="create-staging-distribution-continuous-deployment-policy"></a>

次の手順では、ステージングディストリビューションと継続的デプロイポリシーを作成する方法を示します。

------
#### [ Console ]

AWS マネジメントコンソール を使用して、ステージングディストリビューションと継続的デプロイポリシーを作成できます。

**ステージングディストリビューションと継続的デプロイポリシーを作成するには (コンソール)**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. ナビゲーションペインで、**[ディストリビューション]** を選択します。

1. *プライマリディストリビューション*として使用するディストリビューションを選択します。プライマリーディストリビューションは、本番トラフィックを現在処理しているディストリビューションであり、これを元にしてステージングディストリビューションを作成します。

1. **[Continuous deployment]** (継続的デプロイ) セクションで、**[Create staging distribution]** (ステージングディストリビューションを作成) を選択します。**[Create staging distribution]** (ステージングディストリビューションを作成) ウィザードが開きます。

1. **[Create staging distribution]** (ステージングディストリビューションを作成) ウィザードで、以下の操作を行います。

   1. (オプション) ステージングディストリビューションの説明を入力します。

   1. **[Next]** (次へ) を選択します。

   1. ステージングディストリビューションの設定を変更します。更新できる設定の詳細については、「[プライマリーディストリビューションとステージングディストリビューションを更新する](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)」を参照してください。

      ステージングディストリビューションの設定の変更が完了したら、**[Next]** (次へ) を選択します。

   1. コンソールを使用して **[Traffic configuration]** (トラフィック設定) を指定します。これにより、CloudFront がトラフィックをステージングディストリビューションにルーティングする方法が決まります (CloudFront はトラフィック設定を*継続的デプロイポリシー*内に保存します)。

      **[Traffic configuration]** (トラフィック設定) のオプションの詳細については、「[ステージングディストリビューションにリクエストをルーティングする](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)」を参照してください。

      **[Traffic configuration]** (トラフィック設定) が完了したら、**[Next]** (次へ) を選択します。

   1. トラフィック設定を含む、ステージングディストリビューションの設定を確認したら、**[Create staging distribution]** (ステージングディストリビューションを作成) を選択します。

CloudFront コンソールで **[Create staging distribution]** (ステージングディストリビューションを作成) ウィザードを完了すると、CloudFront は以下を実行します。
+ ステップ 5c で指定した設定を使用して、ステージングディストリビューションを作成します。
+ ステップ 5d で指定したトラフィック設定を使用して、継続的デプロイポリシーを作成します。
+ ステージングディストリビューションの作成元のプライマリディストリビューションに継続的デプロイポリシーをアタッチします。

継続的デプロイポリシーをアタッチした、プライマリディストリビューションの設定をエッジロケーションにデプロイすると、CloudFront はトラフィック設定に基づいてトラフィックの指定された部分をステージングディストリビューションに送信し始めます。

------
#### [ CLI ]

ステージングディストリビューションと継続的デプロイポリシーを AWS CLI で作成するには、次の手順に従います。

**ステージングディストリビューションを作成するには (CLI)**

1. **aws cloudfront get-distribution** コマンドと **grep** コマンドを一緒に使用して、*プライマリディストリビューション*として使用するディストリビューションの `ETag` 値を取得します。プライマリーディストリビューションは、本番トラフィックを現在処理しているディストリビューションであり、これを元にしてステージングディストリビューションを作成します。

   次のコマンドでは、例を示しています。次の例では、*primary\$1distribution\$1ID* をプライマリディストリビューションの ID に置き換えます。

   ```
   aws cloudfront get-distribution --id primary_distribution_ID | grep 'ETag'
   ```

   `ETag` 値をコピーします (次のステップで必要になります)。

1. **aws cloudfront copy-distribution** コマンドを使用してステージングディストリビューションを作成します。次のコマンド例では、読みやすくするためにエスケープ文字 (\$1) と改行を使用していますが、これらはコマンドから省略してください。次のコマンドの例で以下の操作を行います。
   + *primary\$1distribution\$1ID* をプライマリディストリビューションの ID に置き換えます。
   + *primary\$1distribution\$1ETag* をプライマリディストリビューションの `ETag` 値 (前のステップで取得したもの) に置き換えます。
   + (オプション) *CLI\$1example* を目的の発信者リファレンス ID に置き換えます。

   ```
   aws cloudfront copy-distribution --primary-distribution-id primary_distribution_ID \
                                    --if-match primary_distribution_ETag \
                                    --staging \
                                    --caller-reference 'CLI_example'
   ```

   コマンドの出力に、ステージングディストリビューションとその設定に関する情報が表示されます。ステージングディストリビューションの CloudFront ドメイン名をコピーします (次のステップで必要になります)。

**継続的デプロイポリシーを作成するには (CLI および入力ファイル)**

1. 次のコマンドを使用して、`continuous-deployment-policy.yaml` コマンドのすべての入力パラメータを含む、**create-continuous-deployment-policy** という名前のファイルを作成します。次のコマンドでは、読みやすくするためにエスケープ文字 (\$1) と改行を使用していますが、これらはコマンドから省略してください。

   ```
   aws cloudfront create-continuous-deployment-policy --generate-cli-skeleton yaml-input \
                                                      > continuous-deployment-policy.yaml
   ```

1. 先ほど作成した `continuous-deployment-policy.yaml` という名前のファイルを開きます。このファイルを編集して、必要な継続的デプロイポリシー設定を指定し、ファイルを保存します。ファイルは以下のように編集します。
   + `StagingDistributionDnsNames` セクションでの編集
     + `Quantity` の値を `1` に変更します。
     + `Items` に、ステージングディストリビューションの CloudFront ドメイン名 (前のステップで保存したもの) を貼り付けます。
   + `TrafficConfig` セクションでの編集
     + `Type` として、`SingleWeight` または `SingleHeader` を選択します。
     + 他のタイプの設定を削除します。例えば、重みベースのトラフィック設定が必要な場合は、`Type` を `SingleWeight` に設定し、`SingleHeaderConfig` 設定を削除します。
     + 重みベースのトラフィック設定を使用するには、`Weight` の値を `.01` (1%) から `.15` (15%) までの 10 進数に設定します。

     `TrafficConfig` のオプションの詳細については、「[ステージングディストリビューションにリクエストをルーティングする](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)」および「[重みベースの設定におけるセッションの維持](understanding-continuous-deployment.md#understanding-continuous-deployment-sessions)」を参照してください。

1. 次のコマンドで `continuous-deployment-policy.yaml` ファイルの入力パラメータを使用し、継続的デプロイポリシーを作成します。

   ```
   aws cloudfront create-continuous-deployment-policy --cli-input-yaml file://continuous-deployment-policy.yaml
   ```

   コマンドの出力の `Id` 値をコピーします。これは継続的デプロイポリシー ID で、次のステップで必要になります。

**継続的デプロイポリシーをプライマリディストリビューションにアタッチするには (CLI および入力ファイル)**

1. 次のコマンドを使用して、プライマリディストリビューションの設定を `primary-distribution.yaml` という名前のファイルに保存します。*primary\$1distribution\$1ID* をプライマリディストリビューションの ID に置き換えます。

   ```
   aws cloudfront get-distribution-config --id primary_distribution_ID --output yaml > primary-distribution.yaml
   ```

1. 先ほど作成した `primary-distribution.yaml` という名前のファイルを開きます。ファイルを編集し、以下の変更を加えます。
   + 継続的デプロイポリシー ID (前のステップでコピーしたもの) を `ContinuousDeploymentPolicyId` フィールドに貼り付けます。
   + `ETag` フィールドの名前を `IfMatch` に変更します。ただし、フィールドの値は変更しないでください。

   完了したら、ファイルを保存します。

1. 次のコマンドを使用して、継続的デプロイポリシーを使用するようにプライマリディストリビューションを更新します。*primary\$1distribution\$1ID* をプライマリディストリビューションの ID に置き換えます。

   ```
   aws cloudfront update-distribution --id primary_distribution_ID --cli-input-yaml file://primary-distribution.yaml
   ```

継続的デプロイポリシーをアタッチした、プライマリディストリビューションの設定をエッジロケーションにデプロイすると、CloudFront はトラフィック設定に基づいてトラフィックの指定された部分をステージングディストリビューションに送信し始めます。

------
#### [ API ]

CloudFront API を使用してステージングポリシーと継続的デプロイポリシーを作成するには、以下の API オペレーションを使用します。
+ [CopyDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CopyDistribution.html)
+ [CreateContinuousDeploymentPolicy](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateContinuousDeploymentPolicy.html)

これらの API コールで指定するフィールドの詳細については、以下を参照してください。
+ [ステージングディストリビューションにリクエストをルーティングする](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)
+ [重みベースの設定におけるセッションの維持](understanding-continuous-deployment.md#understanding-continuous-deployment-sessions)
+ AWS SDK またはその他の API クライアントの API リファレンスドキュメント

ステージングディストリビューションと継続的デプロイポリシーを作成したら、プライマリディストリビューションで [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) を使用して、継続的デプロイポリシーをプライマリディストリビューションにアタッチします。

------

## ステージングディストリビューションを更新する
<a name="update-staging-distribution"></a>

次の手順では、ステージングディストリビューションと継続的デプロイポリシーを更新する方法を示します。

------
#### [ Console ]

プライマリディストリビューションとステージングディストリビューションの両方で特定の設定を更新できます。詳細については、「[プライマリーディストリビューションとステージングディストリビューションを更新する](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)」を参照してください。

**ステージングディストリビューションを更新するには (コンソール)**

1. [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. ナビゲーションペインで、**[ディストリビューション]** を選択します。

1. プライマリディストリビューションを選択します。これは、本番トラフィックを現在処理しているディストリビューションで、ステージングディストリビューションの作成元のディストリビューションです。

1. **[View staging distribution]** (ステージングディストリビューションを表示) を選択します。

1. コンソールを使用して、ステージングディストリビューションの設定を変更します。更新できる設定の詳細については、「[プライマリーディストリビューションとステージングディストリビューションを更新する](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)」を参照してください。

ステージングディストリビューションの設定をエッジロケーションにデプロイするとすぐに、ステージングディストリビューションにルーティングされた受信トラフィックに設定が適用されます。

------
#### [ CLI ]

**ステージングディストリビューションを更新するには (CLI および入力ファイル)**

1. 次のコマンドを使用して、ステージングディストリビューションの設定を `staging-distribution.yaml` という名前のファイルに保存します。*staging\$1distribution\$1ID* をステージングディストリビューションの ID に置き換えます。

   ```
   aws cloudfront get-distribution-config --id staging_distribution_ID --output yaml > staging-distribution.yaml
   ```

1. 先ほど作成した `staging-distribution.yaml` という名前のファイルを開きます。ファイルを編集し、以下の変更を加えます。
   + ステージングディストリビューションの設定を変更します。更新できる設定の詳細については、「[プライマリーディストリビューションとステージングディストリビューションを更新する](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)」を参照してください。
   + `ETag` フィールドの名前を `IfMatch` に変更します。ただし、フィールドの値は変更しないでください。

   完了したら、ファイルを保存します。

1. 次のコマンドを使用して、ステージングディストリビューションの設定を更新します。*staging\$1distribution\$1ID* をステージングディストリビューションの ID に置き換えます。

   ```
   aws cloudfront update-distribution --id staging_distribution_ID --cli-input-yaml file://staging-distribution.yaml
   ```

ステージングディストリビューションの設定をエッジロケーションにデプロイするとすぐに、ステージングディストリビューションにルーティングされた受信トラフィックに設定が適用されます。

------
#### [ API ]

ステージングディストリビューションの設定を更新するには、ステージングディストリビューションで [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) を使用して、ステージングディストリビューションの設定を変更します。更新できる設定の詳細については、「[プライマリーディストリビューションとステージングディストリビューションを更新する](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)」を参照してください。

------

## 継続的デプロイポリシーを更新する
<a name="update-continuous-deployment-policy"></a>

次の手順では、継続的デプロイポリシーを更新する方法を示します。

------
#### [ Console ]

継続的デプロイポリシーを更新することで、ディストリビューションのトラフィック設定を更新できます。

**継続的デプロイポリシーを更新するには (コンソール)**

1. [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. ナビゲーションペインで、**[ディストリビューション]** を選択します。

1. プライマリディストリビューションを選択します。これは、本番トラフィックを現在処理しているディストリビューションで、ステージングディストリビューションの作成元のディストリビューションです。

1. **[Continuous deployment]** (継続的デプロイ) セクションで、**[Edit policy]** (ポリシーの編集) を選択します。

1. 継続的デプロイポリシーのトラフィック設定を変更します。完了したら、**[変更を保存]** を選択します。

継続的デプロイポリシーを更新した、プライマリディストリビューションの設定をエッジロケーションにデプロイすると、CloudFront は更新したトラフィック設定に基づいてステージングディストリビューションにトラフィックを送信し始めます。

------
#### [ CLI ]

**継続的デプロイポリシーを更新するには (CLI および入力ファイル)**

1. 次のコマンドを使用して、継続的デプロイポリシーの設定を `continuous-deployment-policy.yaml` という名前のファイルに保存します。*continuous\$1deployment\$1policy\$1ID* を継続的デプロイポリシーの ID に置き換えます。次のコマンドでは、読みやすくするためにエスケープ文字 (\$1) と改行を使用していますが、これらはコマンドから省略してください。

   ```
   aws cloudfront get-continuous-deployment-policy-config --id continuous_deployment_policy_ID \
                                                          --output yaml > continuous-deployment-policy.yaml
   ```

1. 先ほど作成した `continuous-deployment-policy.yaml` という名前のファイルを開きます。ファイルを編集し、以下の変更を加えます。
   + 継続的デプロイポリシーの設定を必要に応じて変更します。例えば、トラフィック設定をヘッダーベースから重みベースに変更したり、重みベースの設定でトラフィックの割合 (重み) を変更したりできます。詳細については、「[ステージングディストリビューションにリクエストをルーティングする](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)」および「[重みベースの設定におけるセッションの維持](understanding-continuous-deployment.md#understanding-continuous-deployment-sessions)」を参照してください。
   + `ETag` フィールドの名前を `IfMatch` に変更します。ただし、フィールドの値は変更しないでください。

   完了したら、ファイルを保存します。

1. 次のコマンドを使用して、継続的デプロイポリシーを更新します。*continuous\$1deployment\$1policy\$1ID* を継続的デプロイポリシーの ID に置き換えます。次のコマンドでは、読みやすくするためにエスケープ文字 (\$1) と改行を使用していますが、これらはコマンドから省略してください。

   ```
   aws cloudfront update-continuous-deployment-policy --id continuous_deployment_policy_ID \
                                                      --cli-input-yaml file://continuous-deployment-policy.yaml
   ```

継続的デプロイポリシーを更新した、プライマリディストリビューションの設定をエッジロケーションにデプロイすると、CloudFront は更新したトラフィック設定に基づいてステージングディストリビューションにトラフィックを送信し始めます。

------
#### [ API ]

継続的デプロイポリシーを更新するには、[UpdateContinuousDeploymentPolicy](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateContinuousDeploymentPolicy.html) を使用します。

------

## ステージングディストリビューション設定を昇格させる
<a name="promote-staging-distribution-configuration"></a>

次の手順では、ステージングディストリビューション設定を昇格させる方法を示します。

------
#### [ Console ]

ステージングディストリビューションを*昇格*させると、CloudFront はステージングディストリビューションからプライマリディストリビューションに設定をコピーします。また、CloudFront は継続的デプロイポリシーを無効にし、すべてのトラフィックをプライマリディストリビューションにルーティングします。

設定を昇格させると、設定の変更を次回テストするときに、同じステージングディストリビューションを再利用できます。

**ステージングディストリビューションの設定を昇格させるには (コンソール)**

1. [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. ナビゲーションペインで、**[ディストリビューション]** を選択します。

1. プライマリディストリビューションを選択します。これは、本番トラフィックを現在処理しているディストリビューションで、ステージングディストリビューションの作成元のディストリビューションです。

1. **[Continuous deployment]** (継続的デプロイ) セクションで、**[Promote]** (昇格) を選択します。

1. 「**confirm**」と入力して **[Promote]** (昇格) を選択します。

------
#### [ CLI ]

ステージングディストリビューションを*昇格*させると、CloudFront はステージングディストリビューションからプライマリディストリビューションに設定をコピーします。また、CloudFront は継続的デプロイポリシーを無効にし、すべてのトラフィックをプライマリディストリビューションにルーティングします。

設定を昇格させると、設定の変更を次回テストするときに、同じステージングディストリビューションを再利用できます。

**ステージングディストリビューションの設定を昇格させるには (CLI)**
+ **aws cloudfront update-distribution-with-staging-config** コマンドを使用して、ステージングディストリビューションの設定をプライマリディストリビューションに昇格させます。次のコマンド例では、読みやすくするためにエスケープ文字 (\$1) と改行を使用していますが、これらはコマンドから省略してください。次のコマンドの例で以下の操作を行います。
  + *primary\$1distribution\$1ID* をプライマリディストリビューションの ID に置き換えます。
  + *staging\$1distribution\$1ID* をステージングディストリビューションの ID に置き換えます。
  + *primary\$1distribution\$1ETag* と *staging\$1distribution\$1ETag* をプライマリディストリビューションとステージングディストリビューションの `ETag` 値に置き換えます。例に示すように、プライマリディストリビューションの値が最初になっていることを確認します。

  ```
  aws cloudfront update-distribution-with-staging-config --id primary_distribution_ID \
                                                         --staging-distribution-id staging_distribution_ID \
                                                         --if-match 'primary_distribution_ETag,staging_distribution_ETag'
  ```

------
#### [ API ]

ステージングディストリビューションの設定をプライマリディストリビューションに昇格させるには、[UpdateDistributionWithStagingConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistributionWithStagingConfig.html) を使用します。

------