

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用全局端点使应用程序具有区域容错能力 EventBridge
<a name="eb-global-endpoints"></a>

您可以使用 Amazon EventBridge 全球终端节点提高应用程序的可用性。全局端点使您的应用程序具有区域容错能力，且无需支付额外费用。首先，您需要向端点分配 Amazon Route 53 运行状况检查。启动失效转移后，运行状况检查会报告“运行不正常”状态。在失效转移启动后的几分钟内，所有自定义[事件](eb-events.md)都将路由到辅助区域中的[事件总线](eb-event-bus.md)，并由该事件总线进行处理。一旦运行状况检查报告“正常”状态，事件将由主区域中的事件总线处理。

使用全局端点时，可以启用[事件复制](#eb-ge-event-replication)。事件复制使用托管规则将所有自定义事件发送到主区域和辅助区域中的事件总线。

**注意**  
如果您使用的是自定义总线，则需要在每个区域的相同账户中，使用名称相同的自定义总线，这样失效转移才能正常运行。

## 恢复时间和恢复点目标
<a name="eb-ge-rpo-rto"></a>

恢复时间目标 (RTO) 是在故障后辅助区域开始接收事件所花费的时间。对于 RTO，该时间包括触发 CloudWatch 警报和更新 Route 53 运行状况检查状态的时间段。恢复点目标 (RPO) 可衡量故障期间未处理的数据。对于 RPO，该时间包括未复制到辅助区域，且在服务或区域恢复之前停留在主区域的事件。使用全局端点，如果您遵循我们的警报配置规范性指南，则可以预计 RTO 和 RPO 为 360 秒，最长为 420 秒。

## 事件复制
<a name="eb-ge-event-replication"></a>

辅助区域中的事件以异步方式处理。这意味着不能保证两个区域中的事件会同时处理。触发失效转移后，事件由辅助区域处理，并在主区域可用时由主区域处理。启用事件复制会增加您的月度费用。有关更多信息，请参阅 [Amazon EventBridge 定价](https://aws.amazon.com/eventbridge/pricing)

我们建议在设置全局端点时启用事件复制，原因如下：
+ 事件复制可帮助您验证全局端点配置是否正确。这有助于确保在失效转移时为您提供保障。
+ 要自动从失效转移事件中恢复，需要事件复制。如果您未启用事件复制，则必须手动将 Route 53 运行状况检查重置为“正常”，然后事件才会返回主区域。

### 复制的事件负载
<a name="eb-ge-event-replication-ep"></a>

以下是复制的事件负载示例：

**注意**  
对于 `region`，列出了复制事件的源区域。

```
{
    "version": "0",
    "id": "a908baa3-65e5-ab77-367e-527c0e71bbc2",
    "detail-type": "Test",
    "source": "test.service.com",
    "account": "0123456789",
    "time": "1900-01-01T00:00:00Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:events:us-east-1:0123456789:endpoint/MyEndpoint"
    ],
    "detail": {
        "a": "b"
    }
}
```

## 使用 AWS SDK 使用全局端点
<a name="eb-ge-sdk-update"></a>

**注意**  
即将推出对 C\$1\$1 的支持。

使用 S AWS DK 处理全局端点时，请记住以下几点：
+ 您需要为特定 SDK 安装 AWS 通用运行时 (CRT) 库。如果没有安装 CRT，会收到一条异常消息，指示需要安装的内容。有关更多信息，请参阅下列内容：
  + [AWS 通用运行时 (CRT) 库](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html)
  + [awslabs/ aws-crt-java](https://github.com/awslabs/aws-crt-java)
  + [awslabs/ aws-crt-nodejs](https://github.com/awslabs/aws-crt-nodejs)
  + [awslabs/ aws-crt-python](https://github.com/awslabs/aws-crt-python)
+ 创建全局端点后，您需要将 `endpointId` 和 `EventBusName` 添加到您使用的任何 `PutEvents` 调用中。
+ 全局端点支持签名版本 4A。此版本的 SigV4 允许对多个 AWS 区域签署请求。这对于可能导致从多个区域之一访问数据的 API 操作非常有用。使用 AWS SDK 时，您需要提供凭据，向全局终端节点发出的请求将使用签名版本 4A，无需额外配置。有关 SigV4A 的更多信息，请参阅 *AWS 一般参考*中的[签署 AWS API 请求](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html )。

  如果您从全局 AWS STS 终端节点 (sts.amazonaws.com) 请求临时证书，则会 AWS STS 出售默认情况下不支持 Sigv4A 的证书。有关更多信息 [AWS STS ，请参阅《*AWS Identity and Access Management 用户指南*》中的 “在 AWS 区域中管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)”。

## 可用区
<a name="eb-ge-avail-regions"></a>

以下区域支持全局端点。
+ 美国东部（弗吉尼亚州北部）
+ 美国东部（俄亥俄州）
+ 美国西部（北加利福尼亚）
+ 美国西部（俄勒冈州）
+ 加拿大（中部）
+ 欧洲地区（法兰克福）
+ 欧洲地区（爱尔兰）
+ 欧洲地区（伦敦）
+ 欧洲地区（米兰）
+ 欧洲地区（巴黎）
+ 欧洲地区（斯德哥尔摩）
+ 亚太地区（孟买）
+ 亚太地区（大阪）
+ 亚太地区（首尔）
+ 亚太地区（新加坡）
+ 亚太地区（悉尼）
+ 亚太地区（东京）
+ 南美洲（圣保罗）

# 在 Amazon 中创建全球终端节点 EventBridge
<a name="eb-ge-create-endpoint"></a>

完成以下步骤，设置全局端点：

1. 确保在主区域和辅助区域中有匹配的事件总线和规则。

1. 创建 [Route 53 运行状况检查](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-creating.html)，监控您的事件总线。要在创建运行状况检查时获得帮助，请在创建全局端点时选择**新建运行状况检查**。

1. 创建您的全局端点。

设置 Route 53 运行状况检查后，即可创建全局端点。

## 使用控制台创建全局端点
<a name="eb-ge-create-endpoint-console"></a>

1. 打开 Amazon EventBridge 控制台，网址为[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)。

1. 在导航窗格中，选择**全局端点**。

1. 选择**创建端点**。

1. 输入端点的名称和说明。

1. 对于**主区域中的事件总线**，请选择要与端点关联的事件总线。

1. 对于**辅助区域**，请选择失效转移时要将事件转到的区域。
**注意**  
**辅助区域中的事件总线**会自动填充且不可编辑。

1. 对于**触发失效转移和恢复的 Route 53 运行状况检查**，请选择端点将监控的运行状况检查。如果您还没有运行状况检查，请选择 **New Health ch** eck 打开 CloudFormation 控制台并使用 CloudFormation 模板创建运行状况检查。
**注意**  
缺少数据将导致运行状况检查失败。如果您只需要间歇性地发送事件，可以考虑使用更长的时间 **MinimumEvaluationPeriod**，或者将丢失的数据视为 “丢失” 而不是 “漏洞”。

1. （可选）对于**事件复制**，请执行以下操作：

   1. 选择**事件复制已启用**。

   1. 对于**执行角色**，选择创建新的 AWS Identity and Access Management 角色或使用现有角色。执行以下操作：
      + 选择 **Create a new role for this specific resource**。您也可以更新**角色名称**，创建新角色。
      + 选择**使用现有角色**。然后，**执行角色**选择要使用的所需角色。

1. 选择**创建**。

## 使用 API 创建全局端点
<a name="eb-ge-create-endpoint-api"></a>

要使用 EventBridge API 创建全局终端节点，请参阅 Amazon EventBridge API 参考[CreateEndpoint](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_CreateEndpoint.html)中的。

## 使用创建全局终端节点 CloudFormation
<a name="eb-ge-create-endpoint-cfn"></a>

要使用 AWS CloudFormation API 创建全局终端节点，请参阅 AWS CloudFormation 用户指南[AWS::Events::Endpoints](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-endpoint.html)中的。

# 适用于 Amazon EventBridge 全局端点的最佳实践
<a name="eb-ge-best-practices"></a>

在设置全局端点时，建议采用以下最佳实践。

## 启用事件复制
<a name="eb-ge-bp-enable-replication"></a>

我们强烈建议您在分配给全局端点的辅助区域启用复制，并处理事件。这样可以确保辅助区域中的应用程序配置正确。您还应启用复制，以确保出现的问题得到缓解后自动恢复到主区域。

事件 ID 可能会随着 API 调用而变化，因此跨区域关联事件需要有一个不可变的唯一标识符。在进行与使用者有关的设计时，还应考虑到幂等性。这样一来，如果您要复制事件或从存档中重放事件，在两个区域中处理事件就不会产生任何副作用。

## 防止事件节流
<a name="eb-ge-bp-throttling"></a>

为防止事件被节流，我们建议您更新 `PutEvents` 和目标限制，使其在各区域保持一致。

## 在 Amazon Route 53 运行状况检查中使用订阅用户指标
<a name="eb-ge-bp-sub-metrics"></a>

请避免在 Amazon Route 53 运行状况检查中包含订阅用户指标。如果某订阅用户遇到问题，但主区域中所有其他订阅用户都运行正常，包含这些指标可能会导致发布者失效转移到辅助区域。如果您的一个订阅用户未能处理主区域中的事件，则应启用复制，以确保辅助区域的订阅用户能够成功处理事件。

# 为 EventBridge 全局端点设置 Route 53 运行状况检查
<a name="eb-ge-cfn"></a>

使用全局端点时，必须进行 Route 53 运行状况检查，以监控各区域的状态。以下模板定义了一条 [Amazon CloudWatch 警报](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html)，并用它来定义 [Route 53 运行状况检查](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-route53-healthcheck.html)。

**Topics**
+ [用于定义 Route 53 运行状况检查的 CloudFormation 模板](#eb-ge-cfn-template)
+ [CloudWatch 警报模板属性](#eb-ge-cfn-cw-alarm-definitions)
+ [Route 53 运行状况检查模板属性](#eb-ge-cfn-health-check-definitions)

## 用于定义 Route 53 运行状况检查的 CloudFormation 模板
<a name="eb-ge-cfn-template"></a>

使用以下模板定义您的 Route 53 运行状况检查。

```
Description: |-
  Global endpoints health check that will fail when the average Amazon EventBridge 
  latency is above 30 seconds for a duration of 5 minutes. Note, missing data will 
  cause the health check to fail, so if you only send events intermittently, consider 
  changing the heath check to use a longer evaluation period or instead treat missing 
  data as 'missing' instead of 'breaching'.

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups: 
      - Label: 
          default: "Global endpoint health check alarm configuration"
        Parameters:
          - HealthCheckName
          - HighLatencyAlarmPeriod
          - MinimumEvaluationPeriod
          - MinimumThreshold
          - TreatMissingDataAs
    ParameterLabels:
      HealthCheckName:
        default: Health check name
      HighLatencyAlarmPeriod:
        default: High latency alarm period
      MinimumEvaluationPeriod:
        default: Minimum evaluation period
      MinimumThreshold:
        default: Minimum threshold
      TreatMissingDataAs:
        default: Treat missing data as

Parameters:
  HealthCheckName:
    Description: Name of the health check
    Type: String
    Default: LatencyFailuresHealthCheck
  HighLatencyAlarmPeriod:
    Description: The period, in seconds, over which the statistic is applied. Valid values are 10, 30, 60, and any multiple of 60.
    MinValue: 10
    Type: Number
    Default: 60
  MinimumEvaluationPeriod:
    Description: The number of periods over which data is compared to the specified threshold. You must have at least one evaluation period.
    MinValue: 1
    Type: Number
    Default: 5
  MinimumThreshold:
    Description: The value to compare with the specified statistic.
    Type: Number
    Default: 30000
  TreatMissingDataAs:
    Description: Sets how this alarm is to handle missing data points.
    Type: String
    AllowedValues:
      - breaching
      - notBreaching
      - ignore
      - missing
    Default: breaching  

Mappings:
  "InsufficientDataMap":
    "missing":
      "HCConfig": "LastKnownStatus"
    "breaching":
      "HCConfig": "Unhealthy"  

Resources:
  HighLatencyAlarm:
      Type: AWS::CloudWatch::Alarm
      Properties:
        AlarmDescription: High Latency in Amazon EventBridge
        MetricName: IngestionToInvocationStartLatency
        Namespace: AWS/Events
        Statistic: Average
        Period: !Ref HighLatencyAlarmPeriod
        EvaluationPeriods: !Ref MinimumEvaluationPeriod
        Threshold: !Ref MinimumThreshold
        ComparisonOperator: GreaterThanThreshold
        TreatMissingData: !Ref TreatMissingDataAs

  LatencyHealthCheck:
      Type: AWS::Route53::HealthCheck
      Properties:
        HealthCheckTags:
          - Key: Name
            Value: !Ref HealthCheckName
        HealthCheckConfig:
          Type: CLOUDWATCH_METRIC
          AlarmIdentifier:
            Name:
              Ref: HighLatencyAlarm
            Region: !Ref AWS::Region
          InsufficientDataHealthStatus: !FindInMap [InsufficientDataMap, !Ref TreatMissingDataAs, HCConfig]

Outputs:
  HealthCheckId:
    Description: The identifier that Amazon Route 53 assigned to the health check when you created it.
    Value: !GetAtt LatencyHealthCheck.HealthCheckId
```

事件 ID 可能会随着 API 调用而变化，因此跨区域关联事件需要有一个不可变的唯一标识符。在进行与使用者有关的设计时，还应考虑到幂等性。这样一来，如果您要复制事件或从存档中重放事件，在两个区域中处理事件就不会产生任何副作用。

## CloudWatch 警报模板属性
<a name="eb-ge-cfn-cw-alarm-definitions"></a>

**注意**  
对于所有 **editable** 字段，请考虑您的每秒吞吐量。如果您只是间歇性地发送事件，请考虑将运行状况检查更改为使用更长的评估期，或者将缺失的数据视为 `missing`，而不是 `breaching`。

模板的 CloudWatch 警报部分使用了以下属性：


| 指标 | 描述 | 
| --- | --- | 
|  `AlarmDescription`  |  警报的描述。 默认值：**High Latency in Amazon EventBridge**  | 
|  `MetricName`  |  与警报关联的指标的名称。这是基于指标的警报所必需的。对于基于数学表达式的警报，您应改为使用 `Metrics`，并且无法指定 `MetricName`。 默认：IngestionToInvocationStartLatency  | 
|  `Namespace`  |  与警报关联的指标的命名空间。这是基于指标的警报所必需的。对于基于数学表达式的警报，您无法指定 `Namespace`，而应改为使用 `Metrics`。 默认值：`AWS/Events`  | 
|  `Statistic`  |  与警报关联的指标的统计数据，而不是百分位数。 默认：平均值  | 
|  `Period`  |  以秒为单位的周期，每经过该时长，即应用统计数据。这是基于指标的警报所必需的。有效值为 10、30、60，以及 60 的任何倍数。 默认值：**60**  | 
|  `EvaluationPeriods`  |  其间的数据将与指定阈值进行比较的期间数。如果您设置的警报需要连续超出多个数据点才能触发警报，则此值将指定该数字。如果要设置“N 个中的 M 个”警报，则此值为 N，`DatapointsToAlarm` 为 M。 默认值：**5**  | 
|  `Threshold`  |  要与指定的统计数据进行比较的值。 默认值：**30,000**  | 
|  `ComparisonOperator`  |  将指定统计数据与阈值进行比较时使用的算术运算。指定的统计值将用作第一个操作数。 默认值：`GreaterThanThreshold`  | 
|  `TreatMissingData`  |  设置该警报应如何处理缺失数据点。 有效值：`breaching`、`notBreaching`、`ignore` 和 `missing` 默认值：`breaching`  | 

## Route 53 运行状况检查模板属性
<a name="eb-ge-cfn-health-check-definitions"></a>

**注意**  
对于所有 **editable** 字段，请考虑您的每秒吞吐量。如果您只是间歇性地发送事件，请考虑将运行状况检查更改为使用更长的评估期，或者将缺失的数据视为 `missing`，而不是 `breaching`。

模板的 Route 53 运行状况检查部分使用了以下属性：


| 指标 | 描述 | 
| --- | --- | 
|  `HealthCheckName`  |  运行状况检查的名称。 默认值：**LatencyFailuresHealthCheck**  | 
|  `InsufficientDataHealthStatus`  |  当 CloudWatch 没有充足的指标数据来确定警报状态时，您希望 Amazon Route 53 分配给运行状况检查的状态。 有效值： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/eventbridge/latest/userguide/eb-ge-cfn.html) 默认：运行不正常 此字段将根据 `TreatMissingData` 字段的输入进行更新。如果`TreatingMissingData` 设置为 `Missing`，它将更新为 `LastKnownStatus`。如果 `TreatingMissingData` 设置为 `Breaching`，则更新为 `Unhealthy`。  | 