자체 CloudFront 배포를 사용하여 API 게이트웨이를 설정하려면 어떻게 해야 하나요?

7분 분량
0

Amazon API 게이트웨이에 엣지 최적화 API 엔드포인트를 두고 싶지만 이를 위한 자체 Amazon CloudFront 배포를 생성하고 싶습니다.

간략한 설명

API 클라이언트가 지리적으로 분산되어 있는 경우 API Gateway의 엣지 최적화 API 엔드포인트를 사용하십시오. 이 유형의 엔드포인트는 AWS 관리형 CloudFront 웹 배포에서 리전 엔드포인트 역할을 하여 클라이언트 연결 시간을 개선합니다.

글로벌 CloudFront 콘텐츠 전송 네트워크를 사용하고 배포에 대한 제어를 강화하려면 사용자 지정 CloudFront 웹 배포에서 리전 API를 사용하십시오.

해결 방법

사전 요구 사항: AWS Lambda 함수를 생성하여 API Gateway REST API와 통합하고, API Gateway에서 리전 API를 생성합니다.

us-east-1 리전 및 API Gateway REST API와 동일한 AWS 리전의 AWS Certificate Manager(ACM)에서 SSL/TLS 인증서를 생성합니다. ACM에서 발행하거나 ACM으로 가져온 도메인 이름에 대한 인증서를 가져오려면 다음 단계를 완료하십시오.

  1. 인터넷 도메인을 등록합니다. Amazon Route 53 또는 타사 공인 도메인 등록 기관을 사용할 수 있습니다.
  2. ACM의 도메인 이름에 대한 SSL/TLS 인증서를 생성하거나 ACM으로 인증서를 가져옵니다.

API에 GET 메서드를 설정합니다.

다음 단계를 완료합니다.

  1. API 게이트웨이 콘솔을 엽니다.
  2. 새 리전 API의 이름을 선택합니다.
  3. **Create resource(리소스 생성)**를 선택합니다.
  4. **Resource name(리소스 이름)**에 greetings를 입력합니다.
  5. **Create method(메서드 생성)**를 선택합니다.
  6. **Method type(메서드 유형)**으로 GET을 선택하고, **Integration type(통합 유형)**으로 **Lambda Function(Lambda 함수)**을 선택합니다. 이후 Lambda proxy integration(Lambda 프록시 통합) 버튼을 전환하고 Lambda 함수를 선택합니다.

API를 배포하고 API 호출 URL을 식별합니다.

다음 단계를 완료합니다.

  1. API를 스테이지에 배포합니다.
  2. Stage Editor(스테이지 편집기) 창 헤드에서 greetings 리소스의 GET HTTP 메서드에 대한 호출 URL을 클립보드에 복사합니다.

API Gateway API 호출 URL 예제:

https://restApiId.execute-api.region.amazonaws.com/stageName/greetings

API의 200 OK 응답 테스트

API가 200 OK 응답을 반환하는지 확인하려면 API Gateway 콘솔, Postman 앱 또는 curl을 통해 API 호출 URL을 테스트하십시오. Postman 및 curl에 대한 자세한 내용은 Postman 웹사이트curl 웹사이트를 참조하십시오.

curl을 사용하여 API의 200 OK 응답 테스트

운영 체제에 따라 다음 명령 중 하나를 실행합니다.

참고: https://restApiId.execute-api.region.amazonaws.com/stageNamee/greetings를 API 호출 URL로 바꾸십시오.

Linux의 경우 다음 명령을 실행합니다.

curl -IX GET https://restApiId.execute-api.region.amazonaws.com/stageName/greetings

Windows PowerShell의 경우 다음 명령을 실행합니다.

curl https://restApiId.execute-api.region.amazonaws.com/stageName/greetings

참고: 200 OK 이외의 상태 코드가 표시되면 콘솔에서 API가 스테이지에 배포되었는지 확인합니다. 또한 호출 URL에서 스테이지를 올바르게 지정하는지 확인합니다.

CloudFront 웹 배포 생성

