이전에는 람다 함수를 SAM
을 통해 빌드하고 AWS Cloud
상에 배포한 뒤에 람다 함수를 테스트했었다. 그러나 배포를 하기 전에 미리 로컬 환경에서 테스트가 가능한 방법이 있어서 공유한다.
hellow-world 람다 함수를 만들고 해당 함수를 로컬에서 호출해보기
최종 결과 프로젝트 깃허브 링크
https://github.com/SangYunLeee/lambda-test/tree/main/printEvent
초기 조건:
람다 함수를 생성하는 프로젝트를 생성한다.
$ sam init
You can preselect a particular runtime or package type when using the `sam init` experience.
Call `sam init --help` to learn more.
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 1
Choose an AWS Quick Start application template
1 - Hello World Example
2 - Multi-step workflow
3 - Serverless API
4 - Scheduled task
5 - Standalone function
6 - Data processing
7 - Hello World Example With Powertools
8 - Infrastructure event management
9 - Serverless Connector Hello World Example
10 - Multi-step workflow with Connectors
11 - Lambda Response Streaming
12 - Lambda EFS example
13 - DynamoDB Example
14 - Machine Learning
Template: 5
Which runtime would you like to use?
1 - dotnet6
2 - dotnetcore3.1
3 - nodejs18.x
4 - nodejs16.x
5 - nodejs14.x
6 - nodejs12.x
Runtime: 5
Based on your selections, the only Package type available is Zip.
We will proceed to selecting the Package type as Zip.
Based on your selections, the only dependency manager available is npm.
We will proceed copying the template using npm.
Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]:
Would you like to enable monitoring using CloudWatch Application Insights?
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:
Project name [sam-app]:
-----------------------
Generating application:
-----------------------
Name: sam-app
Runtime: nodejs14.x
Architectures: x86_64
Dependency Manager: npm
Application Template: quick-start-from-scratch
Output Directory: .
Configuration file: sam-app/samconfig.toml
Next steps can be found in the README file at sam-app/README.md
함수를 수정하여 event 값을 볼 수 있도록 변경
exports.helloFromLambdaHandler = async (event) => {
console.log(`event : ${event}`);
return event;
}
$ cd sam-app
$ sam build
$ sam local invoke
시 함수 호출 됨을 확인 로그(Hellow from Lambda
) event.json
파일 추가# event.json
{
"TemperatureK": 281,
"WindKmh": -3,
"HumidityPct": 0.55,
"PressureHPa": 1020
}
event.json
을 인자로 사용해 호출sam local invoke -e events/event.json
sam local start-api
을 통해 로컬에서도 api-gateway
테스트 또한 가능한다.번외로,
aws 에 올린 람다함수를 로컬에서 호출할 수도 있다.$ aws lambda invoke --function-name {Lambda함수의Arn를입력} --invocation-type Event --payload '{ "Metadata": "Hello" }' response.json --cli-binary-format raw-in-base64-out
참고자료
1. SAM을 이용하여 Lambda 로컬 개발 환경 구축하기
2. AWS: Invoking Lambda functions locally