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

최종 업데이트 날짜: 2022년 12월 20일

Amazon API Gateway를 통해 이미지 또는 PDF 파일을 Amazon Simple Storage Service(S3)에 업로드하고 싶습니다. 또한 이미지 또는 PDF 파일 검색도 하고 싶습니다. 이러한 작업을 수행하려면 어떻게 해야 하나요?

간략한 설명

API Gateway를 사용하여 이미지 또는 PDF를 이진 파일로 S3 버킷에 업로드하려면 API Gateway를 사용하여 이진 지원을 활성화하세요.

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

해결 방법

API Gateway에 대한 IAM 역할 만들기

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 [Roles]를 선택합니다.

3.    역할 생성(Create Role)을 선택합니다.

4.    [Select type of trusted entity] 섹션에서 [AWS 서비스]를 선택합니다.

5.    Choose a use case(사용 사례 선택) 섹션에서 API Gateway를 선택합니다.

6.    Select your use case(사용 사례 선택) 섹션에서 API Gateway를 선택합니다.

7.    Next: Permissions(다음: 권한)을 선택합니다.

참고: 이 섹션에서는 API Gateway가 로그를 사용자 계정으로 푸시하도록 허용하는 AWS 관리형 서비스를 보여줍니다. 나중에 Amazon 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.    Roles detail page(역할 세부 정보 페이지) 탭에서 Add permissions(권한 추가)를 선택합니다.

5.    Create inline policy(인라인 정책 생성)를 선택합니다.

6.    Visual editor(비주얼 편집기) 탭의 Select a service(서비스 선택) 섹션에서 Choose a service(서비스 선택)를 선택합니다.

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

8.    Specify the actions allowed in S3(S3에 허용되는 작업 지정) 상자에 PutObject를 입력한 다음 PutObject를 선택합니다.

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

10.    Resources(리소스)를 확장한 다음 Specific(특정)을 선택합니다.

11.    Add ARN(ARN 추가)을 선택합니다.

12.    Bucket name(버킷 이름)에 버킷 이름을 입력합니다. 해당하는 경우 접두어를 포함합니다.

13.    Object name(객체 이름)에 객체 이름을 입력합니다.

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

14.    Add(추가)를 선택합니다.

15.    Next: Tags(다음: 태그)를 선택하여 태그를 추가한 후(선택 사항) Next: Review(다음: 검토)를 선택합니다.

16.    Name(이름)에 정책 이름을 입력합니다.

17.    [Create policy]를 선택합니다.

18.    정책 검색 상자에 앞에서 17단계에서 생성한 정책의 이름을 입력한 다음 해당 정책을 선택합니다.

19.    Policy actions(정책 작업)을 선택하고 Attach(연결)을 선택합니다. IAM 역할 목록이 표시됩니다.

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

21.    Attach policy(정책 연결)를 선택합니다.

API Gateway REST API 생성

요청을 처리하는 API 생성

1.    API Gateway 콘솔을 엽니다.

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

3.    API 생성(Create API)을 선택합니다.

4.    Choose an API type(API 유형 선택) 섹션의 REST API에서 Build(빌드)를 선택합니다.

5.    API Name(API 이름)에 API의 이름을 입력하고 Next(다음)를 선택합니다.

6.    Create API(API 생성)를 선택합니다.

API에 대한 리소스 생성

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

2.    Actions(작업)에서 Create Resource(리소스 생성)를 선택합니다.

3.    Resource Name(리소스 이름)에 folder(폴더)를 입력합니다.

4.    Resource Path(리소스 경로)에 {folder}를 입력합니다.

5.    Create Resource(리소스 생성)를 선택합니다.

6.    Resources(리소스) 패널에서 5단계에서 만든 /{folder} 리소스를 선택합니다.

7.    Actions(작업)를 선택한 다음 Create Resource(리소스 생성)를 선택합니다.

8.    Resource Name(리소스 이름)에 object를 입력합니다.

9.    Resource Path(리소스 경로)에 {object}를 입력합니다.

10.    Create Resource(리소스 생성)를 선택합니다.

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

1.    Actions(작업)를 선택한 다음 Create Method(메서드 생성)를 선택합니다.

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

3.    Integration type(통합 유형) 범주에서 AWS Service(AWS 서비스)를 선택합니다.

4.    AWS Region(AWS 리전)에서 us-east-1 또는 Bucket properties(버킷 속성) 페이지에 표시된 AWS 리전을 선택합니다.

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

6.    AWS Subdomain(AWS 서브 도메인)을 공백으로 비워 둡니다.

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

8.    작업 유형(Action Type)에 경로 재정의 사용(Use path override)을 선택합니다.

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

10.    Execution role(실행 역할)에 앞서 생성한 IAM 역할의 Amazon 리소스 이름(ARN)을 입력합니다. ARN 생성은 Create and attach an IAM policy to the API Gateway role(IAM 정책 생성 및 API Gateway 역할에 연결) 섹션의 일부입니다.

11.    Content Handling(내용 처리)에 Passthrough(통과)를 선택합니다.

12.    Save(저장)를 선택합니다.

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

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

2.    Integration Request(통합 요청)를 선택합니다.

3.    URL Path Parameters(URL 경로 파라미터)를 확장합니다.

4.    Add path(경로 추가)를 선택합니다.

5.    Name(이름)에 버킷을 입력합니다.

6.    Mapped from(매핑된 위치)에 method.request.path.folder를 입력합니다.

7.    행 끝에 있는 확인 표시 아이콘을 선택합니다.

