0. 서론
클라우드는 분명 개발자에게 도움이 되는 스킬이지만 비용이 발생한다. 기본적으로 개발자는 API-GW - Lambda 구조를 많이 사용하는데 API-GW의 기능을 이용하면 굳이 Lambda를 사용하지 않고 바로 S3로 파일을 업로드 할 수 있다.
1. 기술 아키텍처
2. 기술 스택
- Client: React
- Server Side: AWS (API Gateway)
3. 구현 방법
- API Gateway에서 API 생성 (Create API)
- REST API 선택하고 [Build] 클릭
- 원하는 API 이름을 입력하고 [Create API] 클릭
- [Create Resource]를 클릭해 리소스를 생성
- 필자는 URL 경로를 버킷이름/오브젝트 형태로 받을 것이기 때문에 아래와 같이 리소스 생성 예정
- CORS Enable 미리 체크하는 것 잊지 말기 (나중에 bucket 하위에 메소드를 추가할 수 있기 때문에 추가하는것임, 지금 보는 단순 업로드를 위해서는 필요 없음)
- 위와 같이 생성하면 {bucket}/{object} 경로 형태로 URL 경로를 입력해서 접근할 수 있음
- 이제 생성된 {object} 리소스 하위에 PUT 메소드를 생성해 연결해야 함
- 우측 하단의 [Create method] 클릭
- 아래와 같이 입력
- Method Type: PUT
- Integration type: AWS service (S3 연결, 이 기능을 이용하면 굳이 Lambda를 생성해서 연결할 필요 없음)
- AWS Region: 원하는 리전
- AWS Service: S3
- HTTP method: PUT
- Action Type: Use path override (경로를 유저 입력 값으로 덮어씀) : {bucket}/{object}
- Execution role : IAM Role 연결
- 연결된 Policy
- 연결된 Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::S3 버킷 이름/*"
]
}
]
}
- Integration request 수정
- Path override - optional 경로 설정 ({bucket}/{object} 형식으로 구성해야 함)
- Path override - optional 경로 설정
해당 옵션은 위의 덮어쓴 변수 형태로 URL 요청을 보내면 해당 문구로 치환하겠다는 의미다.
예를 들어 upload_bucket/image.png 형태로 경로를 보내면 {bucket}에 upload_bucket이 {object}에 image.png로 치환되어 전달된다.
위 설정대로 동작하기 위해서는 몇가지 설정이더 필요한데 아래와 같다. - URL path parameters 수정
- bucket : method.request.path.bucket
- object : method.request.path.object
- bucket과 object라는 변수가 어디서 오는지 지정해 주어야 한다. 이것은 aws api gateway rule이기 때문에 method.request.path.(변수) 형태로 전달하면 된다.
- 다음으로 첨부파일에 대한 타입을 지정해줘야 한다. 해당 타입을 모두 받아들여야 하므로 */* 형태로 구성한다.
- API settings 에서 Binary media types을 */* 로 바꿔 준다.
- 다음으로 API를 배포한다.
- 배포된 Stage의 PUT URL을 Copy해서 Postman과 같은 도구를 통해서 테스트 한다.
성공을 확인하고 실제 코드에 적용하면 해당 작업이 완료된다.
이를 통해 Lambda를 이용하지 않고도 API-GW -> S3 작업을 구성했다.
'Cloud > AWS' 카테고리의 다른 글
AWS Lambda 함수 런타임 자동 업데이트 하기 위한 삽질기 (1) | 2024.04.23 |
---|---|
DataGrip에서 DynamoDB Remote 연결 (1) | 2024.02.02 |
AWS EKS 생성하기 (0) | 2019.10.24 |
AWS EC2에 open-jdk8 설치 (0) | 2019.10.24 |