[AWS] SAM 을 통한 람다함수의 presigned url 생성

sang yun Lee·2023년 5월 13일
0

Devops 실습

목록 보기
6/21
post-thumbnail

개요


SAM 은 AWS의 서버리스 쪽 선언적 IaC 이다. 이러한 SAM을 통해서, 원하는 인프라를 구성할 수 있기에 S3 업로드용 presigned url 을 만드는 람다함수를 만들어보고 실제로 정상적으로 동작하는 지 테스트해보자.

목표


  1. 선 구현된 SAM 을 통해 빌드 및 배포
  2. 배포된 람다함수를 호출하여 presigned url을 얻고 presigned url을 통해 S3 에 업로드

실습 과정


초기 선수 조건:

STEP 1: 프로젝트 구조 분석

  1. 아래의 명령어를 통해 presigned url 생성에 필요한 Repo를 받고 lambda-test/getPreUrl로 이동한다.
$ git clone https://github.com/SangYunLeee/lambda-test.git
$ cd lambda-test/getPreUrl
  1. 인프라 구성 확인
  • lambda-test/getPreUrl 에 있는 template.yaml 을 통해 인프라 구성을 확인할 수 있다.
  • 주석을 통해 인프라 구성을 작성해보았다.
# template.yaml
AWSTemplateFormatVersion: 2010-09-09
Description: >-
  sam-app

Transform:
- AWS::Serverless-2016-10-31

Resources:
  S3Bucket:
  # S3 버킷 생성
    Type: 'AWS::S3::Bucket'

  getPreUrlLambdaFunction:
  # 람다 함수 생성
    Type: AWS::Serverless::Function
    Properties:
      # 함수 소스코드 경로 및 함수명
      Handler: src/handlers/get-preurl-lambda.getPreUrllambdaHandler
      Runtime: nodejs14.x
      Architectures:
        - x86_64
      MemorySize: 128
      Timeout: 100
      Description: get-s3-preurl-for-upload
      # 람다 함수에 적용될 정책
      Policies:
        - AWSLambdaBasicExecutionRole # 함수 실행 권한
        - AmazonS3FullAccess # S3 PUT, GET 권한
      Environment:
        Variables:
          BucketName: !Ref S3Bucket # 람다함수의 환경변수에 넣어질 S3 버킷명
      # API Gateway 명
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /s3
            Method: get
  1. 소스코드 구성
  • 클라이언트가 요청하면 버킷의 pre-url 을 전달한다.
  • 소스코드 위치
const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.getPreUrllambdaHandler = async (event) => {
  let presignedGETURL = s3.getSignedUrl('putObject', { // putObject => 파일을 추가하겠다는 의미
    Bucket: process.env.BucketName, // 환경변수에 저장된 버킷명
    Key: 'test.jpeg', // 생성할 파일명
    Expires: 3600 // 3600초후 만료
  });
  console.log(`presignedGETURL :`, presignedGETURL);
  // 클라이언트에게 pre-URL 반환
  const response = {
    statusCode: 200,
    body: presignedGETURL
  };

  return response;
}

STEP 2: SAM 빌드 및 배포

빌드를 하고 배포를 진행한다.

  • $ sam build
  • $ sam deploy
  • 아래와 같이 배포할 건지 물어보는데 y
  • 배포가 완료되었다.

STEP 3: AWS 에서 인프라 구성 확인

람다 함수 구성

  • 람다 함수 생성 확인
  • 생성된 람다함수로 이동하여 권한이 생성되었는 지 확인 (S3 바구니 이미지가 보이면 생성이 된 것임)
  • 환경 변수 확인

버킷 함수 구성

  • 버킷 생성 확인

API 게이트웨이 구성

STEP 4: 정상 동작 테스트

  • API 게이트웨이의 엔드포인트 클릭하여 브라우저로 접속
  • pre-url 복사
  • POSTMAN 을 통해 파일 PUT 요청
  • 파일 업로드 확인

파일 업로드가 되면 정상적으로 완료..!!!

STEP 5: 실습 내용 삭제

실습이 끝났으니 삭제를 해주자.

  • 프로젝트 폴더로 이동
  • sam delete 실행

참고자료 :

0개의 댓글