Devops/실습
SAM 을 활용한 Lambda 배포 실습 (feat: DynamoDB)
피리음
2023. 5. 10. 11:34
참고 자료
목표
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: 예제를 배포한다.
- 우선 빌드한다.
sam build
- 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]
- 설정 환경 이름은 뭐로 할 거냐는 것 같음. 그냥 엔터.
- Stack Name [sam-app]
아래처럼 뜨면 성공한 것이다.
- 배포한 람다함수를 실행해보자.
실행 결과: 202 면 성공# 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
STEP 4: API 게이트웨이 - Lambda
Add Trigger
- 아래처럼 만듦
- 아래의 링크를 통해 접근해본다.
- OK 가 뜨면 일단 정상동작된 것이다.
- DynamoDB에 저장이 되었는 지 확인한다.
실패 기록
진행 도중 Internal Server Error
가 떠서 Cloud Watch
로 보니 특정 모듈을 찾을 수 없다는 에러를 발견했다. 이는 빌드하지 않아서 발생한 이슈였고, sam build
를 넣어서 다시 배포 sam deploy
해줌으로써 해결하였다.