API Gateway를 통해 Amazon S3에 이미지 또는 PDF 파일을 업로드하려면 어떻게 해야 하나요?

7분 분량
0

Amazon API Gateway를 통해 Amazon Simple Storage Service(S3)에 이미지 또는 PDF 파일을 업로드하려고 합니다. 또한 이미지 또는 PDF 파일을 검색하려고 합니다.

간략한 설명

API Gateway를 통해 이미지 또는 PDF를 Amazon S3 버킷에 바이너리 파일로 업로드하려면 바이너리 지원을 활성화하세요.

S3 버킷에 API 액세스 권한을 부여하려면 AWS Identity and Access Management(IAM) 역할을 생성하세요. IAM 역할에는 API Gateway가 S3 버킷에서 PutObjectGetObject 작업을 수행할 수 있는 권한이 포함되어야 합니다.

해결 방법

API Gateway에 대한 IAM 역할 생성

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 역할을 선택합니다.

3.    역할 생성을 선택합니다.

4.    신뢰할 수 있는 유형의 엔터티 선택 섹션에서 AWS 서비스를 선택합니다.

5.    사용 사례 선택 섹션에서 API Gateway를 선택합니다.

6.    사용 사례 선택 섹션에서 API Gateway를 선택합니다.

7.    다음: 권한을 선택합니다.
참고: 이 섹션에서는 API Gateway가 로그를 사용자 계정으로 푸시하도록 허용하는 AWS 관리형 서비스를 보여줍니다. Amazon S3에 대한 권한은 나중에 추가합니다.

8.    (선택 사항) 다음: 태그를 선택하여 태그를 추가하세요.

9.    다음: 검토를 선택합니다.

10.    역할 이름에 자신의 정책 이름을 입력합니다. 예: api-gateway-upload-to-s3.

11.    역할 생성을 선택합니다.

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

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 역할을 선택합니다.

3.    검색 상자에 생성한 새 API Gateway 역할의 이름을 입력합니다. 그런 다음 역할 이름 열에서 해당 역할을 선택합니다.

4.    역할 세부 정보 페이지 탭에서 권한 추가를 선택합니다.

5.    인라인 정책 생성을 선택합니다.

6.    시각적 편집기 탭의 서비스 선택 섹션에서 서비스 선택을 선택합니다.

7.    S3를 입력한 다음, S3를 선택합니다.

8.    S3에서 허용되는 작업 지정 상자에 PutObject를 입력한 다음, PutObject를 선택합니다.

9.    GetObject를 입력한 다음, GetObject를 선택합니다.

10.    리소스를 확장한 다음, 특정을 선택합니다.

11.    ARN 추가를 선택합니다.

12.    버킷 이름에 귀하의 버킷 이름을 입력합니다. 해당하는 경우 접두사를 포함하세요.

13.    객체 이름에 객체 이름을 입력합니다.
참고: 버킷 이름은 업로드된 파일의 위치를 지정합니다. 객체 이름은 정책 조정을 위해 객체가 준수해야 하는 패턴을 지정합니다. 자세한 내용은 버킷 이름 지정 규칙 Amazon S3 객체 개요를 참조하세요.

14.    추가를 선택합니다.

15.    (선택 사항) 다음: 태그를 선택하여 태그를 추가하세요.

16.    다음: 검토를 선택합니다.

17.    이름에 정책 이름을 입력합니다.

18.    정책 생성을 선택합니다.

19.    정책 검색 상자에 17단계에서 생성한 정책의 이름을 입력한 다음 정책을 선택하세요.

20.    정책 작업을 선택한 다음 연결을 선택합니다. IAM 역할 목록이 나타납니다.

21.    이전에 생성한 API Gateway 역할을 검색합니다. 그런 다음 해당 역할을 선택합니다.

22.    정책 연결을 선택합니다.

API Gateway REST API 생성

요청을 처리하기 위한 API 생성

1.    API Gateway 콘솔을 엽니다.

2.    탐색 창에서 API를 선택합니다.

3.    API 생성을 선택합니다.

4.    API 유형 선택 섹션에서 REST API에 대해 구축을 선택합니다.

5.    API 이름에 API 이름을 입력한 후 다음을 선택합니다.

6.    API 생성을 선택합니다.

API용 리소스 생성