다음 단계를 완료합니다.

  1. CloudFront 콘솔을 엽니다.

  2. **Create Distribution(배포 생성)**을 선택합니다.

  3. **Origin Domain Name(원본 도메인 이름)**에 API 호출 URL을 입력합니다. 이후 스테이지 및 리소스 이름을 삭제합니다.
    원본 도메인 이름 예제:

    https://restApiId.execute-api.region.amazonaws.com
  4. 프로토콜에서 HTTPS만 해당을 선택합니다.
    참고: API Gateway는 암호화되지 않은(HTTP) 엔드포인트를 지원하지 않습니다. 자세한 내용은 Amazon API Gateway FAQ 참조하십시오.

  5. **Minimum Origin SSL Protocol(최소 원본 SSL 프로토콜)**의 경우 TLSv1.2를 선택하는 것이 좋습니다. SSLv3를 선택하지 마십시오. API Gateway는 SSLv3 프로토콜을 지원하지 않습니다.

  6. 원본 경로에 API 스테이지 이름 앞에 슬래시를 붙여 입력합니다(/stageName). 또는 URL을 호출할 때 직접 스테이지 이름을 입력하려면 원본 경로에 아무 것도 입력하지 마십시오.
    참고: 원본 경로에 잘못된 스테이지 이름을 입력한 후 CloudFront 배포를 호출하면 오류가 발생할 수 있습니다. 예를 들어 "Missing Authentication Token" 메시지와 403 Forbidden 응답 코드를 반환하는 무단 요청 오류가 발생할 수 있습니다.

  7. (선택 사항) 원본에 사용자 지정 헤더를 전달하려면 **Origin Custom Headers(원본 사용자 지정 헤더)**에 하나 이상의 사용자 지정 헤더를 입력합니다.

  8. 해당되는 경우 API에 IAM 인증을 사용하거나 CloudFront 웹 배포에 사용자 지정 도메인 이름을 사용하는 경우 섹션의 지침을 따르십시오.

  9. (선택 사항) **Distribution Settings(배포 설정)**에서 사용자 지정하려는 추가 설정을 구성합니다.

  10. **Create Distribution(배포 생성)**을 선택합니다.

  11. 배포가 배포될 때까지 15~20분 정도 기다립니다. 콘솔에서 배포 **Status(상태)**가 **Deployed(배포됨)**로 표시되면 배포가 준비된 것입니다.

자세한 내용은 배포 생성을 참조하십시오.

CloudFront 웹 배포 테스트

다음 단계를 완료합니다.

  1. CloudFront 콘솔을 엽니다.

  2. 배포의 배포 도메인 이름을 클립보드에 복사합니다.
    사용자 지정이 아닌 도메인 이름 예제:

    a222222bcdefg5.cloudfront.net
  3. 도메인 이름에 200 OK 응답이 있는지 테스트합니다. 500 서버 오류 코드가 표시되면 배포가 배포되지 않을 수 있습니다. 응답이 없으면 CloudFront DNS 레코드가 아직 전파되지 않은 것입니다. 어느 경우든 배포를 생성한 후 15~20분 정도 기다린 다음 절차를 다시 시도하십시오.

중요: 앞선 단계는 리소스 메서드에 대해 AWS Identity and Access Management(IAM) 인증이 켜져 있지 않은 API 리소스에 해당되는 단계입니다. IAM 인증을 사용하는 메서드가 있는 경우 API를 호출할 때 배포 도메인 이름 끝에 리소스 이름을 추가합니다. 전체 호출 URL(리소스 이름 포함)은 다음 예제 중 하나와 유사합니다.

API Gateway API 호출 URL(원본 경로 포함) 예제:

https://distributionDomainName/stageName/resourceName

API Gateway API 호출 URL(원본 경로 미포함) 예제:

https://distributionDomainName/resourceName

배포를 테스트하는 방법에 대한 자세한 내용은 API Gateway API에 대한 IAM 인증을 활성화하려면 어떻게 해야 하나요?를 참조하십시오.

API에 IAM 인증을 사용하거나 CloudFront 웹 배포에 사용자 지정 도메인 이름을 사용하는 경우

기본적으로 원본(이 경우 API Gateway)에 CloudFront는 수신되는 권한 부여 헤더를 전달하지 않습니다. API에 IAM 인증을 사용하거나 배포에 사용자 지정 도메인 이름을 사용하는 경우 다음 작업 중 하나를 수행하십시오.

(IAM 인증의 경우) 권한 부여 헤더를 CloudFront 허용 목록에 추가

