

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 讓應用程式對 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 支援。

使用 AWS SDK 搭配全域端點時，請記住下列事項：
+ 您需要為特定 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 時，您會提供登入資料，而全域端點的請求將使用 Signature 第 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 Identity and Access Management 《 使用者指南*》中的[AWS STS 在 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. 造訪 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 開啟 Amazon EventBridge 主控台。

1. 在導覽窗格中，選擇**全球端點**。

1. 選擇**建立端點**。

1. 輸入端點的名稱和描述。

1. 針對**主要區域中的事件匯流排**，請選擇您想要與端點相關聯的事件匯流排。

1. 針對**次要區域**，請選擇發生容錯移轉時要將事件引導至的區域。
**注意**  
**次要區域中的事件匯流排**會自動填入且無法編輯。

1. 針對 **Route 53 運作狀態檢查以進行觸發容錯移轉和復原**，請選擇端點將監控的健全狀況檢查。如果您還沒有運作狀態檢查，請選擇**新運作狀態檢查**以開啟 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**
+ [CloudFormation 用於定義 Route 53 運作狀態檢查的 範本](#eb-ge-cfn-template)
+ [CloudWatch 警示範本屬性](#eb-ge-cfn-cw-alarm-definitions)
+ [路由 53 運作狀態檢查範本屬性](#eb-ge-cfn-health-check-definitions)

## CloudFormation 用於定義 Route 53 運作狀態檢查的 範本
<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`  | 

## 路由 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_tw/eventbridge/latest/userguide/eb-ge-cfn.html) 預設值：狀態不良 此欄位會根據對 `TreatMissingData` 欄位的輸入進行更新。如果設定 `TreatingMissingData` 為 `Missing`，則會將其更新為 `LastKnownStatus`。如果 `TreatingMissingData` 設定為 `Breaching`，則會將其更新為 `Unhealthy`。  | 