1.    API 페이지의 리소스 패널에서 **/**를 선택합니다.

2.    작업에서 리소스 생성을 선택합니다.

3.    리소스 이름에서 folder를 입력합니다.

4.    리소스 경로에서 **{folder}**를 입력합니다.

5.    리소스 생성을 선택합니다.

6.    리소스 패널에서 5단계에서 생성한 /{folder} 리소스를 선택하세요.

7.    작업를 선택한 다음, 리소스 생성을 선택합니다.

8.    리소스 이름에서 object를 입력합니다.

9.    리소스 경로에서 **{object}**를 입력합니다.

10.    리소스 생성을 선택합니다.

이미지 또는 PDF 업로드를 위한 API용 PUT 메서드 생성

1.    작업를 선택한 다음, 메서드 생성을 선택합니다.

2.    드롭다운 목록에서 PUT를 선택한 다음 확인 표시 아이콘을 선택합니다.

3.    통합 유형 카테고리에서 AWS 서비스를 선택합니다.

4.    AWS 리전에서 us-east-1 또는 버킷 속성 페이지에 보이는 AWS 리전을 선택합니다.

5.    AWS 서비스에서 **Simple Storage Service(S3)**를 선택합니다.

6.    AWS 하위 도메인은 비워 두세요.

7.    HTTP 메서드에서 PUT를 선택합니다.

8.    작업 유형에서 경로 재정의 사용을 선택합니다.

9.    **경로 재정의(선택 사항)**에서 **{bucket}/{key}**를 입력합니다.

10.    실행 역할에서 이전에 생성한 IAM 역할의 ARN을 입력합니다. ARN 생성은 IAM 정책을 생성하여 API Gateway 역할에 연결 섹션의 일부입니다.

11.    콘텐츠 처리에서 패스스루를 선택합니다.

12.    저장을 선택합니다.

PUT 메서드에 대한 파라미터 매핑 구성

1.    API 페이지의 리소스 패널에서 PUT를 선택합니다.

2.    통합 요청을 선택합니다.

3.    URL 경로 파라미터를 확장합니다.

4.    경로 추가를 선택합니다.

5.    이름bucket을 입력합니다.

6.    다음에서 매핑됨method.request.path.folder를 입력합니다.

7.    해당 행 끝에 있는 체크 표시 아이콘을 선택합니다.

8.    4~7단계를 반복합니다. 5단계에서 이름로 설정합니다. 6단계에서 다음에서 매핑됨method.request.path.object로 설정합니다.

이미지 검색을 위한 API용 GET 메서드 생성

1.    API 페이지의 리소스 패널에서 **/{object}**를 선택합니다.

2.    작업를 선택한 다음, 메서드 생성을 선택합니다.

3.    드롭다운 목록에서 GET을 선택한 다음 확인 표시 아이콘을 선택합니다.

4.    통합 유형 카테고리에서 AWS 서비스를 선택합니다.

5.    AWS 리전에서 us-east-1 또는 버킷 속성 페이지에 보이는 리전을 선택합니다.

6.    AWS 서비스에서 **Simple Storage Service(S3)**를 선택합니다.

7.    AWS 하위 도메인은 비워 두세요.

8.    HTTP 메서드에서 GET을 선택합니다.

9.    작업 유형에서 경로 재정의 사용을 선택합니다.

10.    **경로 재정의(선택 사항)**에서 **{bucket}/{key}**를 입력합니다.

11.    실행 역할에서 이전에 생성한 IAM 역할의 ARN을 입력합니다. ARN 생성은 IAM 정책을 생성하여 API Gateway 역할에 연결 섹션의 일부입니다.

12.    콘텐츠 처리에서 패스스루를 선택합니다.

13.    저장을 선택합니다.

GET 메서드에 대한 파라미터 매핑 구성

1.    API 페이지의 리소스 패널에서 GET을 선택합니다.

2.    통합 요청을 선택합니다.

3.    URL 경로 파라미터를 확장합니다.

4.    경로 추가를 선택합니다.

5.    이름bucket을 입력합니다.

6.    다음에서 매핑됨method.request.path.folder를 입력합니다.

7.    해당 행 끝에 있는 체크 표시 아이콘을 선택합니다.

8.    4~7단계를 반복합니다. 5단계에서 이름로 설정합니다. 6단계에서 다음에서 매핑됨method.request.path.object로 설정합니다.

브라우저에서 이미지 또는 PDF를 볼 수 있도록 응답 매핑을 설정

1.    API 페이지의 리소스 패널에서 GET을 선택합니다.

2.    메서드 응답을 선택합니다.

3.    200을 확장합니다.

4.    200에 대한 응답 본문에서 application/json을 제거합니다.

5.    200에 대한 응답 헤더에서 헤더 추가를 선택합니다.

6.    이름에서 content-type을 입력합니다.

7.    체크 표시 아이콘을 선택하여 저장합니다.

8.    메서드 실행을 선택하여 메서드 실행 창으로 돌아갑니다.

9.    통합 응답을 선택합니다.

10.    **200,**을 확장한 다음 헤더 매핑을 확장합니다.

11.    content-type이라는 이름의 행 끝에 있는 연필 아이콘을 선택합니다.

12.    이미지 파일을 보려면 **'image/jpeg'**을 입력하세요.
-또는-
**'application/pdf'**를 입력하여 PDF 파일을 봅니다.

