

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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>

Recovery Time Objective(RTO)는 장애 발생 후 보조 리전에서 이벤트 수신을 시작하는 데 걸리는 시간입니다. RTO의 경우 시간에는 CloudWatch 경보를 트리거하고 Route 53 상태 확인의 상태를 업데이트하는 기간이 포함됩니다. Recovery Point Objective(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)
+ 글로벌 엔드포인트를 생성한 후에는 사용하는 모든 `PutEvents` 호출에 `endpointId` 및 `EventBusName`을 추가해야 합니다.
+ 글로벌 엔드포인트는 서명 버전 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)에서 임시 자격 증명을 요청하는 경우는 기본적으로 SigV4A를 지원하지 않는 자격 증명을 AWS STS 제공합니다. 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [AWS STSAWS 리전에서 관리를](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 상태 확인**의 경우 엔드포인트에서 모니터링할 상태 확인을 선택합니다. 상태 확인이 아직 없는 경우 **새 상태 확인을** 선택하여 CloudFormation 콘솔을 열고 CloudFormation 템플릿을 사용하여 상태 확인을 생성합니다.
**참고**  
데이터가 누락되면 상태 확인에 실패합니다. 이벤트를 간헐적으로만 전송해야 하는 경우 더 긴 **MinimumEvaluationPeriod**를 사용하거나 누락된 데이터를 '위반' 대신 '누락'으로 처리하는 것이 좋습니다.

1. (선택 사항) **이벤트 복제**의 경우 다음을 수행합니다.

   1. **이벤트 복제 활성화됨**을 선택합니다.

   1. **실행 역할**에서 새 AWS Identity and Access Management 역할을 생성할지 기존 역할을 사용할지 선택합니다. 해결 방법:
      + **이 특정 리소스에 대해 새 역할 생성**을 선택합니다. 선택적으로 **역할 이름**을 업데이트하여 새 역할을 생성할 수 있습니다.
      + **기존 역할 사용**을 선택합니다. 그런 다음, **실행 역할**에서 사용할 역할을 선택합니다.

1. **생성(Create)**을 선택합니다.

## 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** 필드에 대해 초당 처리량을 고려합니다. 이벤트를 간헐적으로만 전송하는 경우 평가 기간을 늘리거나 누락된 데이터를 `breaching` 대신 `missing`으로 처리하도록 상태 확인을 변경하는 것이 좋습니다.

템플릿의 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** 필드에 대해 초당 처리량을 고려합니다. 이벤트를 간헐적으로만 전송하는 경우 평가 기간을 늘리거나 누락된 데이터를 `breaching` 대신 `missing`으로 처리하도록 상태 확인을 변경하는 것이 좋습니다.

템플릿의 Route 53 상태 확인 섹션에는 다음과 같은 속성이 사용됩니다.


| 지표 | 설명 | 
| --- | --- | 
|  `HealthCheckName`  |  상태 확인의 이름입니다. 기본값: **LatencyFailuresHealthCheck**  | 
|  `InsufficientDataHealthStatus`  |  CloudWatch가 경보 상태를 확인하기에 지표 데이터가 부족한 경우, Amazon Route 53이 상태 확인에 할당할 상태입니다. 유효한 값: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/eventbridge/latest/userguide/eb-ge-cfn.html) 기본값: 비정상 이 필드는 `TreatMissingData` 필드 입력에 따라 업데이트됩니다. `TreatingMissingData`를 `Missing`으로 설정하면 `LastKnownStatus`로 업데이트됩니다. `TreatingMissingData`를 `Breaching`으로 설정하면 `Unhealthy`로 업데이트됩니다.  | 