

# API Gateway API에 DNS 장애 조치에 대한 사용자 지정 상태 확인 구성
<a name="dns-failover"></a>

Amazon Route 53 상태 확인을 사용하여 기본 AWS 리전의 API Gateway API에서 보조 리전에 있는 API Gateway API로의 DNS 장애 조치를 제어할 수 있습니다. 이는 리전 문제 발생 시 영향을 완화하는 데 도움이 될 수 있습니다. 사용자 지정 도메인을 사용하는 경우 클라이언트가 API 엔드포인트를 변경하지 않고도 장애 조치를 수행할 수 있습니다.

별칭 레코드로 [Evaluate Target Health](https://docs.aws.amazon.com/Route53/latest/APIReference/API_AliasTarget.html#Route53-Type-AliasTarget-EvaluateTargetHealth>Evaluate Target Health)(대상 상태 평가)를 선택하면 해당 레코드는 해당 리전에서 API Gateway 서비스를 사용할 수 없는 경우에만 실패합니다. 경우에 따라 자체 API Gateway API가 그 이전에 중단될 수 있습니다. DNS 장애 조치를 직접 제어하려면 API Gateway API에 대한 사용자 지정 Route 53 상태 확인을 구성하세요. 이 예시에서는 운영자가 DNS 장애 조치를 제어하는 데 도움이 되는 CloudWatch 경보를 사용합니다. 장애 조치 구성을 위한 더 많은 예제 및 기타 고려 사항은 [Route 53을 사용한 재해 복구 메커니즘 생성](https://aws.amazon.com/blogs/networking-and-content-delivery/creating-disaster-recovery-mechanisms-using-amazon-route-53/)과 [AWS Lambda 및 CloudWatch를 사용하여 VPC의 프라이빗 리소스에 대한 Route 53 상태 확인 수행](https://aws.amazon.com/blogs/networking-and-content-delivery/performing-route-53-health-checks-on-private-resources-in-a-vpc-with-aws-lambda-and-amazon-cloudwatch/)을 참조하세요.

**Topics**
+ [사전 조건](#dns-failover-prereqs)
+ [1단계: 리소스 설정](#dns-failover-intial-setup)
+ [2단계: 보조 리전으로의 장애 조치 시작](#dns-failover-initiate)
+ [3단계: 장애 조치 테스트](#dns-failover-test)
+ [4단계: 기본 리전으로 돌아가기](#dns-failover-return)
+ [다음 단계: 사용자 지정 및 정기적인 테스트](#dns-failover-next-steps)

## 사전 조건
<a name="dns-failover-prereqs"></a>

이 절차를 완료하려면 다음 리소스를 만들고 구성해야 합니다.
+ 자신이 소유한 웹 도메인
+ 두 AWS 리전에 있는 해당 도메인 이름에 대한 ACM 인증서. 자세한 내용은 [사용자 지정 도메인 이름에 대한 사전 조건](how-to-custom-domains.md#how-to-custom-domains-prerequisites) 섹션을 참조하세요.
+ 도메인 이름을 위한 Route 53 호스팅 영역. 자세한 내용은 Amazon Route 53 개발자 안내서의 [호스팅 영역 작업](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) 섹션을 참조하세요.

도메인 이름에 대한 Route 53 장애 조치 DNS 레코드를 생성하는 방법에 대한 자세한 내용은 Amazon Route 53 개발자 안내서의 [라우팅 정책 선택](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html)을 참조하세요. CloudWatch 경보를 모니터링하는 방법에 대한 자세한 내용은 Amazon Route 53 개발자 안내서의 [CloudWatch 경보 모니터링](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-creating-values.html#health-checks-creating-values-cloudwatch)을 참조하세요.

## 1단계: 리소스 설정
<a name="dns-failover-intial-setup"></a>

이 예에서는 다음 리소스를 생성하여 도메인 이름에 대한 DNS 장애 조치를 구성합니다.
+ 두 AWS 리전에 있는 API Gateway API
+ 두 AWS 리전에 있는 이름이 같은 API Gateway 사용자 지정 도메인 이름
+ API Gateway API를 사용자 지정 도메인 이름에 연결하는 API Gateway API 매핑
+ 도메인 이름에 대한 Route 53 장애 조치 DNS 레코드
+ 보조 리전의 CloudWatch 경보
+ 보조 리전의 CloudWatch 경보를 기반으로 하는 Route 53 상태 확인

먼저 기본 및 보조 리전에 필요한 모든 리소스가 있는지 확인하세요. 보조 리전에는 알람 및 상태 확인이 포함되어야 합니다. 이렇게 하면 장애 조치를 수행하기 위해 기본 리전에 의존하지 않아도 됩니다. 이러한 리소스를 만드는 예제 CloudFormation 템플릿은 [samples/primary.zip](samples/primary.zip) 및 [samples/secondary.zip](samples/secondary.zip) 섹션을 참조하세요.

**중요**  
보조 리전으로 장애 조치하기 전에 필요한 리소스를 모두 사용할 수 있는지 확인하세요. 그렇지 않으면 API가 보조 리전의 트래픽을 수용할 준비가 되지 않습니다.

## 2단계: 보조 리전으로의 장애 조치 시작
<a name="dns-failover-initiate"></a>

다음 예에서 대기 리전은 CloudWatch 지표를 수신하고 장애 조치를 시작합니다. 장애 조치를 시작하기 위해 운영자의 개입이 필요한 사용자 지정 메트릭을 사용합니다.

```
aws cloudwatch put-metric-data \
    --metric-name Failover \
    --namespace HealthCheck \
    --unit Count \
    --value 1 \
    --region us-west-1
```

구성한 CloudWatch 경보에 해당하는 데이터로 지표 데이터를 바꿉니다.

## 3단계: 장애 조치 테스트
<a name="dns-failover-test"></a>

API를 호출하고 보조 리전으로부터 응답이 수신되는지 확인하세요. 1단계에서 예제 템플릿을 사용한 경우 장애 조치 후 응답이 `{"message": "Hello from the secondary Region!"}`에서 `{"message": "Hello from the primary Region!"}`으로 변경됩니다.

```
curl https://my-api.example.com

{"message": "Hello from the secondary Region!"}
```

## 4단계: 기본 리전으로 돌아가기
<a name="dns-failover-return"></a>

기본 리전으로 돌아가려면 상태 확인을 통과하도록 하는 CloudWatch 지표를 전송하세요.

```
aws cloudwatch put-metric-data \
    --metric-name Failover \
    --namespace HealthCheck \
    --unit Count \
    --value 0 \
    --region us-west-1
```

구성한 CloudWatch 경보에 해당하는 데이터로 지표 데이터를 바꿉니다.

API를 호출하고 기본 리전으로부터 응답이 수신되는지 확인하세요. 1단계에서 예제 템플릿을 사용한 경우 응답이 `{"message": "Hello from the primary Region!"}`에서 `{"message": "Hello from the secondary Region!"}`으로 변경됩니다.

```
curl https://my-api.example.com

{"message": "Hello from the primary Region!"}
```

## 다음 단계: 사용자 지정 및 정기적인 테스트
<a name="dns-failover-next-steps"></a>

이 예제에서는 DNS 장애 조치를 구성하는 한 가지 방법을 보여줍니다. 장애 조치를 관리하는 상태 확인에 다양한 CloudWatch 지표 또는 HTTP 엔드포인트를 사용할 수 있습니다. 장애 조치 메커니즘을 정기적으로 테스트하여 예상대로 작동하는지, 운영자가 장애 조치 절차를 잘 알고 있는지 확인하세요.