API Gateway를 통해 이미지 파일을 Amazon S3에 업로드하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 6월 1일

Amazon API Gateway를 통해 이미지 파일을 Amazon Simple Storage Service(Amazon S3)에 업로드하고 싶습니다.

간략한 설명

API Gateway를 사용하여 S3 버킷에 이진 파일(이미지)을 업로드하려면 API Gateway API에 대해 이진 지원을 활성화해야 합니다. API가 S3 버킷에 액세스하도록 허용하려면 AWS Identity and Access Management(IAM) 역할을 만들어야 합니다. IAM 역할에는 S3 버킷에서 Put 작업을 수행할 수 있는 API Gateway에 대한 권한이 있어야 합니다.

해결 방법

API Gateway에 대한 IAM 역할 만들기

  1. IAM 콘솔을 엽니다.
  2. 탐색 창에서 [역할(Roles)]을 선택합니다.
  3. [역할 생성(Create Role)]을 선택합니다.
  4. [신뢰할 수 있는 유형의 개체 선택(Select type of trusted entity)] 섹션에서 [AWS 서비스(AWS service)]를 선택합니다.
  5. [사용 사례 선택(Choose a use case)] 섹션에서 [API Gateway]를 선택합니다.
  6. 사용 사례 선택(Select your use case) 섹션에서 [API Gateway]를 선택합니다.
  7. [다음: 권한(Next: Permissions)]을 선택합니다.
    참고: 이 섹션에서는 API Gateway가 로그를 사용자 계정으로 푸시하도록 허용하는 AWS 관리형 서비스를 보여 줍니다. 나중에 S3에 대한 권한을 추가합니다. 지금은 [다음: 태그(Next: Tags)]를 선택합니다.
  8. 태그를 추가한 후(선택 사항) [다음: 검토(Next: Review)]를 선택합니다.
  9. [역할 이름(Role name)]에 정책 이름을 입력합니다. 예: api-gateway-upload-to-s3
  10. [역할 생성(Create Role)]을 선택합니다.

IAM 정책을 생성하여 API Gateway 역할에 연결

  1. IAM 콘솔을 엽니다.
  2. 탐색 창에서 [역할(Roles)]을 선택합니다.
  3. 검색 상자에 생성한 새 API Gateway 역할의 이름을 입력합니다. 그런 다음 [역할 이름(Role name)] 열에서 해당 역할을 선택합니다.
  4. [권한(Permissions)] 탭에서 [정책 연결(Attach policies)]을 선택합니다.
  5. [정책 생성(Create policy)]을 선택합니다.
  6. [시각 편집기(Visual editor)] 탭의 [서비스 선택(Select a service)] 섹션에서 [서비스 선택(Choose a service)]을 선택합니다.
  7. S3를 입력한 다음 [S3]를 선택합니다.
  8. [S3에 허용되는 작업 지정(Specify the actions allowed in S3)] 상자에 PutObject를 입력한 다음 [PutObject]를 선택합니다.
  9. [리소스(Resources)]를 확장한 다음 [특정(Specific)]을 선택합니다.
  10. [ARN 추가(Add ARN)]를 선택합니다.
  11. [버킷 이름(Bucket name)]에 버킷 이름을 입력합니다. 해당하는 경우 접두어를 포함합니다.
  12. [객체 이름(Object name)]에 객체 이름을 입력합니다.
    참고: 버킷 이름은 업로드된 파일의 위치를 지정합니다. 객체 이름은 정책 맞춤을 위해 객체(즉, 파일 이름)가 준수해야 하는 패턴을 지정합니다.
  13. [추가(Add)]를 선택합니다.
  14. [다음: 태그(Next: Tags)]를 선택하여 태그를 추가한 후(선택 사항) [다음: 검토(Next: Review)]를 선택합니다.
  15. [이름(Name)]에 정책 이름을 입력합니다.
  16. [정책 생성(Create policy)]을 선택합니다.
  17. 정책 검색 상자에 앞에서 방금 생성한 정책 이름을 입력한 다음 해당 정책을 선택합니다.
  18. [정책 작업(Policy actions)]을 선택하고 [연결(Attach)]을 선택합니다.
  19. 탐색 창에서 [역할(Roles)]을 선택합니다.
  20. 이전에 생성한 API Gateway 역할을 검색한 다음 선택합니다.
  21. [정책 작업(Policy actions)]을 선택하고 [연결(Attach)]을 선택합니다.
    참고: 정책 권한을 통해 API Gateway가 PutObject API 호출을 사용하여 버킷에 객체를 업로드할 수 있습니다.

API Gateway API 만들기

요청을 처리하는 API를 만듭니다.

  1. API Gateway 콘솔을 엽니다.
  2. 탐색 창에서 API를 선택합니다.
  3. [API 생성(Create API)]을 선택합니다.
  4. [API 유형 선택(Choose an API type)] 섹션에서 REST API용 [빌드(Build)]를 선택합니다.
  5. [API 이름(API Name)]에 API의 이름을 입력하고 [다음(Next)]을 선택합니다.
  6. [API 생성(Create API)]을 선택합니다.

