

# 复制 S3 on Outposts 的对象
<a name="S3OutpostsReplication"></a>

借助 AWS Outposts 上的 S3 复制，您可以将 Amazon S3 on Outposts 配置为在不同的 Outposts 之间或在同一 Outpost 上的桶之间自动复制 S3 对象。您可以使用 Outposts 上的 S3 复制，在相同或不同的 Outposts 或跨不同的账户维护数据的多个副本，以帮助满足数据驻留需求。Outposts 上的 S3 复制有助于满足您的合规存储需求并实现跨账户的数据共享。如果需要确保副本与源数据完全相同，可以使用 Outposts 上的 S3 复制来制作保留所有元数据的对象的副本，如原始对象创建时间、标签和版本 ID。

Outposts 上的 S3 复制还提供详细的指标和通知，以监控桶之间对象复制的状态。您可以使用 Amazon CloudWatch，通过跟踪待复制的字节数、待复制的操作数以及源桶和目标桶之间的复制延迟来监控复制进度。要快速诊断和纠正配置问题，还可以设置 Amazon EventBridge 以接收有关复制对象失败的通知。要了解更多信息，请参阅[管理您的复制](manage-outposts-replication.md)。

**Topics**
+ [复制配置](#outposts-replication-add-config)
+ [Outposts 上的 S3 复制的要求](#outposts-replication-requirements)
+ [复制什么内容？](#outposts-replication-what-is-replicated)
+ [不复制什么内容？](#outposts-replication-what-is-not-replicated)
+ [Outposts 上的 S3 复制不支持什么？](#outposts-replication-what-is-not-supported)
+ [设置复制](outposts-replication-how-setup.md)
+ [管理您的复制](manage-outposts-replication.md)

## 复制配置
<a name="outposts-replication-add-config"></a>

S3 on Outposts 以 XML 格式存储复制配置。在复制配置 XML 文件中，您将指定一个 AWS Identity and Access Management (IAM) 角色以及一个或多个规则。

```
<ReplicationConfiguration>
    <Role>IAM-role-ARN</Role>
    <Rule>
        ...
    </Rule>
    <Rule>
         ... 
    </Rule>
     ...
</ReplicationConfiguration>
```

S3 on Outposts 无法在未经您许可的情况下复制对象。您使用在复制配置中指定的 IAM 角色向 S3 on Outposts 授予权限。S3 on Outposts 代入此 IAM 角色以代表您复制对象。在开始复制之前，您必须向 IAM 角色授予所需的权限。有关 S3 on Outposts 的这些权限的更多信息，请参阅[创建 IAM 角色](outposts-replication-prerequisites-config.md#outposts-rep-pretwo)。

在以下场景的复制配置中添加一个规则：
+ 您希望复制所有对象。
+ 您希望复制对象子集。通过在规则中添加一个筛选条件，可标识对象子级。在该筛选条件中，指定对象键前缀、标签或二者的组合以标识要向其应用规则的对象子集。

如果要复制其他对象子集，请在复制配置中添加多个规则。在每个规则中，指定一个选择不同对象子集的筛选条件。例如，您可能选择了键前缀为 `tax/` 或 `document/` 的复制对象。要做到这一点，您需要添加两个规则，一个规则指定 `tax/` 键前缀筛选条件，另一个指定 `document/` 键前缀。

有关 S3 on Outposts 复制配置和复制规则的更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [ReplicationConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ReplicationConfiguration.html)。

## Outposts 上的 S3 复制的要求
<a name="outposts-replication-requirements"></a>

复制有下列要求：
+ 目标 Outpost CIDR 范围必须在源 Outpost 子网表中关联。有关更多信息，请参阅 [创建复制规则的先决条件](outposts-replication-prerequisites-config.md)。
+ 源桶和目标桶必须均已启用 S3 版本控制。有关版本控制的更多信息，请参阅[为 S3 on Outposts 桶管理 S3 版本控制](S3OutpostsManagingVersioning.md)。
+ Amazon S3 on Outposts 必须有权代表您将对象从源桶复制到目标桶。这意味着您必须创建一个服务角色，以便将 `GET` 和 `PUT` 权限委派给 S3 on Outposts。

  1. 在创建服务角色之前，您必须拥有源桶的 `GET` 权限和目标桶的 `PUT` 权限。

  1. 要创建服务角色以将权限委派给 S3 on Outposts，您必须先配置权限以允许 IAM 实体（用户或角色）执行 `iam:CreateRole` 和 `iam:PassRole` 操作。然后，您允许 IAM 实体创建服务角色。要使 S3 on Outposts 代表您代入此服务角色，并将 `GET` 和 `PUT` 权限委派给 S3 on Outposts，您必须为该角色分配必要的信任和权限策略。有关 S3 on Outposts 的这些权限的更多信息，请参阅[创建 IAM 角色](outposts-replication-prerequisites-config.md#outposts-rep-pretwo)。有关创建服务角色的更多信息，请参阅[创建服务角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

## 复制什么内容？
<a name="outposts-replication-what-is-replicated"></a>

原定设置情况下，S3 on Outposts 会复制以下内容：
+ 添加复制配置之后创建的对象。
+ 从源对象到副本的对象元数据。有关如何将元数据从副本复制到源对象的信息，请参阅[在 Outposts 上启用了 Amazon S3 副本修改同步时的复制状态](manage-outposts-replication.md#outposts-replication-status-sync)。
+ 对象标签（如果有）。

### 删除操作对复制操作有何影响
<a name="outposts-replication-delete-op"></a>

如果您从源存储桶中删除对象，则默认情况下会执行以下操作：
+ 如果您发出 `DELETE` 请求而未指定对象版本 ID，S3 on Outposts 会添加删除标记。S3 on Outposts 将按如下所示处理该删除标记：
  + 原定设置情况下，S3 on Outposts 不复制删除标记。
  + 但是，您可以将*删除标记复制*添加到非基于标记的规则。有关如何在复制配置中启用删除标记复制的更多信息，请参阅[使用 S3 控制台](replication-between-outposts.md#outposts-enable-replication)。
+ 如果您在 `DELETE` 请求中指定一个要删除的对象版本 ID，S3 on Outposts 会在源桶中永久删除该对象版本。但是，它不会将删除操作复制到目标桶中。换句话说，它不会从目标存储桶中删除同一对象版本。此行为可防止恶意删除数据。

## 不复制什么内容？
<a name="outposts-replication-what-is-not-replicated"></a>

原定设置情况下，S3 on Outposts 不复制以下内容：
+ 源存储桶中作为另一个复制规则所建副本的对象。例如，假设您配置的复制中，存储桶 A 是源，存储桶 B 是目标。现在假设您添加另一个复制配置，其中存储桶 B 是源，而存储桶 C 是目标。在这种情况下，存储桶 B 中作为存储桶 A 中对象的副本的对象不会复制到存储桶 C。
+ 源存储桶中已复制到其他目标的对象。例如，如果您在现有复制配置中更改目标桶，则 S3 on Outposts 不会再次复制对象。
+ 使用具有客户提供的加密密钥的服务器端加密（SSE-C）创建的对象。
+ 对存储桶级别子资源进行的更新。

  例如，如果您更改生命周期配置或向源存储桶添加通知配置，则这些更改不会应用于目标存储桶。此功能使您可以在源桶和目标桶中具有不同的配置。
+ 由生命周期配置执行的操作。

  例如，如果您只在源桶上启用生命周期配置并配置过期操作，S3 on Outposts 会为源桶中的过期对象创建删除标记，但不会将这些标记复制到目标桶。如果您希望对源存储桶和目标存储桶应用相同的生命周期配置，请对这两个存储桶启用相同的生命周期配置。有关生命周期配置的更多信息，请参阅 [为 Amazon S3 on Outposts 桶创建和管理生命周期配置](S3OutpostsLifecycleManaging.md)。

## Outposts 上的 S3 复制不支持什么？
<a name="outposts-replication-what-is-not-supported"></a>

S3 on Outposts 目前不支持以下 S3 复制功能。
+ S3 Replication Time Control（S3 RTC）。不支持 S3 RTC，因为 Outposts 上的 S3 复制中的对象流量通过您的本地网络（本地网关）传输。有关本地网关的更多信息，请参阅《AWS Outposts 用户指南》**中的[使用本地网关](https://docs.aws.amazon.com/outposts/latest/userguide/outposts-local-gateways.html#working-with-lgw)。
+ 适用于批量操作的 S3 复制。

# 设置复制
<a name="outposts-replication-how-setup"></a>

**注意**  
将不会自动复制桶中在您设置复制规则之前就存在的对象。换句话说，Amazon S3 on Outposts 不以回溯方式复制对象。要复制在复制配置之前创建的对象，您可以使用 `CopyObject` API 操作将它们复制到同一个桶中。复制对象后，它们在桶中显示为“新”对象，复制配置将应用于它们。有关复制对象的详细信息，请参阅[使用 适用于 Java 的 AWS SDK 复制 Amazon S3 on Outposts 存储桶中的对象](S3OutpostsCopyObject.md)和《Amazon Simple Storage Service API 参考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)。

要启用 Outposts 上的 S3 复制，请将复制规则添加到您的源 Outposts 桶。复制规则指示 S3 on Outposts 按照指定的方式复制对象。在复制规则中，您必须提供以下内容：
+ **源 Outposts 桶接入点** – 您希望 S3 on Outposts 从中复制对象的桶的接入点 Amazon 资源名称（ARN）或接入点别名。有关使用接入点别名的更多信息，请参阅[为 S3 on Outposts 桶接入点使用桶式别名](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-outposts-access-points-alias.html)。
+ **要复制的对象** – 您可以复制源 Outposts 桶中的所有对象或对象子集。通过在配置中提供一个[键名前缀](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix)和/或一个或多个对象标签，可标识子集。

  例如，如果您配置复制规则以仅复制键名称前缀为 `Tax/` 的对象，则 S3 on Outposts 仅复制键为 `Tax/doc1` 或 `Tax/doc2` 之类的对象。但它不复制具有键 `Legal/doc3` 的对象。如果您同时指定前缀和一个或多个标签，则 S3 on Outposts 仅复制具有特定键前缀和标签的对象。
+ **目标 Outposts 桶** – 您希望 S3 on Outposts 将对象复制到的桶的 ARN 或接入点别名。

您可以使用 REST API、AWS SDK、AWS Command Line Interface（AWS CLI）或 Amazon S3 控制台配置复制规则。

S3 on Outposts 还提供了 API 操作来支持设置复制规则。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的以下主题：
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketReplication.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketReplication.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketReplication.html) 

**Topics**
+ [创建复制规则的先决条件](outposts-replication-prerequisites-config.md)
+ [在 Outposts 上创建复制规则](replication-between-outposts.md)

# 创建复制规则的先决条件
<a name="outposts-replication-prerequisites-config"></a>

**Topics**
+ [连接您的源和目标 Outpost 子网](#outposts-rep-preone)
+ [创建 IAM 角色](#outposts-rep-pretwo)

## 连接您的源和目标 Outpost 子网
<a name="outposts-rep-preone"></a>

要使复制流量通过本地网关从源 Outpost 传输到目标 Outpost，您必须添加一条新路由来设置网络。必须将接入点的无类别域间路由（CIDR）网络范围连接在一起。对于每对接入点，您只需设置一次此连接。

设置连接的某些步骤有所不同，具体取决于与接入点关联的 Outposts 端点的访问类型。端点的访问类型为**私有**（适用于 AWS Outposts 的直接虚拟私有云 [VPC] 路由）或**客户拥有的 IP**（本地网络中客户拥有的 IP 地址池 [CoIP 池]）。

### 步骤 1：查找源 Outposts 端点的 CIDR 范围
<a name="outposts-pre-step1"></a>

**查找与源接入点关联的源端点的 CIDR 范围**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择 **Outposts buckets**（Outposts 桶）。

1. 在 **Outposts 桶**列表中，选择要用于复制的源桶。

1. 选择 **Outposts 接入点**选项卡，然后为您的复制规则选择源桶的 Outposts 接入点。

1. 选择 Outposts 端点。

1. 复制子网 ID 以在[步骤 5](#outposts-pre-step5) 中使用。

1. 用于查找源 Outposts 端点的 CIDR 范围的方法取决于您的端点的访问类型。

   在 **Outposts 端点概览**部分中，查看**访问类型**。
   + 如果访问类型为**私有**，请复制**无类别域间路由（CIDR）**值以在[步骤 6](#outposts-pre-step6) 中使用。
   + 如果访问类型为**客户拥有的 IP**，请执行以下操作：

     1. 复制**客户拥有的 IPv4 池**值，稍后将用作地址池的 ID。

     1. 打开 AWS Outposts 控制台 ([https://console.aws.amazon.com/outposts/](https://console.aws.amazon.com/outposts/home))。

     1. 在导航窗格中，选择**本地网关路由表**。

     1. 选择您的源 Outpost 的**本地网关路由表 ID** 值。

     1. 在详细信息窗格中，选择 **CoIP 池**选项卡。将您之前复制的 CoIP 池 ID 的值粘贴到搜索框中。

     1. 对于匹配的 CoIP 池，复制您的源 Outposts 端点的相应 **CIDR** 值，以便在[步骤 6](#outposts-pre-step6) 中使用。

### 步骤 2：查找目标 Outposts 端点的子网 ID 和 CIDR 范围
<a name="outposts-pre-step2"></a>

要查找与目标接入点关联的目标端点的子网 ID 和 CIDR 范围，请按照[步骤 1](#outposts-pre-step1) 中的相同子步骤进行操作，并在应用这些子步骤时将源 Outposts 端点更改为目标 Outposts 端点。复制目标 Outposts 端点的子网 ID 值，以便在[步骤 6](#outposts-pre-step6) 中使用。复制目标 Outposts 端点的 CIDR 值，以便在[步骤 5](#outposts-pre-step5) 中使用。

### 步骤 3：查找源 Outpost 的本地网关 ID
<a name="outposts-pre-step3"></a>

**查找源 Outpost 的本地网关 ID**

1. 打开 AWS Outposts 控制台 ([https://console.aws.amazon.com/outposts/](https://console.aws.amazon.com/outposts/home))。

1. 在左侧导航窗格中，选择**本地网关**。

1. 在**本地网关**页面上，找到要用于复制的源 Outpost 的 Outpost ID。

1. 复制源 Outpost 的本地网关 ID 值，以便在[步骤 5](#outposts-pre-step5) 中使用。

有关本地网关的更多信息，请参阅《AWS Outposts 用户指南》**中的[本地网关](https://docs.aws.amazon.com/outposts/latest/userguide/outposts-local-gateways.html)。

### 步骤 4：查找目标 Outpost 的本地网关 ID
<a name="outposts-pre-step4"></a>

要查找目标 Outpost 的本地网关 ID，请按照[步骤 3](#outposts-pre-step3) 中的相同子步骤操作，不同之处是查找目标 Outpost 的 Outpost ID。复制目标 Outpost 的本地网关 ID 值，以便在[步骤 6](#outposts-pre-step6) 中使用。

### 步骤 5：设置从源 Outpost 子网到目标 Outpost 子网的连接
<a name="outposts-pre-step5"></a>

**从源 Outpost 子网连接到目标 Outpost 子网**

1. 登录到 AWS 管理控制台并打开 VPC 控制台，网址为：[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)。

1. 在左侧导航窗格中，选择 **Subnets**。

1. 在搜索框中，输入您在[步骤 1](#outposts-pre-step1) 中找到的源 Outposts 端点的子网 ID。选择具有匹配的子网 ID 的子网。

1. 对于匹配的子网项目，选择该子网的**路由表**值。

1. 在包含选定路由表的页面上，选择**操作**，然后选择**编辑路由**。

1. 在**编辑路由**页面上，选择**添加路由**。

1. 在**目标**下，输入您在[步骤 2](#outposts-pre-step2) 中找到的目标 Outposts 端点的 CIDR 范围。

1. 在**目标**下，选择 **Outpost 本地网关**，然后输入您在[步骤 3](#outposts-pre-step3) 中找到的源 Outpost 的本地网关 ID。

1. 选择**保存更改**。

1. 确保路由的**状态**为**活动**。

### 步骤 6：设置从目标 Outpost 子网到源 Outpost 子网的连接
<a name="outposts-pre-step6"></a>

1. 登录到 AWS 管理控制台并打开 VPC 控制台，网址为：[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)。

1. 在左侧导航窗格中，选择 **Subnets**。

1. 在搜索框中，输入您在[步骤 2](#outposts-pre-step2) 中找到的目标 Outposts 端点的子网 ID。选择具有匹配的子网 ID 的子网。

1. 对于匹配的子网项目，选择该子网的**路由表**值。

1. 在包含选定路由表的页面上，选择**操作**，然后选择**编辑路由**。

1. 在**编辑路由**页面上，选择**添加路由**。

1. 在**目标**下，输入您在[步骤 1](#outposts-pre-step1) 中找到的源 Outposts 端点的 CIDR 范围。

1. 在**目标**下，选择 **Outpost 本地网关**，然后输入您在[步骤 4](#outposts-pre-step4) 中找到的目标 Outpost 的本地网关 ID。

1. 选择**保存更改**。

1. 确保路由的**状态**为**活动**。

 连接源接入点和目标接入点的 CIDR 网络范围后，必须创建 AWS Identity and Access Management（IAM）角色。

## 创建 IAM 角色
<a name="outposts-rep-pretwo"></a>

原定设置情况下，所有 S3 on Outposts 资源（桶、对象和相关子资源）都是私有的，只有资源拥有者可以访问相应的资源。S3 on Outposts 需要权限才能从源 Outposts 桶读取和复制对象。您通过创建一个 IAM *服务角色*，然后在复制配置中指定该角色，授予这些权限。

此部分介绍信任策略及所需的最低权限策略。示例演练提供创建 IAM 角色的分步说明。有关更多信息，请参阅 [在 Outposts 上创建复制规则](replication-between-outposts.md)。有关 IAM 角色的更多信息，请参阅《IAM 用户指南》**中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。
+ 以下示例显示了一个*信任策略*，您在其中将 S3 on Outposts 标识为可代入此角色的服务主体。

------
#### [ JSON ]

****  

  ```
  {
     "Version":"2012-10-17",		 	 	 
     "Statement":[
        {
           "Effect":"Allow",
           "Principal":{
              "Service":"s3-outposts.amazonaws.com"
           },
           "Action":"sts:AssumeRole"
        }
     ]
  }
  ```

------
+ 以下示例显示了一个*访问策略*，您在其中向角色授予代表您执行复制任务的权限。当 S3 on Outposts 代入此角色时，它将具有您在此策略中指定的权限。要使用这一策略，请将 `user input placeholders` 替换为您自己的信息。确保将它们替换为源和目标 Outpost 的 Outpost ID 以及源和目标 Outposts 桶的桶名称和接入点名称。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3-outposts:GetObjectVersionForReplication",
                  "s3-outposts:GetObjectVersionTagging"
              ],
              "Resource": [
                  "arn:aws:s3-outposts:us-east-1:123456789012:outpost/SOURCE-OUTPOST-ID/bucket/SOURCE-OUTPOSTS-BUCKET/object/*",
                  "arn:aws:s3-outposts:us-east-1:123456789012:outpost/SOURCE-OUTPOST-ID/accesspoint/SOURCE-OUTPOSTS-BUCKET-ACCESS-POINT/object/*"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "s3-outposts:ReplicateObject",
                  "s3-outposts:ReplicateDelete"
              ],
              "Resource": [
                  "arn:aws:s3-outposts:us-east-1:123456789012:outpost/DESTINATION-OUTPOST-ID/bucket/DESTINATION-OUTPOSTS-BUCKET/object/*",
                  "arn:aws:s3-outposts:us-east-1:123456789012:outpost/DESTINATION-OUTPOST-ID/accesspoint/DESTINATION-OUTPOSTS-BUCKET-ACCESS-POINT/object/*"
              ]
          }
      ]
  }
  ```

------

  访问策略授予以下操作的权限：
  + `s3-outposts:GetObjectVersionForReplication` – 授予对所有对象执行此操作的权限，以允许 S3 on Outposts 获取与每个对象关联的特定对象版本。

    
  + `s3-outposts:GetObjectVersionTagging` – 针对 *`SOURCE-OUTPOSTS-BUCKET`* 桶（源桶）中的对象执行此操作的权限允许 S3 on Outposts 读取对象标签以进行复制。有关更多信息，请参阅 [为 S3 on Outposts 存储桶添加标签](S3OutpostsBucketTags.md)。如果 S3 on Outposts 没有此权限，它将复制对象而不是对象标签。
  + `s3-outposts:ReplicateObject` 和 `s3-outposts:ReplicateDelete` – 针对 *`DESTINATION-OUTPOSTS-BUCKET`* 桶（目标桶）中的所有对象执行这些操作的权限允许 S3 on Outposts 将对象或删除标记复制到目标 Outposts 桶。有关删除标记的信息，请参阅 [删除操作对复制操作有何影响](S3OutpostsReplication.md#outposts-replication-delete-op)。
**注意**  
对 *`DESTINATION-OUTPOSTS-BUCKET`* 桶（目标桶）执行 `s3-outposts:ReplicateObject` 操作的权限还允许复制对象标签。因此，您无需显式授予执行 `s3-outposts:ReplicateTags` 操作的权限。
对于跨账户复制，目标 Outposts 桶的拥有者必须更新其桶策略，以授予对 *`DESTINATION-OUTPOSTS-BUCKET`* 执行 `s3-outposts:ReplicateObject` 操作的权限。`s3-outposts:ReplicateObject` 操作允许 S3 on Outposts 将对象和对象标签复制到目标 Otposts 桶。

  有关 S3 on Outposts 操作的列表，请参阅 [S3 on Outposts 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3onoutposts.html#amazons3onoutposts-actions-as-permissions)。
**重要**  
拥有 IAM 角色的 AWS 账户 必须拥有其向 IAM 角色授予的操作的权限。  
例如，假定源 Outposts 桶包含由另一个 AWS 账户拥有的对象。对象的拥有者必须通过桶策略和接入点策略，向拥有 IAM 角色的 AWS 账户显式授予必要的权限。否则，S3 on Outposts 无法访问这些对象，因而这些对象的复制将失败。  
此处介绍的权限与最低复制配置相关。如果您选择添加可选复制配置，则必须向 S3 on Outposts 授予其他权限。

### 在源和目标 Outposts 桶由不同的 AWS 账户拥有时授予权限
<a name="outposts-rep-prethree"></a>

当源和目标 Outposts 桶由不同的账户拥有时，目标 Outposts 桶的拥有者必须针对目标桶更新桶策略和接入点策略。这些策略必须向源 Outposts 桶的拥有者和 IAM 服务角色授予执行复制操作的权限，如以下策略示例所示，否则复制将失败。在以下策略示例中，*`DESTINATION-OUTPOSTS-BUCKET`* 是目标桶。要使用这些策略示例，请将 `user input placeholders` 替换为您自己的信息。

如果您手动创建 IAM 服务角色，请将角色路径设置为 `role/service-role/`，如以下策略示例所示。有关更多信息，请参阅 *IAM 用户指南*中的 [IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PolicyForDestinationBucket",
    "Statement": [
        {
            "Sid": "Permissions on objects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/service-role/source-account-IAM-role"
            },
            "Action": [
                "s3-outposts:ReplicateDelete",
                "s3-outposts:ReplicateObject"
            ],
            "Resource": [
                "arn:aws:s3-outposts:us-east-1:444455556666:outpost/DESTINATION-OUTPOST-ID/bucket/DESTINATION-OUTPOSTS-BUCKET/object/*"
            ]
        }
    ]
}
```

------

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PolicyForDestinationAccessPoint",
    "Statement": [
        {
            "Sid": "Permissions on objects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/service-role/source-account-IAM-role"
            },
            "Action": [
                "s3-outposts:ReplicateDelete",
                "s3-outposts:ReplicateObject"
            ],
            "Resource": [
                "arn:aws:s3-outposts:us-east-1:111122223333:outpost/DESTINATION-OUTPOST-ID/accesspoint/DESTINATION-OUTPOSTS-BUCKET-ACCESS-POINT/object/*"
            ]
        }
    ]
}
```

------

**注意**  
如果源 Outposts 桶中的对象带有标签，请注意以下事项：  
如果源 Outposts 桶拥有者向 S3 on Outposts 授予执行 `s3-outposts:GetObjectVersionTagging` 和 `s3-outposts:ReplicateTags` 操作的权限来复制对象标签（通过 IAM 角色），则 Amazon S3 将复制标签以及对象。有关 IAM 角色的信息，请参阅 [创建 IAM 角色](#outposts-rep-pretwo)。

# 在 Outposts 上创建复制规则
<a name="replication-between-outposts"></a>

Outposts 上的 S3 复制是跨相同或不同 AWS Outposts 中的桶自动、异步复制对象。复制操作会将源 Outposts 桶中新创建的对象和对象更新复制到目标 Outposts 桶。有关更多信息，请参阅 [复制 S3 on Outposts 的对象](S3OutpostsReplication.md)。

**注意**  
将不会复制在设置复制规则之前存在于源 Outposts 桶中的对象。换句话说，S3 on Outposts 不以回溯方式复制对象。要复制在复制配置之前创建的对象，您可以使用 `CopyObject` API 操作将它们复制到同一个桶中。复制对象后，它们在桶中显示为“新”对象，复制配置将应用于它们。有关复制对象的详细信息，请参阅[使用 适用于 Java 的 AWS SDK 复制 Amazon S3 on Outposts 存储桶中的对象](S3OutpostsCopyObject.md)和《Amazon Simple Storage Service API 参考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)。

配置复制时，需要向源 Outposts 桶添加复制规则。复制规则定义要复制的源 Outposts 桶对象和将存储复制的对象的目标 Outposts 桶。您可以创建一条规则，以复制存储桶中的所有对象或具有特定键名前缀和/或一个或多个对象标签的对象子集。目标 Outposts 桶与源 Outposts 桶可以位于同一 Outpost 中，也可以位于不同的 Outpost 中。

对于 S3 on Outposts 复制规则，您必须提供源 Outposts 桶的接入点 Amazon 资源名称（ARN）和目标 Outposts 桶的接入点 ARN，而不是源和目标 Outposts 桶名称。

如果您指定要删除的对象版本 ID，S3 on Outposts 会在源 Outposts 桶中删除该对象版本。但它不会将删除操作复制到目标 Outposts 桶中。换句话说，它不会从目标 Outposts 桶中删除同一对象版本。此行为可防止恶意删除数据。

当您将复制规则添加到 Outposts 桶后，原定设置情况下将启用复制规则，使该规则在您保存它后立即开始发挥作用。

在此示例中，您为位于不同的 Outposts 上且由同一 AWS 账户拥有的源和目标 Outposts 桶设置复制。提供了使用 Amazon S3 控制台、AWS Command Line Interface (AWS CLI) 以及 适用于 Java 的 AWS SDK 和 适用于 .NET 的 AWS SDK 的示例。有关跨账户 Outposts 上的 S3 复制权限的信息，请参阅[在源和目标 Outposts 桶由不同的 AWS 账户拥有时授予权限](outposts-replication-prerequisites-config.md#outposts-rep-prethree)。

有关设置 S3 on Outposts 复制规则的先决条件，请参阅[创建复制规则的先决条件](outposts-replication-prerequisites-config.md)。

## 使用 S3 控制台
<a name="outposts-enable-replication"></a>

当目标 Amazon S3 on Outposts 桶位于与源 Outposts 桶不同的 Outpost 中时，请按照以下步骤配置复制规则。

如果目标 Outposts 桶与源 Outposts 桶位于不同的账户中，您必须向目标 Outposts 桶添加桶策略，以便向源 Outposts 桶账户的拥有者授予向目标 Outposts 桶复制对象的权限。

**创建复制规则**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在 **Outposts 桶**列表中，选择要用作源桶的桶名称。

1. 选择**管理**选项卡，向下滚动到**复制规则**部分，然后选择**创建复制规则**。

1. 在**复制规则名称**下，输入规则的名称以帮助稍后识别规则。该名称是必填项，并且它在存储桶内必须是唯一的。

1. 在**状态**下，**已启用**在原定设置情况下处于选中状态。已启用的规则将在您保存它后立即开始工作。如果您想以后再启用该规则，请选择**已禁用**。

1. 在**优先级**下，规则的优先级值决定了在存在重叠的规则时要应用哪条规则。当对象包含在多个复制规则的范围内时，S3 on Outposts 使用这些优先级值来避免冲突。原定设置情况下，新规则以最高优先级添加到复制配置中。数字越大，优先级越高。

   要更改规则的优先级，请在保存规则后，从复制规则列表中选择规则名称，选择**操作**，然后选择**编辑优先级**。

1. 在**源桶**下，您可以通过以下选项设置复制源：
   + 要复制整个桶，请选择**应用到桶中的*所有* 对象**。
   + 要将前缀或标签筛选应用到复制源，请选择**使用一个或多个筛选条件限制此规则的范围**。您可以组合前缀和标签。
     + 要复制所有具有相同前缀的对象，请在**前缀**下方的框中输入前缀。使用**前缀**筛选条件将复制限制为名称以相同字符串（例如，`pictures`）开头的所有对象。

       如果您输入的前缀是文件夹名称，则必须使用 **/**（正斜杠）作为最后一个字符（例如，`pictures/`）。
     + 要复制具有一个或多个相同对象标签的所有对象，请选择**添加标签**，然后在框中输入键值对。要添加另一个标签，请重复该过程。有关对象标签的更多信息，请参阅 [为 S3 on Outposts 存储桶添加标签](S3OutpostsBucketTags.md)。

1. 要访问您的 S3 on Outposts 源桶以进行复制，请在**源接入点名称**下，选择一个连接到源桶的接入点。

1. 在**目标**下，选择您希望 S3 on Outposts 向其中复制对象的目标 Outposts 桶的接入点 ARN。目标 Outposts 桶可以与源 Outposts 桶位于相同或不同的 AWS 账户中。

   如果目标桶与源 Outposts 桶位于不同的账户中，您必须向目标 Outposts 桶添加桶策略，以便为源 Outposts 桶账户的拥有者授予将对象复制到目标 Outposts 桶中的权限。有关更多信息，请参阅 [在源和目标 Outposts 桶由不同的 AWS 账户拥有时授予权限](outposts-replication-prerequisites-config.md#outposts-rep-prethree)。
**注意**  
如果未对目标 Outposts 桶启用版本控制，您将收到包含**启用版本控制**按钮的警告。选择此按钮可对桶启用版本控制。

1. 设置 AWS Identity and Access Management（IAM）服务角色，S3 on Outposts 可以代入该角色以代表您复制对象。

   要设置 IAM 角色，请在 **IAM 角色**下执行以下操作之一：
   + 要让 S3 on Outposts 为复制配置创建新的 IAM 角色，请选择**从现有 IAM 角色中选择**，然后选择**创建新角色**。当您保存该规则后，将为 IAM 角色生成一个与您选择的源和目标 Outposts 桶匹配的新策略。建议您选择**创建新角色**。
   + 还可以选择使用现有的 IAM 角色。在这种情况下，您必须选择一个可以授予 S3 on Outposts 必要权限以进行复制的角色。如果此角色没有授予 S3 on Outposts 足够的权限来遵循您的复制规则，则复制将失败。

     要选择现有角色，请选择**从现有 IAM 角色中选择**，然后从下拉菜单中选择角色。您也可以选择**输入 IAM 角色 ARN**，然后输入 IAM 角色的 Amazon 资源名称（ARN）。
**重要**  
当您将复制规则添加到 S3 on Outposts 桶时，您必须具有 `iam:CreateRole` 和 `iam:PassRole` 权限才能创建和传递向 S3 on Outposts 授予复制权限的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》**中的[向用户授予将角色传递给 AWS 服务的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

1. 原定设置情况下，Outposts 桶中的所有对象均加密。有关 S3 on Outposts 加密的更多信息，请参阅[S3 on Outposts 中的数据加密](s3-outposts-data-encryption.md)。只能复制使用具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）进行加密的对象。不支持复制使用具有 AWS Key Management Service（AWS KMS）密钥的服务器端加密（SSE-KMS）或使用客户提供的加密密钥的服务器端加密（SSE-C）进行加密的对象。

1. 根据需要，在设置复制规则配置时启用以下附加选项：
   + 如果要在复制配置中启用 S3 on Outposts 复制指标，请选择**复制指标**。有关更多信息，请参阅 [使用复制指标监控进度](manage-outposts-replication.md#outposts-enabling-replication-metrics)。
   + 如果要在复制配置中启用删除标记复制，请选择 **Delete marker replication (删除标记复制)**。有关更多信息，请参阅 [删除操作对复制操作有何影响](S3OutpostsReplication.md#outposts-replication-delete-op)。
   + 如果要将对副本所做的元数据更改复制回源对象，请选择**副本修改同步**。有关更多信息，请参阅 [在 Outposts 上启用了 Amazon S3 副本修改同步时的复制状态](manage-outposts-replication.md#outposts-replication-status-sync)。

1. 要完成操作，请选择**创建规则**。

当您保存规则之后，您可以编辑、启用、禁用或删除您的规则。要执行这些操作，请转到源 Outposts 桶的**管理**选项卡，向下滚动到**复制规则**部分，选择您的规则，然后选择**编辑规则**。

## 使用 AWS CLI
<a name="outposts-replication-ex1-cli"></a>

要使用 AWS CLI 在源和目标 Outposts 桶由同一 AWS 账户拥有时设置复制，请执行以下操作：
+ 创建源和目标 Outposts 桶。
+ 对这两个桶启用版本控制。
+ 创建向 S3 on Outposts 授予复制对象的权限的 IAM 角色。
+ 将复制配置添加到源 Outposts 桶中。

要验证您的设置，请对其进行测试。

**当源和目标 Outposts 桶由同一个 AWS 账户拥有时设置复制**

1. 为 AWS CLI 设置凭证配置文件。在此示例中，我们使用配置文件名称 `acctA`。有关设置凭证配置文件的信息，请参阅《AWS Command Line Interface 用户指南》**中的[命名配置文件](https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html)。
**重要**  
用于执行此操作的配置文件必须具有必要的权限。例如，在复制配置中，可以指定 S3 on Outposts 可代入的 IAM 服务角色。仅当您所使用的配置文件具有 `iam:CreateRole` 和 `iam:PassRole` 权限时，您才能执行此操作。有关更多信息，请参阅《IAM 用户指南》**中的[向用户授予将角色传递给 AWS 服务的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。如果您使用管理员凭证创建命名配置文件，命名配置文件将具有执行所有任务的必要权限。

1. 创建一个源存储桶，并对其启用版本控制。以下 `create-bucket` 命令在美国东部（弗吉尼亚州北部）（`us-east-1`）区域中创建一个 `SOURCE-OUTPOSTS-BUCKET` 桶。要使用此命令，请将 `user input placeholders` 替换为您自己的信息。

   ```
   aws s3control create-bucket --bucket SOURCE-OUTPOSTS-BUCKET --outpost-id SOURCE-OUTPOST-ID --profile acctA --region us-east-1
   ```

   以下 `put-bucket-versioning` 命令对于 `SOURCE-OUTPOSTS-BUCKET` 桶启用版本控制。要使用此命令，请将 `user input placeholders` 替换为您自己的信息。

   ```
   aws s3control put-bucket-versioning --account-id 123456789012 --bucket arn:aws:s3-outposts:region:123456789012:outpost/SOURCE-OUTPOST-ID/bucket/SOURCE-OUTPOSTS-BUCKET --versioning-configuration Status=Enabled --profile acctA
   ```

1. 创建一个目标存储桶，并对其启用版本控制。以下 `create-bucket` 命令在美国西部（俄勒冈州）（`us-west-2`）区域中创建一个 `DESTINATION-OUTPOSTS-BUCKET` 桶。要使用此命令，请将 `user input placeholders` 替换为您自己的信息。
**注意**  
要在源和目标 Outposts 桶位于同一 AWS 账户中时设置复制配置，请使用同一命名配置文件。此示例使用 `acctA`。要在两个桶由不同 AWS 账户拥有时对复制配置进行测试，您需要为每个桶指定不同的配置文件。

   ```
   aws s3control create-bucket --bucket DESTINATION-OUTPOSTS-BUCKET --create-bucket-configuration LocationConstraint=us-west-2 --outpost-id DESTINATION-OUTPOST-ID --profile acctA --region us-west-2                       
   ```

   以下 `put-bucket-versioning` 命令对于 `DESTINATION-OUTPOSTS-BUCKET` 桶启用版本控制。要使用此命令，请将 `user input placeholders` 替换为您自己的信息。

   ```
   aws s3control put-bucket-versioning --account-id 123456789012 --bucket arn:aws:s3-outposts:region:123456789012:outpost/DESTINATION-OUTPOST-ID/bucket/DESTINATION-OUTPOSTS-BUCKET --versioning-configuration Status=Enabled --profile acctA
   ```

1. 创建 IAM 服务角色。稍后在复制配置中，将此服务角色添加到 `SOURCE-OUTPOSTS-BUCKET` 桶中。S3 on Outposts 代入此角色以代表您复制对象。分两个步骤创建 IAM 角色：

   1. 创建 IAM 角色。

      1. 复制以下信任策略，并将其保存到本地计算机上当前目录中一个名为 `s3-on-outposts-role-trust-policy.json` 的文件。此策略向 S3 on Outposts 服务主体授予代入该服务角色的权限。

------
#### [ JSON ]

****  

         ```
         {
            "Version":"2012-10-17",		 	 	 
            "Statement":[
               {
                  "Effect":"Allow",
                  "Principal":{
                     "Service":"s3-outposts.amazonaws.com"
                  },
                  "Action":"sts:AssumeRole"
               }
            ]
         }
         ```

------

      1. 运行以下命令以创建角色。将 `user input placeholders` 替换为您自己的信息。

         ```
         aws iam create-role --role-name replicationRole --assume-role-policy-document file://s3-on-outposts-role-trust-policy.json --profile acctA
         ```

   1. 将权限策略附加到服务角色。

      1. 复制以下权限策略，并将其保存到本地计算机上当前目录中一个名为 `s3-on-outposts-role-permissions-policy.json` 的文件。此策略授予对各种 S3 on Outposts 桶和对象操作的权限。要使用这一策略，请将 `user input placeholders` 替换为您自己的信息。

------
#### [ JSON ]

****  

         ```
         {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
                 {
                     "Effect": "Allow",
                     "Action": [
                         "s3-outposts:GetObjectVersionForReplication",
                         "s3-outposts:GetObjectVersionTagging"
                     ],
                     "Resource": [
                         "arn:aws:s3-outposts:us-east-1:123456789012:outpost/SOURCE-OUTPOST-ID/bucket/SOURCE-OUTPOSTS-BUCKET/object/*",
                         "arn:aws:s3-outposts:us-east-1:123456789012:outpost/SOURCE-OUTPOST-ID/accesspoint/SOURCE-OUTPOSTS-BUCKET-ACCESS-POINT/object/*"
                     ]
                 },
                 {
                     "Effect": "Allow",
                     "Action": [
                         "s3-outposts:ReplicateObject",
                         "s3-outposts:ReplicateDelete"
                     ],
                     "Resource": [
                         "arn:aws:s3-outposts:us-east-1:123456789012:outpost/DESTINATION-OUTPOST-ID/bucket/DESTINATION-OUTPOSTS-BUCKET/object/*",
                         "arn:aws:s3-outposts:us-east-1:123456789012:outpost/DESTINATION-OUTPOST-ID/accesspoint/DESTINATION-OUTPOSTS-BUCKET-ACCESS-POINT/object/*"
                     ]
                 }
             ]
         }
         ```

------

      1. 运行以下命令以创建策略并将其附加到角色。将 `user input placeholders` 替换为您自己的信息。

         ```
         aws iam put-role-policy --role-name replicationRole --policy-document file://s3-on-outposts-role-permissions-policy.json --policy-name replicationRolePolicy --profile acctA
         ```

1. 将复制配置添加到 `SOURCE-OUTPOSTS-BUCKET` 桶中。

   1. 尽管 S3 on Outposts API 要求复制配置采用 XML 格式，但 AWS CLI 要求您以 JSON 格式指定复制配置。将以下 JSON 保存到计算机上本地目录中一个名为 `replication.json` 文件。要使用此命令，请将 `user input placeholders` 替换为您自己的信息。

      ```
      {
        "Role": "IAM-role-ARN",
        "Rules": [
          {
            "Status": "Enabled",
            "Priority": 1,
            "DeleteMarkerReplication": { "Status": "Disabled" },
            "Filter" : { "Prefix": "Tax"},
            "Destination": {
              "Bucket": 
              "arn:aws:s3-outposts:region:123456789012:outpost/DESTINATION-OUTPOST-ID/accesspoint/DESTINATION-OUTPOSTS-BUCKET-ACCESS-POINT"
            }
          }
        ]
      }
      ```

   1. 运行以下 `put-bucket-replication` 命令以将复制配置添加到源 Outposts 桶中。要使用此命令，请将 `user input placeholders` 替换为您自己的信息。

      ```
      aws s3control put-bucket-replication --account-id 123456789012 --bucket arn:aws:s3-outposts:region:123456789012:outpost/SOURCE-OUTPOST-ID/bucket/SOURCE-OUTPOSTS-BUCKET --replication-configuration file://replication.json --profile acctA
      ```

   1. 要检索复制配置，请使用 `get-bucket-replication` 命令。要使用此命令，请将 `user input placeholders` 替换为您自己的信息。

      ```
      aws s3control get-bucket-replication --account-id 123456789012 --bucket arn:aws:s3-outposts:region:123456789012:outpost/SOURCE-OUTPOST-ID/bucket/SOURCE-OUTPOSTS-BUCKET --profile acctA
      ```

1. 在 Amazon S3 控制台中测试该设置：

   1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

   1. 在 `SOURCE-OUTPOSTS-BUCKET` 存储桶中，创建一个名为 `Tax` 的文件夹。

   1. 将示例对象添加到 `SOURCE-OUTPOSTS-BUCKET` 存储桶中的 `Tax` 文件夹。

   1. 在 `DESTINATION-OUTPOSTS-BUCKET` 存储桶中，确认以下几点：
      + S3 on Outposts 复制了对象。
**注意**  
S3 on Outposts 复制对象所需的时间量取决于对象大小。有关如何查看复制状态的信息，请参阅[获取复制状态信息](manage-outposts-replication.md#outposts-replication-status)。
      + 在对象的**属性**选项卡中，**复制状态**设置为**副本**（将其标识为副本对象）。

# 管理您的复制
<a name="manage-outposts-replication"></a>

本节介绍 S3 on Outposts 上可用的其他复制配置选项、如何确定复制状态以及如何排查复制问题。有关核心复制配置的信息，请参阅[设置复制](outposts-replication-how-setup.md)。

**Topics**
+ [使用复制指标监控进度](#outposts-enabling-replication-metrics)
+ [获取复制状态信息](#outposts-replication-status)
+ [对复制进行问题排查](#outposts-replication-troubleshoot)
+ [将 EventBridge 用于 Outposts 上的 S3 复制](outposts-replication-eventbridge.md)

## 使用复制指标监控进度
<a name="outposts-enabling-replication-metrics"></a>

Outposts 上的 S3 复制为复制配置中的复制规则提供了详细的指标。使用复制指标，您可以通过跟踪待复制的字节数、复制延迟的复制和待处理的操作数，以 5 分钟为间隔监控复制的进度。为了帮助排查任何配置问题，您还可以设置 Amazon EventBridge 来接收有关复制失败的通知。

启用复制指标后，Outposts 上的 S3 复制会将以下指标发布到 Amazon CloudWatch：
+ **待复制的字节数** – 给定复制规则的待复制对象的总字节数。
+ **复制延迟** – 对于给定的复制规则，复制目标桶落后于源桶的最大秒数。
+ **待复制的操作** – 给定复制规则的等待复制的操作的数量。操作包括对象、删除标记和标签。

**注意**  
Outposts 上的 S3 复制指标的费率与 CloudWatch 自定义指标费率相同。有关更多信息，请参阅 [CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

## 获取复制状态信息
<a name="outposts-replication-status"></a>

复制状态可以帮助您确定 Amazon S3 on Outposts 正在复制的对象的当前状态。源对象的复制状态将返回 `PENDING`、`COMPLETED`、或 `FAILED`。副本的复制状态将返回 `REPLICA`。

### 复制状态概述
<a name="outposts-replication-status-overview"></a>

在复制场景中，您有一个源桶（对它配置复制）和一个目标桶（S3 on Outposts 将对象复制到其中）。当您请求这些桶中的对象（使用 `GetObject`）或对象元数据（使用 `HeadObject`）时，S3 on Outposts 将在响应中返回 `x-amz-replication-status` 标头，如下所示：
+ 如果请求源桶中的对象，S3 on Outposts 将返回 `x-amz-replication-status` 标头（如果请求中的对象符合复制条件）。

  例如，假设您在复制配置中指定了对象前缀 `TaxDocs`，以指示 S3 on Outposts 仅复制键名称前缀为 `TaxDocs` 的对象。您上传的具有此键名前缀的任何对象（例如 `TaxDocs/document1.pdf`）都将复制。对于具有此键名称前缀的对象请求，S3 on Outposts 会返回其对象复制状态为以下值之一的 `x-amz-replication-status` 标头：`PENDING`、`COMPLETED` 或 `FAILED`。
**注意**  
如果在上传对象后对象复制失败，您无法重试复制。您必须重新上传对象。由于缺少复制角色权限或缺少桶权限等问题，对象将转换为 `FAILED` 状态。对于临时故障（例如，如果桶或 Outpost 不可用），复制状态不会转换为 `FAILED`，而是保持 `PENDING`。在资源恢复联机后，S3 on Outposts 将恢复复制这些对象。
+ 当请求目标桶中的对象时，如果请求中的对象是 S3 on Outposts 创建的副本，S3 on Outposts 会返回值为 `REPLICA` 的 `x-amz-replication-status` 标头。

**注意**  
在从启用了复制的源存储桶中删除对象之前，请检查该对象的复制状态，以确保已复制了该对象。

### 在 Outposts 上启用了 Amazon S3 副本修改同步时的复制状态
<a name="outposts-replication-status-sync"></a>

当您的复制规则启用了 S3 on Outposts 副本修改同步时，副本可能报告 `REPLICA` 以外的状态。如果元数据更改正在复制过程中，副本的 `x-amz-replication-status` 标头将返回 `PENDING`。如果副本修改同步无法复制元数据，副本的标头将返回 `FAILED`。如果正确复制元数据，则副本的标头将返回值 `REPLICA`。

## 对复制进行问题排查
<a name="outposts-replication-troubleshoot"></a>

如果在您配置复制之后，对象副本未出现在目标 Amazon S3 on Outposts 桶中，请使用以下问题排查提示确定并修复问题。
+ S3 on Outposts 复制对象所需的时间取决于多个因素，包括源和目标 Outposts 之间的距离，以及对象的大小。

  您可以检查源对象的复制状态。如果对象的复制状态为 `PENDING`，表示 S3 on Outpost 尚未完成复制。如果对象的复制状态为 `FAILED`，则应检查对源桶设置的复制配置。
+ 在源桶上的复制配置中，验证以下几点：
  + 目标桶的接入点 Amazon 资源名称（ARN）是正确的。
  + 键名前缀是否正确。例如，如果将配置设置为复制具有前缀 `Tax` 的对象，则仅复制具有 `Tax/document1` 或 `Tax/document2` 等键名的对象。不会复制具有键名 `document3` 的对象。
  + 状态是否为 `Enabled`。
+ 验证没有在任何一个桶上暂停版本控制。源桶和目标桶必须均已启用版本控制。
+ 如果目标桶由另一个 AWS 账户拥有，请验证桶拥有者是否对目标桶设置了允许源桶拥有者复制对象的桶策略。有关示例，请参阅[在源和目标 Outposts 桶由不同的 AWS 账户拥有时授予权限](outposts-replication-prerequisites-config.md#outposts-rep-prethree)。
+ 如果对象副本未出现在目标桶中，以下问题可能会阻止复制：
  + 如果源桶中的某对象是另一个复制配置所创建的副本，S3 on Outposts 不会复制该对象。例如，如果您设置从桶 A 到桶 B 再到桶 C 的复制配置，则 S3 on Outposts 不会将桶 B 中的对象副本复制到桶 C。

    如果您想将桶 A 中的对象复制到桶 B 和桶 C，请在不同的复制规则中为源桶复制配置设置多个桶目标。例如，在源桶 A 上创建两条复制规则，其中一条规则旨在复制到目标桶 B，另一条规则旨在复制到目标桶 C。
  + 源桶拥有者可以向其他 AWS 账户授予上载对象的权限。默认情况下，源桶拥有者对于其他账户创建的对象没有权限。复制配置仅复制源桶拥有者对其具有访问权限的对象。为避免复制问题，源桶拥有者可以向其他 AWS 账户授予有条件地创建对象的权限，从而要求针对这些对象的显式访问权限。
+ 假设在复制配置中，您添加了一个规则以复制具有特定标签的对象子集。在这种情况下，您必须在创建对象时分配特定的标签键和值，以便 S3 on Outposts 复制对象。如果您先创建对象，然后向该现有对象添加标签，S3 on Outposts 将不会复制对象。
+ 如果桶策略拒绝针对以下任一操作访问复制角色，则复制将失败：

  源桶：

  ```
  1. "s3-outposts:GetObjectVersionForReplication",
  2. "s3-outposts:GetObjectVersionTagging"
  ```

  目标桶：

  ```
  1. "s3-outposts:ReplicateObject",
  2. "s3-outposts:ReplicateDelete",
  3. "s3-outposts:ReplicateTags"
  ```
+ 当对象无法复制到其目标 Outposts 时，Amazon EventBridge 可以通知您。有关更多信息，请参阅 [将 EventBridge 用于 Outposts 上的 S3 复制](outposts-replication-eventbridge.md)。

# 将 EventBridge 用于 Outposts 上的 S3 复制
<a name="outposts-replication-eventbridge"></a>

Amazon S3 on Outposts 已与 Amazon EventBridge 集成，并使用 `s3-outposts` 命名空间。EventBridge 是一种无服务器事件总线服务，您可以使用它将应用程序与来自各种来源的数据相连接。有关更多信息，请参阅 *Amazon EventBridge 用户指南*中的[什么是 Amazon EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)。

为了帮助解决任何复制配置问题，您可以设置 Amazon EventBridge 来接收有关复制失败事件的通知。在对象未复制到其目标 Outposts 的情况下，EventBridge 可以通知您。有关正在复制的对象的当前状态的更多信息，请参阅[复制状态概述](manage-outposts-replication.md#outposts-replication-status-overview)。

每当 Outposts 桶中发生某些事件时，S3 on Outposts 都可以将事件发送到 EventBridge。与其他目标不同，您无需选择要提供的事件类型。还可以使用 EventBridge 规则将事件路由到其他目标。启用 EventBridge 后，S3 on Outposts 会将以下所有事件发送到 EventBridge。


| Event type | 说明  | 命名空间 | 
| --- | --- | --- | 
|  `OperationFailedReplication`  |  复制规则内的对象复制已失败。有关 Outposts 上的 S3 复制失败原因的更多信息，请参阅[使用 EventBridge 查看 Outposts 上的 S3 复制失败原因](#outposts-replication-failure-codes)。  |  `s3-outposts`  | 

## 使用 EventBridge 查看 Outposts 上的 S3 复制失败原因
<a name="outposts-replication-failure-codes"></a>

下表列出了 Outposts 上的 S3 复制失败原因。您可以将 EventBridge 规则配置为通过 Amazon Simple Queue Service（Amazon SQS）、Amazon Simple Notification Service（Amazon SNS）、AWS Lambda 或 Amazon CloudWatch Logs 发布和查看失败原因。有关将这些资源用于 EventBridge 所需权限的更多信息，请参阅[将基于资源的策略用于 EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html)。


| 复制失败原因 | 说明 | 
| --- | --- | 
| AssumeRoleNotPermitted | S3 on Outposts 无法代入在复制配置中指定的 AWS Identity and Access Management（IAM）角色。 | 
| DstBucketNotFound | S3 on Outposts 找不到在复制配置中指定的目标桶。 | 
| DstBucketUnversioned | 未在 Outposts 目标桶上启用版本控制。要使用 Outposts 上的 S3 复制来复制对象，必须在目标桶上启用版本控制。 | 
| DstDelObjNotPermitted | S3 on Outposts 无法将删除操作复制到目标桶。针对目标桶的 s3-outposts:ReplicateDelete 权限可能缺失。 | 
| DstMultipartCompleteNotPermitted | S3 on Outposts 无法在目标桶中完成对象的分段上传。针对目标桶的 s3-outposts:ReplicateObject 权限可能缺失。 | 
| DstMultipartInitNotPermitted | S3 on Outposts 无法启动将对象分段上传到目标桶。针对目标桶的 s3-outposts:ReplicateObject 权限可能缺失。 | 
| DstMultipartPartUploadNotPermitted | S3 on Outposts 无法在目标存储桶中上传分段上传对象。针对目标桶的 s3-outposts:ReplicateObject 权限可能缺失。 | 
| DstOutOfCapacity | 因为目标 Outpost 的 S3 存储容量不足，所以 S3 on Outposts 无法复制到此 Outpost。 | 
| DstPutObjNotPermitted | S3 on Outposts 无法将对象复制到目标桶。针对目标桶的 s3-outposts:ReplicateObject 权限可能缺失。 | 
| DstPutTaggingNotPermitted | S3 on Outposts 无法将对象标签复制到目标桶。针对目标桶的 s3-outposts:ReplicateObject 权限可能缺失。 | 
| DstVersionNotFound | S3 on Outposts 无法在目标桶中找到所需的对象版本，从而无法复制该对象版本的元数据。 | 
| SrcBucketReplicationConfigMissing | S3 on Outposts 找不到与源 Outposts 桶关联的接入点的复制配置。 | 
| SrcGetObjNotPermitted | S3 on Outposts 无法访问源桶中的对象来进行复制。针对源桶的 s3-outposts:GetObjectVersionForReplication 权限可能缺失。 | 
| SrcGetTaggingNotPermitted | S3 on Outposts 无法访问源桶中的对象标签信息。针对源桶的 s3-outposts:GetObjectVersionTagging 权限可能缺失。 | 
| SrcHeadObjectNotPermitted | S3 on Outposts 无法从源桶检索对象元数据。针对源桶的 s3-outposts:GetObjectVersionForReplication 权限可能缺失。 | 
| SrcObjectNotEligible | 对象不符合复制条件。对象或其对象标签与复制配置不匹配。 | 

有关排查复制问题的更多信息，请参阅以下主题：
+ [创建 IAM 角色](outposts-replication-prerequisites-config.md#outposts-rep-pretwo)
+ [对复制进行问题排查](manage-outposts-replication.md#outposts-replication-troubleshoot)

## 使用 CloudWatch 监控 EventBridge
<a name="outposts-replication-eventbridge-cw"></a>

为进行监控，Amazon EventBridge 与 Amazon CloudWatch 相集成。EventBridge 会自动每分钟向 CloudWatch 发送指标。这些指标包括[规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)匹配的[事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)数以及规则调用[目标](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-targets.html)的次数。当规则在 EventBridge 中运行时，将调用与该规则关联的所有目标。您可以按照以下方式通过 CloudWatch 监控 EventBridge 行为。
+ 您可以从 CloudWatch 控制面板监控 EventBridge 规则的可用 [EventBridge 指标](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-monitoring.html#eb-metrics)。然后，您可以使用 CloudWatch 功能（例如 CloudWatch 告警）对某些指标设置告警。如果这些指标达到您在告警中指定的自定义阈值，您将收到通知并可以相应地采取措施。
+ 可以将 Amazon CloudWatch Logs 设置为 EventBridge 规则的目标。然后，EventBridge 创建日志流，而 CloudWatch Logs 将事件中的文本存储为日志条目。有关更多信息，请参阅 [EventBridge 和 CloudWatch Logs](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html#eb-cloudwatchlogs-permissions)。

有关调试 EventBridge 事件交付和存档事件的更多信息，请参阅以下主题：
+ [事件重试策略和使用死信队列](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rule-dlq.html)
+ [存档 EventBridge 事件](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-archive-event.html)