SAM 을 활용한 Lambda 배포 실습 (feat: DynamoDB)

sang yun Lee·2023년 5월 10일
0

Devops 실습

목록 보기
1/21
post-thumbnail

참고 자료

목표


API Gateway의 endpoint 를 통해 접속해서 람다함수를 호출하고 dynamodDB 에 데이터를 저장하기

실습 선수 조건


AWS CLI 자격 증명 이 완료되어야 함.

실습 순서


Step 1: 공식 사이트에서 SAM 을 설치한다

Step 2: 예제를 다운받는다. 이 예제를 통해 lambda 와 dynamoDB 를 배포할 수 있다

$ git clone https://github.com/aws-samples/serverless-patterns/ 
$ cd serverless-patterns/lambda-dynamodb

template.yaml 내의 코드를 변경한다.

- Runtime: nodejs12.x
+ Runtime: nodejs14.x

Step 3: 예제를 배포한다.

  1. 우선 빌드한다. sam build
  2. AWS 에 배포한다.
    sam deploy --guided 를 치면 아래와 같이 뜨는데 전부 ENTER 해준다.
    • Stack Name [sam-app]
      - CloudFomation 에 지을 이름
      - defalut 가 sam-app 이라 그냥 엔터치면 됨
    • AWS Region [ap-northeast-2]
      - 한국이 기본값이므로 엔터
    • Confirm changes before deploy [y/N]
      - 배포할 때마다 변경사항을 확인하겠냐는 건데 확인하지 않으므로 엔터. (기본값은 대문자인 N)
    • Allow SAM CLI IAM role creation [Y/n]
      - SAM CLI의 역할 생성을 허용하겠냐는 말이므로 Yes.
    • Disable rollback [y/N]
      - Operation 에서 실패했을 때 이전버전으로 되돌아가겠냐는 것 같음. N 를 하면 되돌아가지 않겠다는 의미같음. 여기서는 크게 중요하지 않으므로 아무거나.
    • Save arguments to configuration file [Y/n]
      - 지금까지 입력한 것들을 파일로 저장해놓겠냐는 의미. Yes.
    • SAM configuration file [samconfig.toml]
      - 파일명은 뭐로 할거냐는 의미. 엔터. samconfig.toml 로 할 것이기 때문.
    • SAM configuration environment [default]
      - 설정 환경 이름은 뭐로 할 거냐는 것 같음. 그냥 엔터.

아래처럼 뜨면 성공한 것이다.

  1. 배포한 람다함수를 실행해보자.
# aws lambda invoke --function-name {Lambda함수 Arn} --invocation-type Event  --payload '{ "Metadata": "Hello" }'  response.json --cli-binary-format raw-in-base64-out
$ aws lambda invoke --function-name arn:aws:lambda:ap-northeast-2:640668917513:function:sam-app-LambdaPutDynamoDB-raSopnm1 --invocation-type Event  --payload '{ "Metadata": "Hello" }'  response.json --cli-binary-format raw-in-base64-out

실행 결과: 202 면 성공

STEP 4: API 게이트웨이 - Lambda

  1. Add Trigger
  2. 아래처럼 만듦
  3. 아래의 링크를 통해 접근해본다.
  4. OK 가 뜨면 일단 정상동작된 것이다.
  5. DynamoDB에 저장이 되었는 지 확인한다.

실패 기록

진행 도중 Internal Server Error 가 떠서 Cloud Watch로 보니 특정 모듈을 찾을 수 없다는 에러를 발견했다. 이는 빌드하지 않아서 발생한 이슈였고, sam build 를 넣어서 다시 배포 sam deploy 해줌으로써 해결하였다.

0개의 댓글