AWS Lambda - API Gateway로 S3 파일 업로드 API 만들기 #2 - API Gateway, S3 셋팅


안녕하세요. 남산돈가스입니다.

지난 포스팅에 이어 오늘은 두번째 시간인 API Gateway와 S3 셋팅을 진행해보겠습니다.

먼저 API Gateway 콘솔로 이동해서 새로운 API Gateway를 생성합니다.


그 다음 API URL에 매칭 될 리소스를 생성합니다. 저 같은 경우는 리소스 명을 fileUpload로 생성했습니다.
 리소스는 실제 API Gateway가 배포가 되면 엔드포인트 URL이 발급되는데 그 해당 {{URL}}/리소스명 으로 API 요청을 보내면 해당 리소스 내의 매서드들을 호출할 수 있게 됩니다.


리소스까지 생성이 되었다면, 해당 리소스에 대한 매서드는 다음시간에 다루어보기로 하고,
왼쪽 탭에 이진지원이라는 탭을 선택하시고 이진 미디어 형식에 'multipart/form-data'를 추가합니다.

  • multipart/form-data
이 이진 미디어를 추가해준 이유는 해당 형식, 즉, multipart폼 형식으로 요청을 보낸 파일들을 API Gateway에서 받으면 자체적으로 파일데이터를 이진 바이너리 형식으로 변환하여 처리해준다는 것을 의미합니다. 

개인적으로 이 부분을 알지못해서 많은 시간동안 헤맸던 기억이 납니다..ㅠ



여기까지 설정을 모두 마쳤다면, Lambda 함수 연결 전의 API Gateway 설정은 모두 마쳤습니다.

그럼 다음으로, 실제 파일이 업로드 될 스토리지인 S3의 권한 설정을 해보겠습니다.

S3 콘솔로 이동하여 파일이 업로드 될 버킷을 선택합니다.

해당 버킷화면에서 권한 탭을 선택하시고 버킷 정책 메뉴를 선택합니다.
아래와 같이 권한을 부여합니다.


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::upload.ibksplatform.com/*"
        }
    ]
}

버킷정책을 설정 한 뒤 CORS 구성 탭을 선택하여 아래와 같이 입력합니다.


<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>

이렇게 버킷정책과 CORS구성을 수정하면 S3 설정까지 모두 완료된 것입니다.

간단하게 설정하자면 버킷 정책은 해당 s3의 모든 정책권한에 대해 허용한다는 것을 의미하고,

CORS구성은 어떤 곳에서의 요청이던지 PUT, POST, GET, HEAD 매서드로 요청오는 것을 허용한다는 것을 의미합니다.

이번 포스팅까지해서 Lambda 함수를 생성하고, API Gateway와 S3의 기본 설정들을 마쳤습니다.
이제 다음 포스팅에서 실제 업로드 기능을 연동하고 테스트하는 시간으로 포스팅을 마무리하겠습니다.

감사합니다.

댓글

주간 인기글

남산 케이블카 이야기

Kotlin, Java 그 다음?

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

[Angular] 모델, 값이 바뀌었는데 화면 template 이 업데이트 되지 않을 때 조치 팁

안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기