API용 바이너리 미디어 유형 설정

1.    API 페이지의 탐색 창에서 설정을 선택합니다.

2.    이진 미디어 유형 섹션에서 이진 미디어 유형 추가를 선택합니다.

3.    텍스트 상자에서 */* 문자열을 추가합니다.
참고: 문자열을 따옴표로 묶지 마세요. 이진 미디어 유형으로 취급하려는 특정 다목적 인터넷 전자 우편(MIME) 유형을 와일드카드로 대체할 수 있습니다. 예를 들어 API Gateway에서 JPEG 이미지를 이진 미디어 유형으로 처리하도록 하려면 **'image/jpeg'**를 선택합니다. */*를 추가하면 API Gateway는 모든 미디어 유형을 이진 미디어 유형으로 취급합니다.

4.    변경 사항 저장을 선택합니다.

API용 이진 설정으로 CORS 오류 해결

1.    앞에서 설명한 API(PUT 및 GET)를 웹 애플리케이션에서 사용하는 경우 CORS 오류가 발생할 수 있습니다. 자세한 내용은 Mozilla 웹 사이트에서의 CORS 오류를 참조하세요.

2.    이진 설정이 켜진 상태에서 CORS 오류를 해결하려면 API Gateway 콘솔에서 CORS를 시작합니다.

3.    API 페이지의 리소스 패널에서 **/{object}**를 선택합니다.

4.    작업에서 CORS 활성화를 선택합니다.

5.    CORS 활성화 및 기존의 CORS 헤더 대체를 선택합니다.

6.    콘텐츠 처리 속성을 업데이트하려면 update-integration CLI 명령을 실행합니다. 이번 업데이트를 통해 이진 콘텐츠가 모의 통합으로 실행 전 옵션 요청을 처리할 수 있습니다.

7.    API ID, 리소스 ID 및 AWS 리전을 업데이트하여 다음 두 CLI 명령을 실행합니다. API ID 및 리소스 ID를 가져오려면 Gateway API 콘솔 상단에서 {object} 리소스를 선택합니다.

aws apigateway update-integration --rest-api-id API_ID --resource-id RESOURCE_id --http-method OPTIONS --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT' --region AWS_REGION
aws apigateway update-integration-response --rest-api-id API_ID --resource-id RESOURCE_id --http-method OPTIONS --status-code 200 --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT' --region AWS_REGION

API 배포

1.    API 페이지의 탐색 창에서 리소스를 선택합니다.

2.    리소스 창에서 작업을 선택한 다음, API 배포를 선택합니다.

3.    API 배포 창에서 배포 단계에서 **[New Stage]**를 선택합니다.

4.    스테이지 이름v1을 입력합니다.

5.    배포를 선택합니다.

6.    탐색 창에서 스테이지를 선택합니다.

7.    v1 스테이지를 선택합니다. 배포된 API 스냅샷에 요청하기 위한 호출 URL이 나타납니다.

8.    이 호출 URL을 복사합니다.

참고: 자세한 내용은 Amazon API Gateway에서 REST API 배포를 참조하세요.

API를 호출하여 S3에 이미지 파일을 업로드

객체의 버킷 이름과 파일 이름을 API의 호출 URL에 추가합니다. 그런 다음 선택한 클라이언트로 PUT HTTP 요청을 합니다. 예를 들어 Postman 외부 애플리케이션의 경우 드롭다운에서 PUT 메서드를 선택합니다. 본문을 선택한 다음, 바이너리를 선택합니다. 파일 선택 버튼이 나타나면 업로드할 로컬 파일을 선택합니다.

자세한 내용은 Amazon API Gateway에서 REST API 호출을 참조하세요.

이미지 또는 PDF를 업로드하기 위해 PUT HTTP 요청을 보내는 curl 명령 예시

다음 예시에서 abc12345은 귀하의 API ID이고, testfolder는 S3 버킷 그리고 testimage.jpeg는 업로드하는 로컬 파일입니다.

curl -i --location --request PUT 'https://abc12345.execute-api.us-west-2.amazonaws.com/v1/testfolder/testimage.jpeg' --header 'Content-Type: text/plain' --data-binary '@/Path/to/file/image.jpeg'

중요:*****/*이 이진 미디어 유형 목록에 포함된 경우, PUT 요청을 통해 파일을 업로드할 수 있습니다. image.jpeg가 이진 미디어 유형 목록에 포함된 경우 PUT 요청에 Content-Type 헤더를 추가해야 합니다. Content-Type 헤더를 **'image/jpeg'**로 반드시 설정해야 합니다.

이제 동일한 URL로 웹 브라우저에서 이미지나 PDF를 볼 수 있습니다. 웹 브라우저가 GET 요청을 하기 때문입니다.

관련 정보

API Gateway REST API를 사용하여 이진 지원 활성화