다음 단계를 완료합니다.

  1. CloudFront 배포 생성
  2. Create Distribution(배포 생성) 페이지의 **Default cache behavior(기본 캐시 동작) 및 Cache key and origin requests(캐시 키 및 원본 요청)**에서 Legacy cache(레거시 캐시) 설정을 선택합니다.
  3. Headers(헤더) 드롭다운 목록에서 **Include the following headers(다음 헤더 포함)**를 선택합니다. 이후 표시되는 헤더 목록에서 Authorization을 선택합니다. API로 전달하려는 헤더를 구성합니다.
    -또는-
    **Cache key and origin requests(캐시 키 및 원본 요청)**의 **Cache Policy(캐시 정책)**에서 기존 캐시 정책을 선택하거나 새 캐시 정책을 생성합니다. 정책은 Authorization 헤더를 CloudFront 허용 목록에 추가해야 합니다.
  4. (선택 사항) 설정을 테스트하려면 다음을 수행하십시오.
    프로그래밍 방식으로 API Gateway 엔드포인트에 필요한 Signature Version 4 서명을 생성합니다. 호스트 값에 API Gateway 호출 URL을 입력합니다. 엔드포인트 값에 CloudFront 웹 배포 URL을 입력합니다.
    API Gateway 호출 URL 예제:
    example_api_id.execute.example_region.amazon.com
    CloudFront 웹 배포 URL 예제:
    d######.cloudfront.net

참고: Postman 앱을 사용하는 경우 Authorization(권한 부여) 탭의 **Type(유형)**에서 **AWS Signature(AWS 서명)**를 선택합니다. 그런 다음, 액세스 키보안 암호 키를 입력합니다. Postman은 사용자가 입력한 자격 증명을 사용하여 필요한 헤더를 생성합니다. 그런 다음 Signature Version 4 프로세스에서 생성된 Authorization 헤더(및 모든 SignedHeaders)를 사용하여 CloudFront 배포에 API 요청을 전송합니다.

(사용자 지정 도메인 이름 또는 IAM 인증의 경우) API Gateway에서 리전 사용자 지정 도메인 이름을 설정하여 API에 액세스

다음 단계를 완료합니다.

  1. API Gateway에서 새 리전 API를 생성하거나 엣지 최적화 API Gateway API를 리전 API로 변경합니다.

  2. API의 리전 사용자 지정 도메인 이름을 설정하고 API에 대한 API 매핑을 생성합니다.
    참고: CloudFront를 통해 API에 액세스할 때 이 사용자 지정 도메인 이름을 사용하십시오.

  3. CloudFront 웹 배포를 생성하되 **Origin Domain Name(원본 도메인 이름)**에 API 호출 URL 대신 API Gateway 대상 도메인 이름을 입력합니다.
    참고: 사용자 지정 도메인 세부 정보의 엔드포인트 구성 섹션에서 API Gateway 대상 도메인 이름을 찾을 수 있습니다.
    API 게이트웨이 대상 도메인 이름 예제:

    d-######.execute-api.example-region.amazonaws.com
  4. Create Distribution(배포 생성) 페이지의 **Default cache behavior(기본 캐시 동작) 및 Cache key and origin requests(캐시 키 및 원본 요청)**에서 Legacy cache(레거시 캐시) 설정을 선택합니다.

  5. Headers(헤더) 드롭다운 목록에서 **Include the following headers(다음 헤더 포함)**를 선택합니다. 이후 표시되는 헤더 목록에서 HostAuthorization을 선택합니다. API로 전달하려는 헤더를 구성합니다.
    -또는-
    **Cache key and origin requests(캐시 키 및 원본 요청)**의 **Cache Policy(캐시 정책)**에서 기존 캐시 정책을 선택하거나 새 캐시 정책을 생성합니다. 정책은 Authorization 헤더를 CloudFront 허용 목록에 추가해야 합니다.

  6. **Distribution Settings(배포 설정)**의 **Alternate domain name(대체 도메인 이름)**에 생성한 사용자 지정 도메인 이름을 입력합니다.

  7. SSL 인증서에서 사용자 지정 SSL 인증서를 선택합니다. 이후 해당 도메인에 대한 AWS Certificate Manager(ACM) 인증서를 추가합니다.

  8. CloudFront 웹 배포를 배포한 후 사용자 지정 도메인을 CloudFront 웹 배포에 매핑하도록 DNS 레코드를 구성합니다. 이를 위해 별칭 또는 CNAME 레코드를 생성합니다. 자세한 내용은 대체 도메인 이름(CNAME)을 추가하여 사용자 지정 URL 사용을 참조하십시오.

  9. (선택 사항) 설정을 테스트하려면 프로그래밍 방식으로 사용자 지정 도메인 이름에 대한 Signature Version 4 서명 요청을 생성합니다.
    참고: Postman 앱을 사용하여 설정을 테스트할 수도 있습니다.