API에 대한 리소스 만들기:

  1. API 페이지의 [리소스(Resources)] 패널에서 [/]를 선택합니다.
  2. [작업(Actions)]에 [리소스 생성(Create Resource)]을 선택합니다.
  3. 리소스 이름(Resource Name)folder를 입력합니다.
  4. 리소스 경로(Resource Path){folder}를 입력합니다.
  5. [리소스 생성(Create Resource)]을 선택합니다.
  6. [리소스(Resources)] 패널에서 방금 만든 /{folder} 리소스를 선택합니다.
  7. [작업(Actions)]을 선택한 다음 [리소스 생성(Create Resource)]을 선택합니다.
  8. [리소스 이름(Resource Name)]에 object를 입력합니다.
  9. [리소스 경로(Resource Path)]에 {object}를 입력합니다.
  10. [리소스 생성(Create Resource)]을 선택합니다.

API에 대한 PUT 메서드 만들기:

  1. API 페이지의 [리소스(Resources)] 패널에서 /{object}를 선택합니다.
  2. [작업(Actions)]을 선택한 다음 [메서드 생성(Create Method)]을 선택합니다.
  3. 드롭다운 메뉴에서 [PUT]을 선택한 다음 확인 표시 아이콘을 선택합니다.
  4. [통합 유형(Integration type)]에 [AWS 서비스(AWS Service)]를 선택합니다.
  5. [AWS 리전(AWS Region)]에 [us-west-2]를 선택합니다.
  6. [AWS 서비스(AWS Service)]에 [Simple Storage Service(S3)]를 선택합니다.
  7. [AWS 서브 도메인(AWS Subdomain)]을 공백으로 비워 둡니다.
  8. [HTTP 메서드(HTTP method)]에 [PUT]를 선택합니다.
  9. [작업 유형(Action Type)]에 [경로 재정의 사용(Use path override)]을 선택합니다.
  10. [경로 재정의(선택 사항)(Path override (optional))]에 {bucket}/{key}를 입력합니다.
  11. [실행 역할(Execution role)]에 앞서 생성한 IAM 역할의 Amazon 리소스 이름(ARN)을 입력합니다.
  12. [내용 처리(Content Handling)]에 [통과(Passthrough)]를 선택합니다.
  13. [저장(Save)]을 선택합니다.

API에 대한 PUT 메서드 만들기

  1. API 페이지의 [리소스(Resources)] 패널에서 [PUT]을 선택합니다.
  2. [통합 요청(Integration Request)]을 선택합니다.
  3. [URL 경로 파라미터(URL Path Parameters)]를 확장합니다.
  4. [경로 추가(Add path)]를 선택합니다.
  5. [이름(Name)]에 bucket을 입력합니다.
  6. [매핑된 위치(Mapped from)]에 method.request.path.folder를 입력합니다.
  7. 행 끝에 있는 확인 표시 아이콘을 선택합니다.
  8. 4~7단계를 반복합니다. 5단계에서 [이름(Name)]을 key로 설정합니다. 6단계에서 [매핑된 위치(Mapped from)]에 method.request.path.object를 선택합니다.

API에 대한 이진 미디어 유형 설정

  1. API 페이지의 탐색 창에서 [설정(Settings)]을 선택합니다.
  2. [이진 미디어 유형(Binary Media Types)] 섹션에 [이진 미디어 유형 추가(Add Binary Media Type)]를 선택합니다.
  3. 텍스트 상자에 */* 문자열을 추가합니다.
    참고: 문자열을 따옴표로 묶지 마세요. 이진 미디어 유형으로 처리하려는 특정 MIME 유형을 와일드카드로 대체할 수도 있습니다. 예를 들어 API Gateway가 JPEG 이미지를 이진 미디어 유형으로 처리하도록 하려면 “image/jpeg”을 선택합니다. */*를 추가하면 API Gateway는 모든 미디어 유형을 이진 미디어 유형으로 처리합니다.
  4. [변경 내용 저장(Save Changes)]을 선택합니다.

API 배포

  1. API 페이지의 탐색 창에서 [리소스(Resources)]를 선택합니다.
  2. [리소스(Resources)] 창에서 [작업(Actions)]을 선택하고 [API 배포(Deploy API)]를 선택합니다.
  3. [API 배포(Deploy API)] 창의 [배포 단계(Deployment stage)]에서 [새 단계(New Stage)]를 선택합니다.
  4. [단계 이름(Stage name)]에 v1을 입력합니다.
  5. [배포(Deploy)]를 선택합니다.
  6. 탐색 창에서 [단계(Stages)]를 선택합니다.
  7. [v1] 단계를 선택합니다.

이제 배포된 API 스냅샷에 요청하기 위한 호출 URL이 표시됩니다.

호출 URL을 복사하고 객체의 버킷 이름과 파일 이름을 추가하여 클라이언트를 사용하여 PUT HTTP 요청을 만듭니다. 원하는 클라이언트를 사용할 수 있습니다. 예를 들어 Postman을 사용할 수 있습니다.

다음 예제 HTTP 요청을 고려합니다. 이 예제에서는 abc가 API ID이고 mybucket이 S3 버킷이며 myobject.jpeg가 업로드 중인 로컬 파일이라고 가정합니다. 이 예제에서 myobject.jpeg{object}를 대체하고 {key}로 매핑되는 동안 mybucket{folder}를 대체하고 {bucket}으로 매핑됩니다.

https://abc.execute-api.ap-southeast-1.amazonaws.com/v1/mybucket/myobject.jpeg

참고: 이진 목록에 */*가 포함되어 있으면 파일을 업로드하기 위해 PUT 요청을 수행할 수 있습니다. image.jpeg가 이진 목록에 포함되어 있는 경우 PUT 요청에 Content-Type 헤더를 추가해야 합니다. Content-Type 헤더image/jpeg로 설정해야 합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?