AWS SAM을 사용하여 애플리케이션 배포

임상규·2023년 11월 5일
1

AWS

목록 보기
32/33

참조 내용 (AWS SAM 공식문서)

목표 아키텍처

샘플 애플리케이션 다운로드

sam init

위와 같이 구성하고 X-RAY와 Insights는 비용이 발생하므로 No를 선택했다.

샘플 애플리케이션이 클론되었다.

template.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  sam-app

  Sample SAM Template for sam-app

Globals:
  Function:
    Timeout: 3
    MemorySize: 128

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.lambda_handler
      Runtime: python3.9
      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:
  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/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

전체적인 내용은 Lambda는 Timeout 3초, 128MB를 사용할 것이고
람다 함수에 대한 리소스가 명시되어 있다.
Event 소스를 api gateway를 사용할 것이고 Output은 3가지가 있고
HelloWorldApi, HelloWorldFunction, HelloWorldFunctionIamRole가 있다는 내용이다.

빌드

sam build

배포

sam deploy --guided

정상적으로 배포되었다는 문구가 나왔다.

정상적으로 실행한다.

hello world가 출력된 이유는 아래 리소스값을 보면 핸들러가 app.lambda_hadler라고 나오는데

이러한 값을 가지기 때문에 json 값을 출력한 것이다.

여기서 event는 API gateway를 통해 전달되는 인자들을 말하는데, 경로에 hello가 들어오면 event를 출력해주는 로직을 만들어보았다.

만약 실무였다면 변경된 내용에 대해서 바로 운영서버에 테스트를 하면 안되니 로컬에서 실행하였다.

sam local start-api

서버는 정상적으로 올라왔고,

경로에 hello가 있으므로 event값을 출력하였다.

테스트가 성공하였으므로 배포를 실시하였다.

sam deploy --guided
profile
Junior DevOps Engineer

0개의 댓글