

# 使用暂存分配和持续部署策略
<a name="working-with-staging-distribution-continuous-deployment-policy"></a>

您可以使用 Amazon Command Line Interface（Amazon CLI）或 CloudFront API 在 CloudFront 控制台中创建、更新和修改暂存分配与持续部署策略。

## 使用持续部署策略创建暂存分配
<a name="create-staging-distribution-continuous-deployment-policy"></a>

以下步骤演示如何使用持续部署策略创建暂存分配。

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

您可以使用Amazon Web Services 管理控制台，通过持续部署策略创建暂存分配。

**创建暂存分配和持续部署策略（控制台）**

1. 登录 Amazon Web Services 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home)。

1. 在导航窗格中，选择**分配**。

1. 选择要用作*主分配*的分配。主分配是当前为生产流量提供服务的分配，您将从中创建暂存分配。

1. 在**持续部署**部分中，选择**创建暂存分配**。这将打开**创建暂存分配**向导。

1. 在**创建暂存分配**向导中，执行以下操作：

   1. （可选）键入暂存分配的描述。

   1. 选择**下一步**。

   1. 修改暂存分配的配置。有关您可以更新的设置的更多信息，请参阅[更新主分配和暂存分配](understanding-continuous-deployment.md#updating-staging-and-primary-distributions)。

      修改完暂存分配的配置后，选择**下一步**。

   1. 使用控制台指定**流量配置**。这将决定 CloudFront 如何将流量路由到暂存分配。（CloudFront 将流量配置存储在*持续部署策略*中。）

      有关**流量配置**中的选项的更多信息，请参阅[将请求路由到暂存分配](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)。

      完成**流量配置**后，选择**下一步**。

   1. 查看暂存分配的配置，包括流量配置，然后选择**创建暂存分配**。

在 CloudFront 控制台中完成**创建暂存分配**向导后，CloudFront 将执行以下操作：
+ 使用您指定的设置创建暂存分配（在步骤 5c 中）
+ 使用您指定的流量配置创建持续部署策略（在步骤 5d 中）
+ 将持续部署策略附加到您从中创建暂存分配的主分配

当主分配的配置以及附加的持续部署策略部署到边缘站点时，CloudFront 会开始根据流量配置将指定部分的流量发送到暂存分配。

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

要使用 Amazon 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`（百分之一）和 `.15`（百分之十五）之间的十进制数。

     有关 `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.amazonaws.cn/cloudfront/latest/APIReference/API_CopyDistribution.html)
+ [CreateContinuousDeploymentPolicy](https://docs.amazonaws.cn/cloudfront/latest/APIReference/API_CreateContinuousDeploymentPolicy.html)

有关您在这些 API 调用中指定的字段的更多信息，请参阅以下内容：
+ [将请求路由到暂存分配](understanding-continuous-deployment.md#understanding-continuous-deployment-routing)
+ [基于权重的配置的会话粘性](understanding-continuous-deployment.md#understanding-continuous-deployment-sessions)
+ 有关 Amazon SDK 或其他 API 客户端的 API 参考文档

创建暂存分配和持续部署策略后，使用 [UpdateDistribution](https://docs.amazonaws.cn/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.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home) 打开 CloudFront 控制台

1. 在导航窗格中，选择**分配**。

1. 选择主分配。这是当前为生产流量提供服务的分配，您将从中创建暂存分配。

1. 选择**查看暂存分配**。

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.amazonaws.cn/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.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home) 打开 CloudFront 控制台

1. 在导航窗格中，选择**分配**。

1. 选择主分配。这是当前为生产流量提供服务的分发，您将从中创建暂存分发。

1. 在**持续部署**部分中，选择**编辑策略**。

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.amazonaws.cn/cloudfront/latest/APIReference/API_UpdateContinuousDeploymentPolicy.html)

------

## 提升暂存分配的配置
<a name="promote-staging-distribution-configuration"></a>

以下步骤演示如何提升暂存分配的配置。

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

在*提升*暂存分配时，CloudFront 会将配置从暂存分配复制到主分配。CloudFront 还将禁用持续部署策略，并将所有流量路由到主分配。

提升配置后，可以在下次要测试配置更改时重用相同的暂存分配。

**提升暂存分配的配置（控制台）**

1. 通过 [https://console.amazonaws.cn/cloudfront/v4/home](https://console.amazonaws.cn/cloudfront/v4/home) 打开 CloudFront 控制台

1. 在导航窗格中，选择**分配**。

1. 选择主分配。这是当前为生产流量提供服务的分发，您将从中创建暂存分发。

1. 在**持续部署**部分中，选择**提升**。

1. 键入 **confirm**，然后选择**提升**。

------
#### [ 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.amazonaws.cn/cloudfront/latest/APIReference/API_UpdateDistributionWithStagingConfig.html)。

------