자체 CloudFront 배포를 사용하여 API Gateway를 설정하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 1월 30일

Amazon API Gateway에서 엣지 최적화 API 엔드포인트가 필요하지만 Amazon CloudFront 배포를 더 잘 제어해야 합니다. 자체 배포를 생성하고 사용할 수 있습니까?

간략한 설명

API 클라이언트가 지리적으로 분산되어 있는 경우 API Gateway에 엣지 최적화 API 엔드포인트가 필요할 수 있습니다. 이 유형의 엔드포인트는 리전 엔드포인트처럼 작동하지만 클라이언트 연결 시간을 개선하는 데 도움이 되도록 AWS 관리형 CloudFront 웹 배포가 사용됩니다.

하지만 더 많은 배포를 제어하면서 글로벌 CloudFront 콘텐츠 전송 네트워크의 이점을 활용할 수 있습니다. 이 설정의 경우 사용자 지정 CloudFront 배포가 수동으로 할당되어 있는 리전 API를 사용합니다.

해결 방법

API Gateway에서 리전 API를 생성한 후 다음 지침을 따릅니다.

API에 대한 GET 메서드 설정

  1. API Gateway 콘솔에서 새 리전 API 이름을 선택합니다.
  2. [Resources(리소스)] 창에서 [Actions(작업)]을 선택하고 [Create Method(메서드 생성)]를 선택합니다.
  3. / 리소스 노드 아래에 나타나는 목록에서 [GET]을 선택하고 체크 표시 아이콘을 선택합니다.
  4. [/ - GET - Setup]의 [Integration type(인스턴스 유형)]에서 [Mock]를 선택하고 [Save(저장)]를 선택합니다. Mock 통합 요청은 도달하는 모든 요청에 응답하며, 테스트에서 나중에 유용합니다.

API 배포 및 호출 URL 가져오기

  1. API를 스테이지에 배포합니다.
  2. [Stage Editor(스테이지 편집기)] 창의 위에서 [Invoke URL(URL 호출)]을 클립보드에 복사합니다. URL은 다음과 같습니다.
    https://restApiId.execute-api.region.amazonaws.com/stageName.

API 테스트

API Gateway 콘솔, Postman 앱 또는 명령줄 인터페이스의 curl을 사용하여 "200" HTTP 상태 코드에 대한 API 호출 URL을 테스트합니다. curl에 대한 자세한 내용은 cURL 프로젝트 웹 사이트를 참조하십시오.

curl을 사용하여 다음 중 하나를 수행합니다.

참고: 이 명령에서 https://restApiId.execute-api.region.amazonaws.com/stageName을 API의 호출 URL로 바꿉니다.

Linux에서 다음 명령을 실행합니다.

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

Windows PowerShell에서 다음 명령을 실행합니다.

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

참고: "200" 이외의 상태 코드를 받는 경우 콘솔에서 API를 단계에 배포했는지 확인합니다. 또한 URL에 단계를 지정했는지 확인합니다.