8.    4~7단계를 반복합니다. 5단계에서 [이름(Name)]을 key로 설정합니다. 6단계에서 Mapped from(매핑 원본)에 method.request.path.object를 선택합니다.

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

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

2.    Actions(작업)를 선택한 다음 Create Method(메서드 생성)를 선택합니다.

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

4.    Integration type(통합 유형) 범주에서 AWS Service(AWS 서비스)를 선택합니다.

5.    AWS Region(AWS 리전)에서 us-east-1 또는 Bucket properties(버킷 속성) 페이지에 표시된 리전을 선택합니다.

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

7.    AWS Subdomain(AWS 서브 도메인)을 공백으로 비워 둡니다.

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

9.    Action Type(작업 유형)에서 Use path override(경로 재정의 사용)를 선택합니다.

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

11.    Execution role(실행 역할)에 앞서 생성한 IAM 역할의 Amazon 리소스 이름(ARN)을 입력합니다. ARN 생성은 Create and attach an IAM policy to the API Gateway role(IAM 정책 생성 및 API Gateway 역할에 연결) 섹션의 일부입니다.

12.    Content Handling(내용 처리)에 Passthrough(통과)를 선택합니다.

13.    Save(저장)를 선택합니다.

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

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

2.    Integration Request(통합 요청)를 선택합니다.

3.    URL Path Parameters(URL 경로 파라미터)를 확장합니다.

4.    Add path(경로 추가)를 선택합니다.

5.    Name(이름)에 버킷을 입력합니다.

6.    Mapped from(매핑된 위치)에 method.request.path.folder를 입력합니다.

7.    행 끝에 있는 확인 표시 아이콘을 선택합니다.

8.    4~7단계를 반복합니다. 5단계에서 [이름(Name)]을 key로 설정합니다. 6단계에서 Mapped from(매핑 원본)에 method.request.path.object를 선택합니다.

브라우저에서 이미지 또는 PDF를 보기 위한 응답 매핑 설정

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

2.    Method Response(메서드 응답)를 선택합니다.

3.    200을 확장합니다.

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

5.    Response headers for 200(200에 대한 응답 헤더)에서 Add header(헤더 추가)를 선택합니다.

6.    Name(이름)에 content-type을 입력합니다.

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

8.    Method Execution(메서드 실행) 창으로 돌아가려면 Method execution(메서드 실행)을 선택합니다.

9.    Integration Response(통합 응답)를 선택합니다.

10.    200을 확장한 다음 Header Mappings(헤더 매핑)를 확장합니다.

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

12.    이미지 파일을 보려면 image/jpeg를 입력합니다.
또는
PDF 파일을 보려면 application/pdf를 입력합니다.

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

1.    API 페이지의 탐색 창에서 Settings(설정)를 선택합니다.

2.    Binary Media Types(이진 미디어 유형) 섹션에서 Add Binary Media Type(이진 미디어 유형 추가)을 선택합니다.

3.    텍스트 상자에 */* 문자열을 추가합니다.

참고: 문자열을 따옴표로 묶지 마세요. 이진 미디어 유형으로 처리하려는 특정 Multipurpose Internet Mail Extensions(MIME) 유형을 와일드카드로 대체할 수 있습니다. 예를 들어 API Gateway가 JPEG 이미지를 이진 미디어 유형으로 처리하도록 하려면 “image/jpeg”을 선택합니다. */*를 추가하면 API Gateway는 모든 미디어 유형을 이진 미디어 유형으로 처리합니다.

4.    Save Changes(변경 내용 저장)를 선택합니다.

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

1.    웹 애플리케이션에서 앞서 언급한 API(PUT 및 GET)를 사용하려는 경우 CORS 오류가 발생할 수 있습니다.

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

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

4.    Actions(작업)에서 Enable CORS(CORS 사용 설정)을 선택합니다.

5.    Enable CORS and replace existing CORS headers(CORS 사용 설정 및 기존 CORS 헤더 교체)를 선택합니다.

6.    통합 CLI 명령 업데이트를 사용하여 콘텐츠 처리 속성을 업데이트합니다. 이 업데이트를 통해 모의 통합으로 사전 옵션 요청에 대한 이진 콘텐츠를 처리할 수 있습니다.

7.    API ID, 리소스 ID, AWS 리전을 업데이트하여 뒤따르는 두 개의 CLI 명령을 실행합니다. {object} 리소스를 선택하면 게이트웨이 API 콘솔 상단에서 API ID 및 리소스 ID를 얻을 수 있습니다.

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 페이지의 탐색 창에서 Resources(리소스)를 선택합니다.

2.    Resources(리소스) 창에서 Actions(작업)를 선택하고 Deploy API(API 배포)를 선택합니다.

3.    Deploy API(API 배포) 창의 Deployment stage(배포 단계)에서 New Stage(새 단계)를 선택합니다.

4.    Stage name(단계 이름)에 v1을 입력합니다.

5.    배포를 선택합니다.

6.    탐색 창에서 Stages(단계)를 선택합니다.

7.    v1 단계를 선택합니다. 배포된 API 스냅샷에 요청하기 위한 호출 URL이 표시됩니다.

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

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

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

객체의 버킷 이름과 파일 이름을 API의 호출 URL에 추가합니다. 그런 다음 원하는 클라이언트를 사용하여 PUT HTTP 요청을 만듭니다. 예를 들어 Postman 애플리케이션의 경우, 드롭다운에서 PUT method(PUT 메서드)를 선택합니다. Body(본문)를 선택한 다음 binary(이진)를 선택합니다. Select File(파일 선택) 버튼이 표시되면 업로드할 로컬 파일을 선택합니다.

자세한 내용은 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로 설정해야 합니다.

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


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


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