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

{
    "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

+ Recent posts