CloudFront 웹 배포 생성

  1. CloudFront 콘솔에서 [Create Distribution(배포 생성)]을 선택합니다.
  2. [Select a delivery method for your content(콘텐츠 제공 방법 선택)] 페이지의 [Web(웹)] 아래에서 [Get Started(시작하기)]를 선택합니다.
  3. [Create Distribution(배포 생성)] 페이지의 [Origin Domain Name(오리진 도메인 이름)]에 API의 호출 URL을 붙여 넣고 단계 이름은 제거합니다. 예를 들면 다음과 같습니다.
    https://1a2bc3d456.execute-api.us-east-1.amazonaws.com
  4. [Origin Path(오리진 경로)]에서 API의 단계 이름 앞에 슬래시(/stageName)를 붙여 입력합니다. 또는 URL을 호출할 때 단계 이름을 직접 입력하려는 경우 [Origin Path(오리진 경로)]를 입력하지 마십시오.
    참고: [Origin Path(오리진 경로)]에 잘못된 단계 이름을 입력하면 CloudFront 배포를 호출할 때 오류가 발생할 수 있습니다. 예를 들어, “Missing Authentication Token(인증 토큰 누락)” 메시지와 403 Forbidden 응답 코드를 반환하는 무단 요청 오류.
  5. [Minimum Origin SSL Protocol(최소 오리진 SSL 프로토콜)]에 TLSv1.2만 선택하는 것이 좋습니다. SSLv3은 선택하지 마십시오. API Gateway는 해당 프로토콜을 지원하지 않습니다.
  6. [Origin Protocol Policy(오리진 프로토콜 정책)]에서 [HTTPS Only(HTTS만)]를 선택합니다.
    참고: API Gateway는 암호화되지 않은(HTTP) 엔드포인트를 지원하지 않습니다. 자세한 내용은 Amazon API Gateway FAQ를 참조하십시오.
  7. (선택 사항) 오리진에 사용자 지정 헤더를 전달하려면 [Origin Custom Headers]에 하나 이상의 사용자 지정 헤더를 입력합니다.
    참고: CloudFront가 오리진에 전달할 수 없는 몇 가지 사용자 지정 헤더가 있습니다.
  8. API에서 IAM 인증을 활성화했거나 나중에 활성화하려는 경우 [Authorization(권한 부여)] 요청 헤더를 화이트리스트로 지정해야 합니다. [Cache Based on Selected Request Headers(선택한 요청 헤더에 기반한 캐시)]에서 [Whitelist(화이트리스트)]를 선택합니다. [Whitelist Headers(화이트리스트 헤더)]에 [Authorization(권한 부여)]을 화이트리스트 지정 헤더 목록에 추가합니다.
    중요: [Cache Based on Selected Request Headers(선택한 요청 헤더에 기반한 캐시)] 설정을 [All(모두)]로 변경하거나 [Host(호스트)] 헤더를 화이트리스트로 지정하면 설정이 작동하지 않습니다. 자세한 내용은 요청 헤더 기반 콘텐츠 캐싱을 참조하십시오.
  9. (선택 사항) CloudFront가 할당하는 대신 배포에 자체 사용자 지정 도메인 이름을 사용하려면 [Alternate Domain Names(대체 도메인 이름) (CNAMEs)]에 도메인 이름을 하나 이상 입력합니다. 자세한 내용은 대체 도메인 이름(CNAME)을 추가하여 파일에 대해 사용자 지정 URL 사용을 참조하십시오.
  10. (선택 사항) 사용자 지정하려는 추가 설정을 구성합니다.
  11. [Create Distribution(배포 생성)]을 선택합니다.
  12. 배포 준비가 완료될 때까지 기다립니다. 이 작업은 15~20분이 걸릴 수 있습니다. 콘솔에서 [Status(상태)]가 [Deployed(배포됨)]로 표시되면 배포 준비가 완료된 것입니다.

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

CloudFront 웹 배포 테스트

  1. CloudFront 콘솔에서 배포의 [Domain Name]을 적어 둡니다. 사용자 지정 도메인 이름을 사용하지 않은 경우 도메인은 a222222bcdefg5.cloudfront.net와 같습니다.
  2. API 테스트 단원에서 앞서 언급한 명령 중 하나를 사용하여 "200" HTTP 상태 코드에 대한 도메인 이름을 테스트합니다.
    참고: 특정 API 리소스에 대한 메서드에서 IAM 인증을 활성화한 경우 API를 호출할 때 배포 도메인 이름의 끝에 리소스 이름을 추가해야 합니다. 리소스 이름이 포함된 전체 호출 URL은 배포를 생성하는 동안 Origin Path(오리진 경로)를 입력했는지 여부에 따라 https://distributionDomainName/resourceName 또는 https://distributionDomainName/stageName/resourceName 중 하나와 같습니다. 이 사용 사례 테스트에 대한 자세한 내용은 API Gateway API에 대한 IAM 인증을 활성화하려면 어떻게 해야 합니까?를 참조하십시오.

참고: "500" 서버 오류 코드가 표시되는 경우 배포가 완전히 수행되지 않았을 수 있습니다. 응답이 없는 경우 CloudFront DNS 레코드가 아직 완전히 전파되지 않았을 수 있습니다. 두 경우 모두 배포를 생성한 후 15~20분이 지났는지 확인한 다음 절차를 다시 시도합니다.

이제 API에서 생성한 배포를 사용하므로 CloudFront URL을 통해 API의 모든 리소스에 액세스할 수 있습니다.