[AWS] SAM을 이용하여 Lambda 로컬 개발 환경 구축하기
[ AWS Lambda function을 local에서 테스트 하기]
[ 목적 ]
- 매번 AWS console에서 Test JSON을 생성해서 gui로 테스트하기 번거로움
- AWS console에서 테스트시 Log 찍어보기 불편함
[ Environment ]
- Docker (SAM이 내부적으로 docker 사용)
- Testing language, runtime (python, node.js, etc...)
- vscode
[ 관련 자료 ]
- AWS sam-cli 설치 Installing the AWS SAM CLI
- Lambda, API Gateway 로컬에서 테스트 하기 - 튜토리얼 How To Test your AWS Lambda Locally with SAM [AWS] SAM(Serverless Application Model)
[ Lambda local test enviornment setting ]
해당 내용은 MacOS를 기준으로 작성되었습니다.
- Install vscode extention - AWS Toolket
- Create Lambda SAM Application
- 사용할 Runtime을 선택한다 (python3.9)
- 자신에게 맞는 CPU 스펙을 선택하고, AWM SAM Hello World를 선택한다
- 생성된 프로젝트에서 현재 Test case를 작성하며 개발하지 않음으로 tests 폴더를 삭제한다.
- Lambda 함수 작성 : 생성된 hello_world 폴더의 이름을 적절히 변경한다.
- Events/event.json에 lambda에 보낼 event data 작성
- 필요한 python 패키지는 <lambda_function_dir>/requirements.txt 파일에 버전과 함께 작성한다
- app.py에 lambda function 작성
- Lambda image build : requirements에 필요 패키지 작성 후 sam build로 SAM이 사용할 image build
- 패키지 설치 필요 없이 단순 테스트시 —skip-pull-image 옵션을 추가하여 image pull 생략
sam build (--skip-pull-image)
- Lambda invoke :
sam local invoke -e events/event.json
에 필요 json 작성 후 로컬 lambda function test
- 함수 테스트 전(코드 수정시) sam build 필요, Event.json 수정시 build 필요하지 않음
- sam local start-api 명령어 사용시 localhost server로 실행 → postman 사용 가능
해당 내용은 MacOS를 기준으로 작성되었습니다.
- Events/event.json에 lambda에 보낼 event data 작성
- 필요한 python 패키지는 <lambda_function_dir>/requirements.txt 파일에 버전과 함께 작성한다
- app.py에 lambda function 작성
- 패키지 설치 필요 없이 단순 테스트시 —skip-pull-image 옵션을 추가하여 image pull 생략
sam build (--skip-pull-image)
sam local invoke -e events/event.json
에 필요 json 작성 후 로컬 lambda function test- 함수 테스트 전(코드 수정시) sam build 필요, Event.json 수정시 build 필요하지 않음
- sam local start-api 명령어 사용시 localhost server로 실행 → postman 사용 가능
** Lambda function(app.py) 변경시 build를 해야하기 때문에, 주기적으로 docker container prune 명령어로 container 정리(삭제) 필요
[ Lambda template.yaml 파일 작성 ]
SAM을 이용한 배포를 진행하기 위해서는 template.yaml 파일 작성 필요
아래는 lambda_local/template.yaml 파일의 예시 내용이다
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
sam-deploy
Sample SAM Template for sam-deploy
Globals:
Function:
Timeout: 3
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: "Sam-deploy-test-function"
CodeUri: example_function/
Handler: app.lambda_handler
Runtime: python3.9
Architectures:
- x86_64
Events:
HelloWorld:
Type: Api
Properties:
Path: /hello
Method: get
API 개발시 참고해야 하는 옵션
Resources
- FunctionName : Lambda function의 이름
- Environment/Variables : Lambda 환경 변수
- CodeUri : Lambda function이 담겨있는 위치
- Events : API(Lambda function)의 이름과 uri resource, http method. sam local start-api로 테스트시 사용
- Handler : Lambda handler 함수의 위치
- HelloWorldFunction : SAM local invoke에서 호출하는 함수
[ API Gateway template.yaml 작성 ]
SAM은 기본적으로 Lambda와 API Gateway 배포를 지원한다.
Lambda function과 관련된 내용을 template.yaml에 먼저 작성하고, API Gateway 정보가 담긴 내용을 추가하고 Lambda function 과 API Gateway와 연결되도록 내용을 추가한다.
아래는 API Gateway와 Lambda function을 연결한 template.yaml 파일의 내용이다.
Resources:
BasicAWSApiGateway:
Type: AWS::Serverless::Api
Properties:
Name: api-gateway
StageName: dev
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: "Sam-deploy-test-function"
CodeUri: example_function/
Handler: app.lambda_handler
Runtime: python3.9
Architectures:
- x86_64
Events:
HelloWorld:
Type: Api
Properties:
RestApiId: !Ref BasicAWSApiGateway
Path: /hello
Method: get
API Gateway 내용
- BasicAWSApiGateway : Template.yaml 파일에서 사용되는 API Gateway의 이름
- Properties/Name : AWS에 배포될 API Gateway의 이름
- Properties/StageName : AWS에 배포될 API Gateway의 stage 이름
Lambda Function 내용
- Events//Properties/RestApiId : Lambda function과 연결할 template.yaml 내부의 API Gateway 이름. 앞에 !Ref를 추가하여 API Gateway와 연결한다.
[ SAM을 사용해서 CLI에서 배포하기 ]
!!! 해당 배포 과정은 변경된 내용만 적용 되는 것이 아닌, 해당 template.yaml 파일 내용 그대로 덮어써지기 때문에 하나의 template.yaml에 수정 사항과 변경 사항을 모두 작성하여 배포해야 합니다 !!!
사전 작업
- aws-cli로 계정정보 등록
- aws configure list 로 현재 AWS 정보 확인
- aws configure —profile 명령어로 AWS 계정 정보 등록
- access_key : 계정 access_key (IAM에서 확인 가능)
- secret_key : 계정 secret_key (IAM에서 key 생성시에만 확인 가능, 별도 보관 필요)
- region : AWS 지역 설정 (ap-northeast-2 : 서울)
- aws configure list 로 현재 AWS 정보 확인
Lambda & API Gateway 배포
-
배포할 Lambda function SAM build ( Lambda local test enviornment setting 참고 )
-
배포할 Lambda function이 있는 directory로 이동
-
sam deploy -g —profile 명령어로 원하는 계정에 배포
- Stack name : Cloudfront에 사용될 Stack 이름
- AWS Region : AWS 지역 등록
- 나머지 옵션은 모두 Yes
- SAM configuration file : SAM 배포시 사용되는 정보가 저장되는 파일 명
- SAM configuration enironment : 별도의 SAM 파일이 없다면 엔터
Author And Source
이 문제에 관하여([AWS] SAM을 이용하여 Lambda 로컬 개발 환경 구축하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hytenic/AWS-SAM을-이용하여-Lambda-로컬-개발-환경-구축하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)