-
SAM 을 이용한 AWS Lambda 배포공부/AWS 2025. 11. 30. 23:33
Lambda에 배포하는 방법 중에 하나로 SAM을 이용하여 배포하는 방법이 있습니다. 오늘은 SAM으로 람다에 함수를 배포하고 관리할 수 있도록 구성했던 부분을 작성하도록 하겠습니다. (제가 진행했던 방식은 Mac에서 진행하였습니다.)
혹시라도 부정확한 정보를 전달드릴 수 있습니다. 다만 틀린 부분이 있으면 댓글을 남겨주세요.
1. SAM 설치(AWS 링크)
- 환경에 맞게 SAM을 설치합니다.
# Mac brew tap aws/tap brew install aws-sam-cli sam --version # sam이 정상적으로 설치가 됐다면 버전이 나옵니다.
2. 설치 이후 명령어를 통해 SAM 관련 파일을 생성합니다.
sam init # 이후 나타는 설정은 상황에 맞게 진행해주시면 됩니다.
템플릿 설정 - 템플릿을 지정하는 부분입니다.
- Quick Start Templates로 만들고 생성된 파일을 수정하셔도 됩니다.

- Quick Start Templates 선택 시 어떤 템플릿을 배포할 건지 지정하는 부분입니다.

- y/N 에서는 대문자로 된 부분이 엔터를 입력하면 자동으로 N으로 처리가 됩니다.
- 어떤 언어로 함수를 작성할지 지정합니다.

- 람다에 배포하기 위해서 Zip파일을 선택했습니다.(Image는 도커 이미지를 의미합니다.)

- Nodejs 선택 시 typescript로 배포를 할지를 확인합니다.
- 저는 나머지 부분에서 default로 선택하였습니다.

- 이후 제가 설정한 대로 sam 폴더가 생성되면 내부에는 원하는 설정들이 된 파일들이 생성돼 있습니다.
3. samconfig, template 파일 확인
- samconfig.toml 파일은 배포를 진행할 때 AWS에서 사용할 부분들을 지정합니다.
# 하단 URL에 접속 시 어떤 키와 값으로 작성해야 하는지 정보를 알 수 있습니다. # https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html version = 0.1 # global.parameters는 전역에서 사용할 수 있는 영역이라고 보면 됩니다. # 각 영역에서 stack_name을 따로 지정하지 않았다면 global.parameters를 사용합니다. [default.global.parameters] stack_name = "sam-app" # build 할때 parameter 입니다. [default.build.parameters] cached = true # 빌드 시 변경 사항이 없다면 캐시된 결과를 재사용 합니다. parallel = true # 함수가 여러개 있을 때 병렬로 배포합니다. # 유효성 검증 [default.validate.parameters] lint = true # 배포시 사용하는 파라미터 입니다. [default.deploy.parameters] capabilities = "CAPABILITY_IAM" # CloudFormation이 리소스를 생성하거나 수정할 수 있도록 허용합니다. confirm_changeset = true # CloudFormation 변경을 사용자에게 보여줍니다. resolve_s3 = true # S3 버킷을 자동으로 생성하거나 기존의 버킷을 재사용하도록 설정합니다. [default.package.parameters] resolve_s3 = true # s3 버킷을 지정하지 않았다면 자동으로 버킷을 찾거나 생성합니다.(지정했다면 false로 유지)- template.yaml 파일은 Lambda 구성을 설정합니다.
# Default로 생성된 파일입니다. AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > sam-app Sample SAM Template for sam-app # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: hello-world/ Handler: app.lambdaHandler Runtime: nodejs22.x Architectures: - x86_64 Events: HelloWorld: Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /hello Method: get Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api HelloWorldApi: Description: "API Gateway endpoint URL for Prod stage for Hello World function" Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.${AWS::URLSuffix}/Prod/hello/" HelloWorldFunction: Description: "Hello World Lambda Function ARN" Value: !GetAtt HelloWorldFunction.Arn HelloWorldFunctionIamRole: Description: "Implicit IAM Role created for Hello World function" Value: !GetAtt HelloWorldFunctionRole.Arn- Resources 영역에 AWS에 있는 다른 서비스들은 연결하거나 Event Handler, VPC Config 등을 지정할 수 있습니다.
4. 배포 진행
# 처음 build 시에는 --guided를 필수로 입력하시고 이후에는 build만 진행하셔도 됩니다. sam build --guided sam deploy- 정상적으로 deploy가 된 다면 각각의 AWS에서 확인할 실수 있습니다.

CloudFormation 
S3 
lambda-applicaion 
lambda-function 
lambda-function-detail
Deploy 진행하다가 실패한다면???
- 실패시 Cloudformation 스택에서 failed된 스택을 삭제하고 문제가 있던 samconfig 파일을 수정하고 deploy를 진행해야 합니다.
현재는 로컬에서 명령어로 배포하는 부분을 진행하였지만, 이후에는 github-action을 이용해서 배포 자동화를 하는 부분도 작성할 수 있도록 하겠습니다.
처음에는 lambda가 불편하고 어렵다고 생각했지만 가벼운 기능들을 자주 사용하다보면 더 확장된 기능들을 사용해 볼 수 있을 것이라고 생각하고 있습니다.
Ref.
https://velog.io/@leejm_dev/AWS-SAM
AWS SAM
how to use AWS SAM with cloudformation
velog.io
'공부 > AWS' 카테고리의 다른 글
[AWS]No space left on device @ fptr_finalize_flush - /opt/codedeploy-agent/deployment-root/ongoing-deployment/ (0) 2025.12.22 ACM(외부에서 발급받은 도메인) - Route53 연결 (0) 2025.12.19 AWS SSM - Private Subnet EC2 (0) 2025.11.08 S3 - Cloud Front 적용 (0) 2025.07.21 AWS Systems Manager - Parameter Store (with NestJs) (0) 2025.04.23