Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
API Gateway를 통해 Amazon S3에 이미지 또는 PDF 파일을 업로드하려면 어떻게 해야 합니까?
Amazon API Gateway를 사용하여 Amazon Simple Storage Service(S3)에 이미지 또는 PDF 파일을 업로드하고 검색하려고 합니다.
간략한 설명
API Gateway를 사용하여 이미지 또는 PDF를 Amazon S3 버킷에 바이너리 파일로 업로드하려면 바이너리 지원을 활성화합니다.
S3 버킷에 API Gateway 액세스 권한을 부여하려면 AWS Identity and Access Management(IAM) 역할을 생성합니다. IAM 역할에는 API Gateway가 S3 버킷에서 PutObject 및 GetObject 작업을 수행할 수 있는 권한이 포함되어야 합니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
API Gateway에 대한 IAM 역할 생성
다음 단계를 완료합니다.
- IAM 콘솔을 엽니다.
- 탐색 창에서 역할을 선택합니다.
- 역할 생성을 선택합니다.
- 신뢰할 수 있는 엔터티 유형 선택 섹션에서 AWS 서비스를 선택합니다.
- 서비스 또는 사용 사례 섹션에서 API Gateway를 선택합니다.
- 사용 사례 섹션에서 API Gateway를 선택합니다.
- 다음을 선택합니다.
- 역할 이름에 정책 이름을 입력합니다. 예를 들어 api-gateway-upload-to-s3를 입력합니다.
- (선택 사항) IAM 역할에 태그를 추가합니다.
- 역할 생성을 선택합니다.
IAM 정책을 생성하여 API Gateway 역할에 연결
다음 단계를 완료합니다.
- IAM 콘솔을 엽니다.
- 탐색 창에서 역할을 선택합니다.
- 검색 상자에 API Gateway의 IAM 역할 이름을 입력한 다음 역할 이름 열에서 역할을 선택합니다.
- 역할 세부 정보 페이지 탭에서 권한 추가를 선택합니다.
- 인라인 정책 생성을 선택합니다.
- 시각적 편집기 탭의 서비스 선택 섹션에서 서비스 선택을 선택합니다.
- S3를 입력한 다음, S3를 선택합니다.
- 서비스에서 허용되는 작업 지정 상자에 PutObject를 입력한 다음, PutObject를 선택합니다.
- GetObject를 입력한 다음, GetObject를 선택합니다.
- 리소스를 확장한 다음, 특정을 선택합니다.
- ARN 추가를 선택합니다.
- 리소스 버킷 이름에 버킷 이름을 입력합니다. 해당하는 경우 접두사를 포함하십시오.
- 리소스 객체 이름에 객체 이름을 입력합니다.
참고: 버킷 이름은 업로드된 파일의 위치를 지정합니다. 객체 이름은 정책 조정을 위해 객체가 준수해야 하는 패턴을 지정합니다. 자세한 내용은 범용 버킷 이름 지정 규칙 및 Amazon S3 객체 개요를 참조하십시오. - ARN 추가를 선택합니다.
- 다음을 선택합니다.
- 이름에 정책의 이름을 입력합니다.
- 정책 생성을 선택합니다.
API Gateway REST API 생성
요청을 전달하는 API를 생성하려면 다음 단계를 완료합니다.
- API Gateway 콘솔을 엽니다.
- 탐색 창에서 API를 선택합니다.
- API 생성을 선택합니다.
- API 유형 선택 섹션에서 REST API에 대해 빌드를 선택합니다.
- API 이름에 API 이름을 입력하고, API 생성을 선택합니다.
API의 리소스를 생성하려면 다음 단계를 완료합니다.
- API 페이지의 리소스 패널에서 / 항목을 선택합니다.
- 리소스 생성을 선택합니다.
- 리소스 경로에서 / 항목을 선택합니다.
- 리소스 경로에서 **{folder}**를 입력합니다.
- 리소스 생성을 선택합니다.
- 리소스 패널에서 /{folder} 리소스를 선택합니다.
- 리소스 생성을 선택합니다.
- 리소스 경로에 **/{folder}/**를 입력합니다.
- 리소스 이름에 **{object}**를 입력합니다.
- 리소스 생성을 선택합니다.
API에서 이미지 또는 PDF 파일을 업로드하는 PUT 메서드를 생성하려면 다음 단계를 완료합니다.
- 메서드 섹션에서 메서드 생성을 선택합니다.
- 메서드 유형에서 PUT을 선택합니다.
- 통합 유형 카테고리에서 AWS 서비스를 선택합니다.
- AWS 리전에서 us-east-1 또는 버킷 속성 페이지에 보이는 AWS 리전을 선택합니다.
- AWS 서비스에서 **Simple Storage Service(S3)**를 선택합니다.
- AWS 하위 도메인은 비워 두십시오.
- HTTP 메서드에서 PUT을 선택합니다.
- 작업 유형에서 경로 재정의 사용을 선택합니다.
- **경로 재정의(선택 사항)**에서 **{bucket}/{key}**를 입력합니다.
- 실행 역할에는 IAM 역할의 ARN을 입력합니다.
- 콘텐츠 처리에서 패스스루를 선택합니다.
- 메서드 생성을 선택합니다.
PUT 메서드에 대한 파라미터 매핑 구성
다음 단계를 완료합니다.
- API 페이지의 리소스 패널에서 PUT을 선택합니다.
- 통합 요청을 선택하고, 편집을 선택합니다.
- URL 경로 파라미터를 확장합니다.
- 경로 파라미터 추가를 선택합니다.
- 이름에 bucket을 입력합니다.
- 다음에서 매핑됨에 method.request.path.folder를 입력합니다.
- 4~6단계를 반복합니다.
5단계에서 이름을 key로 설정합니다.
6단계에서 다음에서 매핑됨을 method.request.path.object로 설정합니다. - 저장을 선택합니다.
API의 GET 메서드를 생성하여 이미지 검색
다음 단계를 완료합니다.
- API 페이지의 리소스 패널에서 **/{object}**를 선택합니다.
- 메서드 섹션에서 메서드 생성을 선택합니다.
- 메서드 유형에서 GET을 선택합니다.
- 통합 유형 카테고리에서 AWS 서비스를 선택합니다.
- AWS 리전에서 us-east-1 또는 버킷 속성 페이지에 표시되는 리전을 선택합니다.
- AWS 서비스에서 **Simple Storage Service(S3)**를 선택합니다.
- AWS 하위 도메인은 비워 두십시오.
- HTTP 메서드에서 GET을 선택합니다.
- 작업 유형에서 경로 재정의 사용을 선택합니다.
- **경로 재정의(선택 사항)**에서 **{bucket}/{key}**를 입력합니다.
- 실행 역할에는 IAM 역할의 ARN을 입력합니다.
- 콘텐츠 처리에서 패스스루를 선택합니다.
- 메서드 생성을 선택합니다.
GET 메서드에 대한 파라미터 매핑 구성
다음 단계를 완료합니다.
- API 페이지의 리소스 패널에서 GET을 선택합니다.
- 통합 요청을 선택하고, 편집을 선택합니다.
- URL 경로 파라미터를 확장합니다.
- 경로 매개변수 추가를 선택합니다.
- 이름에 bucket을 입력합니다.
- 다음에서 매핑됨에 method.request.path.folder를 입력합니다.
- 4~6단계를 반복합니다.
5단계에서 이름을 key로 설정합니다.
6단계에서 다음에서 매핑됨을 method.request.path.object로 설정합니다. - 저장을 선택합니다.
브라우저에서 이미지 또는 PDF를 볼 수 있도록 응답 매핑을 설정
다음 단계를 완료합니다.
- API 페이지의 리소스 패널에서 GET을 선택합니다.
- 메서드 응답을 선택합니다.
- 응답 200에서 편집을 선택합니다.
- 응답 본문에서 application/json을 제거합니다.
- 헤더 이름에서 헤더 추가를 선택합니다.
- 이름에 content-type을 입력합니다.
- 저장을 선택합니다.
- 통합 응답을 선택하고, 편집을 선택합니다.
- 메서드 응답 상태 코드 200의 경우 이미지 파일에 image/jpeg를 입력하고 PDF 파일에 application/pdf를 입력합니다.
- 저장을 선택합니다.
API의 바이너리 미디어 유형 설정
다음 단계를 완료합니다.
- API 페이지의 탐색 창에서 API 설정을 선택합니다.
- 바이너리 미디어 유형 섹션에서 미디어 유형 관리를 선택합니다.
- 바이너리 미디어 유형 추가를 선택하고, 텍스트 상자에 / 문자열을 추가합니다.
참고: 문자열을 따옴표로 묶지 마십시오. 바이너리 미디어 유형으로 관리하려는 특정 다목적 인터넷 전자 우편(MIME) 유형을 와일드카드로 대체할 수 있습니다. 예를 들어 API Gateway에서 JPEG 이미지를 이진 미디어 유형으로 관리하도록 하려면 image/jpeg를 선택합니다. */*를 추가하면 API Gateway는 모든 미디어 유형을 바이너리 미디어 유형으로 관리합니다. - 변경 사항 저장을 선택합니다.
API의 바이너리 설정으로 CORS 오류 해결
참고: 웹 애플리케이션에서 PUT 및 GET API를 사용하는 경우 CORS 오류가 발생할 수 있습니다. 자세한 내용은 Mozilla 웹 사이트에서의 CORS 오류를 참조하십시오.
바이너리 설정을 켠 상태에서 CORS 오류를 해결하려면 다음 단계를 완료합니다.
-
API Gateway 콘솔을 엽니다.
-
API를 선택합니다.
-
CORS를 활성화합니다.
-
API 페이지의 리소스 패널에서 **/{object}**를 선택합니다.
-
CORS 활성화를 선택합니다.
-
게이트웨이 응답에서 Default 4xx, Default 5xx를 선택하고, Access-Control-Allow-Methods에서 GET, PUT을 선택합니다.
-
저장을 선택합니다.
-
다음 update-integration 명령을 실행합니다.
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
참고: rest-api-id를 REST API ID로, RESOURCE_id를 리소스 ID로, AWS_REGION을 리전으로 바꾸십시오. API Gateway에서 옵션 요청을 실행하려면 update-integration 및 update-integration-response를 차례로 실행해야 합니다.
-
다음 update-integration-response 명령을 실행합니다.
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
참고: rest-api-id를 REST API ID로, RESOURCE_id를 리소스 ID로, AWS_REGION을 리전으로 바꾸십시오.
API 배포
다음 단계를 완료합니다.
- API 페이지의 탐색 창에서 리소스를 선택합니다.
- API 배포를 선택합니다.
- API 배포 창의 스테이지에서 **[New Stage]**를 선택합니다.
- 스테이지 이름에 v1을 입력합니다.
- 배포를 선택합니다.
- 탐색 창에서 스테이지를 선택합니다.
- v1 스테이지를 선택합니다.
- 표시되는 호출 URL을 기록해 둡니다.
자세한 내용은 API Gateway에서 REST API 배포를 참조하십시오.
REST API를 호출하여 S3에 이미지 파일 업로드
다음 단계를 완료합니다.
- API의 호출 URL에 버킷 이름과 객체의 파일 이름을 추가합니다.
- 선호하는 클라이언트를 사용하여 PUT HTTP 요청을 만듭니다. 예를 들어 Postman 웹사이트에서 Postman을 다운로드하고 사용할 수 있습니다.
- 본문을 선택하고, 바이너리를 선택합니다. 파일 선택 버튼이 표시되면 업로드할 로컬 파일을 선택합니다.
다음은 이미지 또는 PDF를 업로드하기 위한 PUT HTTP 요청을 만들기 위해 실행할 수 있는 curl 명령의 예시입니다.
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'
참고: abc12345를 API ID로, testfolder를 S3 버킷으로, testimage.jpeg를 업로드하는 로컬 파일로 바꾸십시오.
*/*이 바이너리 미디어 유형 목록에 포함된 경우 PUT 요청을 통해 파일을 업로드할 수 있습니다. image.jpeg가 바이너리 미디어 유형 목록에 포함된 경우 PUT 요청에 Content-Type 헤더를 추가하고, image/jpeg로 설정합니다. 웹 브라우저가 GET 요청을 하기 때문에 웹 브라우저에서 동일한 URL로 이미지 또는 PDF를 볼 수 있습니다.
관련 정보

관련 콘텐츠
- 질문됨 2달 전lg...
- 질문됨 2년 전lg...
- 질문됨 2년 전lg...
- 질문됨 5달 전lg...
- 질문됨 7달 전lg...