내용으로 건너뛰기

Amazon S3를 사용하여 API Gateway를 프록시로 사용하는 정적 웹 사이트를 호스팅하려면 어떻게 해야 합니까?

6분 분량
0

Amazon API Gateway를 사용하여 API를 정적 웹 사이트의 프록시로 생성하고 싶습니다. 그런 다음 Amazon Simple Storage Service(Amazon S3)에서 웹 사이트를 호스팅하고 싶습니다.

해결 방법

Amazon S3를 사용하여 API Gateway를 프록시로 사용하는 정적 웹 사이트를 호스팅하려면 HTTP 통합 또는 AWS 서비스 통합을 사용하십시오.

HTTP 통합 사용

정적 웹 사이트에 공개적으로 액세스할 수 있는 경우 HTTP 통합을 사용하여 API에 대한 Amazon S3 정적 웹 사이트 URL을 제공하십시오.

Amazon S3에서 정적 웹 사이트를 구성합니다. 그런 다음, API Gateway 콘솔을 사용하여 루트 리소스에 대한 REST API와 메서드를 생성하고 REST API를 배포합니다.

REST API 생성

다음 단계를 완료하십시오.

  1. API Gateway 콘솔을 엽니다.
  2. API 생성을 선택합니다.
  3. REST API에서 빌드를 선택합니다.
  4. API 이름에 REST API의 이름을 입력합니다.
  5. API 엔드포인트 유형 드롭다운 목록에서 해당 엔드포인트 유형을 선택한 다음 API 생성을 선택합니다.
  6. 탐색 창에서 API 이름 아래의 리소스를 선택합니다.
  7. 리소스 생성을 선택합니다.
  8. 리소스 경로에서 **/**로 유지합니다.
  9. 리소스 이름에 이름을 입력합니다. 예: key.
  10. 리소스 생성을 선택합니다.

루트 리소스에 대한 메서드 생성

다음 단계를 완료하십시오.

  1. 리소스에서 생성한 리소스를 선택합니다. 예: /key.
  2. 메서드에서 메서드 생성을 선택합니다.
  3. 메서드 유형 드롭다운 목록에서 GET를 선택합니다.
  4. 통합 유형에서 HTTP를 선택합니다.
  5. HTTP 프록시 통합을 선택합니다.
  6. HTTP 메서드 드롭다운 목록에서 GET를 선택합니다.
  7. 엔드포인트 URL에 http://BUCKET_NAME.s3-website.REGION.amazonaws.com/key를 입력합니다.<br id=hardline_break/> 참고: BUCKET_NAME을 버킷 이름으로, REGION을 버킷의 리전으로, key를 리소스 이름으로 바꾸십시오.
  8. 메서드 생성을 선택합니다.

REST API 배포

다음 단계를 완료하십시오.

  1. API 배포를 선택합니다.
  2. 스테이지 드롭다운 목록에서 *새 스테이지*를 선택합니다.
  3. 스테이지 이름에 이름을 입력합니다. 예: STAGE_NAME.
  4. 배포를 선택합니다.
  5. 스테이지 세부 정보에서 API를 테스트하기 위한 호출 URL을 기록해 둡니다.
  6. S3 웹 사이트의 API 프록시를 테스트하려면 다음 curl 명령을 실행합니다.
    curl -X GET https://API_ID.execute-api.REGION.amazonaws.com/STAGE_NAME/index.html
    참고: API_ID를 해당 API ID로, REGION을 해당 리전으로, STAGE_NAME을 해당 스테이지 이름으로 바꾸십시오.

AWS 서비스 통합 사용

S3 정적 웹 사이트 구성

S3 정적 웹 사이트의 퍼블릭 액세스가 차단된 경우 API 프록시에서만 액세스할 수 있도록 웹 사이트를 구성합니다.

다음 단계를 완료하십시오.

  1. Amazon S3에서 정적 웹 사이트를 구성합니다.<br id=hardline_break/> 참고: 정적 웹 사이트를 구성할 때는 3단계: 퍼블릭 액세스 차단 설정 편집 섹션을 건너뛰십시오. 기본값인 모든 퍼블릭 액세스 차단 설정을 활성 상태로 유지합니다.
  2. API 프록시가 S3 버킷에만 액세스할 수 있도록 버킷 콘텐츠를 공개적으로 사용할 수 있도록 하는 버킷 정책을 수정합니다. 버킷 정책 예시:
    {  
      "Version": "2012-10-17",
      "Statement": [{
          "Sid": "APIProxyBucketPolicy",
          "Effect": "Allow",
          "Principal": {
            "Service": "apigateway.amazonaws.com"
          },
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::BUCKET_NAME/*",
          "Condition": {
            "ArnLike": {
              "aws:SourceArn": "arn:aws:execute-api:REGION:ACCOUNT_ID:API_ID/*/GET/"
            }
          }
      }]
    }
    참고: BUCKET_NAME을 버킷 이름으로, REGION을 리전으로, ACCOUNT_ID를 AWS 계정 ID로, API_ID를 API ID로 바꾸십시오.
  3. S3 버킷에 대한 GetObject API 액세스를 허용하는 AWS Identity and Access Management(IAM) 정책을 생성합니다. IAM 정책 예시:
    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Action": ["s3:GetObject"],
        "Resource": [
            "arn:aws:s3:::BUCKET_NAME/*"
        ]
      }]
    }
    참고: BUCKET_NAME을 사용하는 버킷 이름으로 바꾸십시오.
  4. IAM 역할을 생성한 다음, 이전 IAM 정책을 연결합니다.
  5. IAM 역할의 Amazon 리소스 이름(ARN)을 기록합니다.<br id=hardline_break/> 참고: API Gateway에 역할을 부여하려면 IAM 역할에 다음과 같은 신뢰 정책이 포함되어야 합니다.
    {
      "Version": "2012-10-17",
      "Statement": [{
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
            "Service": "apigateway.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }]
    }

S3 서비스용 REST API 프록시 생성

다음 단계를 완료하십시오.

  1. API Gateway 콘솔을 엽니다.
  2. API 생성을 선택합니다.
  3. REST API에서 빌드를 선택합니다.
  4. API 이름에 REST API의 이름을 입력합니다.
  5. API 엔드포인트 유형 드롭다운 목록에서 대부분의 클라이언트 트래픽이 시작되는 위치를 기준으로 엔드포인트 유형을 선택합니다.<br id=hardline_break/> 참고: 클라이언트 트래픽이 인터넷에서 액세스하는 퍼블릭 서비스에는 엣지 최적화 엔드포인트를 사용하는 것이 좋습니다. 클라이언트 트래픽이 동일한 AWS 리전 내에서만 API에 액세스하는 경우 리전 엔드포인트를 사용하십시오.
  6. API 생성을 선택합니다.

루트 리소스에 대한 GET 메서드 생성

다음 단계를 완료하십시오.

  1. 루트 리소스 **/**를 선택합니다.
  2. 메서드 생성을 선택합니다.
  3. 메서드 유형 드롭다운 목록에서 GET를 선택합니다.
  4. 통합 유형에서 AWS 서비스를 선택합니다.
  5. AWS 리전 드롭다운 목록에서 내 리전을 선택합니다.
  6. AWS 서비스 드롭다운 목록에서 **Simple Storage Service(S3)**를 선택합니다.
  7. AWS 하위 도메인에서 필드를 비워 둡니다.
  8. HTTP 메서드 드롭다운 목록에서 GET를 선택합니다.
  9. 작업 유형에서 경로 재정의 사용을 선택합니다.
  10. 경로 재정의에 S3 버킷 경로를 입력합니다. 예: BUCKET_NAME/index.html.
  11. 실행 역할에 IAM 역할의 ARN을 입력합니다.
  12. 메서드 생성을 선택합니다.

참고: 이 설정은 프런트엔드 GET API 요청 **https://your-api-host/stage/**를 GET S3 백엔드 https://your-s3-host/index.html에 통합합니다.

API 리소스 객체 생성

다음 단계를 완료하십시오.

  1. 리소스 생성을 선택합니다.
  2. 리소스 경로에서 **/**로 유지합니다.
  3. 리소스 이름에 이름을 입력합니다. 예: object.
  4. 리소스 생성을 선택합니다.

리소스에 대한 GET 메서드 구성

다음 단계를 완료하십시오.

  1. 리소스에서 생성한 리소스를 선택합니다. 예: /object.
  2. 루트 리소스의 GET 메서드 생성 섹션에서 2~12단계를 완료합니다.
  3. GET를 선택한 다음 통합 요청을 선택합니다.<br id=hardline_break/> 참고: object를 해당 리소스 이름으로 바꾸십시오.
  4. 편집을 선택합니다.
  5. URL 경로 파라미터를 확장한 다음 경로 매개변수 추가를 선택합니다.
  6. 이름에서 리소스 이름을 입력합니다.
  7. 다음에서 매핑됨에서 값을 method.request.path.object로 입력합니다.<br id=hardline_break/> 참고: object를 해당 리소스 이름으로 바꾸십시오.
  8. 저장을 선택합니다.

GET 메서드에 대한 응답 헤더 매핑 설정

브라우저가 콘텐츠 유형의 응답을 처리하도록 백엔드 콘텐츠 유형 헤더 파라미터 값을 프론트엔드 대응값에 매핑해야 합니다.

다음 단계를 완료하십시오.

  1. 리소스에서 **/**를 선택합니다.
  2. GET를 선택한 다음 메서드 응답을 선택합니다.
  3. 응답 200에서 편집을 선택합니다.
  4. 헤더 이름에서 헤더 추가를 선택합니다.
  5. 이름을 콘텐츠 유형으로 설정합니다.
  6. 저장을 선택합니다.
  7. 통합 응답을 선택한 후 편집을 선택합니다.
  8. 헤더 매핑에서 Content-Type 옆에 있는 매핑 값을 integration.response.header.Content-Type으로 입력합니다.
  9. /object 리소스 아래에서 GET 메서드에 대해 2~8단계를 반복합니다.<br id=hardline_break/> 참고: object를 해당 리소스 이름으로 바꾸십시오.

REST API 배포

다음 단계를 완료하십시오.

  1. API 배포를 선택합니다.
  2. 스테이지 드롭다운 목록에서 *새 스테이지*를 선택합니다.
  3. 스테이지 이름에 이름을 입력합니다. 예: STAGE_NAME.
  4. 배포를 선택합니다.
  5. 스테이지 세부 정보에서 API를 테스트하기 위한 호출 URL을 기록해 둡니다.

S3 정적 웹 사이트의 API 프록시를 테스트하려면 curl 명령을 실행합니다.

참고: 다음 예에서 API_ID를 해당 API ID로, REGION을 해당 리전으로, STAGE_NAME을 해당 스테이지 이름으로 바꾸십시오.

루트 리소스를 테스트하려면 다음 curl 명령을 실행합니다.

curl -X GET https://API_ID.execute-api.REGION.amazonaws.com/STAGE_NAME/

객체 리소스를 테스트하려면 다음 curl 명령을 실행합니다.

curl -X GET https://API_ID.execute-api.REGION.amazonaws.com/STAGE_NAME/home.html

관련 정보

튜토리얼: REST API를 Amazon S3 프록시로 생성

Amazon S3를 사용해 정적 웹 사이트 호스팅

API Gateway에서 REST API 개발

API Gateway에서 REST API를 위한 배포 생성

댓글 없음