IaaS/퍼블릭클라우드

(AWS) SAM이란?

armyost 2022. 2. 15. 06:48
728x90

AWS Serverless Application Model (SAM)은 서버리스 구조로 Lambda 함수, 이벤트 소스 및 기타 리소스의 조합이다. 서버리스 애플리케이션은 단순한 Lambda 함수 그 이상입니다. API, 데이터베이스, 이벤트 매핑 등 추가 리소스를 포함할 수 있습니다. 생성을 하게되면 CloudFormation Stack에 추가됩니다.

 

SAM 사용시 이점

  • 단일 배포 구성.AWS SAM를 사용하면 관련 구성 요소 및 리소스를 쉽게 구성하고 단일 스택에서 작동할 수 있습니다. 다음을 수행할 수 있습니다.AWS SAM리소스 간에 구성 (예: 메모리 및 시간 초과) 을 공유하고 모든 관련 리소스를 버전이 지정된 단일 엔터티로 함께 배포합니다.
  • 확장AWS CloudFormation. AWS CloudFormation다음과 같은 신뢰할 수 있는 배포 기능을 얻을 수 있습니다.AWS CloudFormation. 다음을 사용하여 리소스를 정의할 수 있습니다.AWS CloudFormation당신의AWS SAM템플릿. 또한 에서 사용할 수 있는 전체 리소스, 내장 함수 및 기타 템플릿 기능을 사용할 수 있습니다.AWS CloudFormation.
  • 기본 제공 모범 사례. 다음을 수행할 수 있습니다.AWS SAM인프라를 구성으로 정의 및 배포할 수 있습니다. 이를 통해 코드 검토와 같은 모범 사례를 사용하고 적용할 수 있습니다. 또한 몇 줄의 구성을 통해 CodeDeploy를 통해 안전한 배포를 활성화하고 다음을 사용하여 추적을 활성화할 수 있습니다.AWS X-Ray.
  • 로컬 디버깅 및 테스트. 이AWS SAMCLI를 사용하면 다음에 정의된 서버리스 애플리케이션을 로컬에서 빌드, 테스트 및 디버깅할 수 있습니다.AWS SAM템플릿. CLI는 Lambda와 유사한 실행 환경을 로컬로 제공합니다. 실제 Lambda 실행 환경과 패리티를 제공함으로써 문제를 미리 파악할 수 있습니다. 코드를 단계별로 진행하고 디버깅하여 코드가 수행하는 작업을 이해하려면 다음을 사용할 수 있습니다.AWS SAM와AWS다음과 같은 툴킷AWS Toolkit for JetBrains,AWSToolkit for PyCharm,AWSToolkit for IntelliJ, 및AWSToolkit for Visual Studio. 이렇게 하면 클라우드에서 발생할 수 있는 문제를 찾아 해결할 수 있으므로 피드백 루프가 좁아집니다.
  • 개발 툴과의 심층적인 통합. 다음을 수행할 수 있습니다.AWS SAM스위트와 함께AWS서버리스 애플리케이션을 빌드하기 위한 도구 에서 새 응용 프로그램을 찾을 수 있습니다.AWS Serverless Application Repository. 제작, 테스트 및 디버깅용AWS SAM—기반 서버리스 애플리케이션, 당신은AWS Cloud9IDE. 서버리스 애플리케이션을 위한 배포 파이프라인을 구축하려면 다음을 사용할 수 있습니다.CodeBuild,CodeDeploy, 및CodePipeline. 를 사용할 수도 있습니다.AWS CodeStar프로젝트 구조, 코드 리포지토리 및 자동으로 구성되는 CI/CD 파이프라인을 시작합니다. 서버리스 애플리케이션을 배포하려면 다음을 사용할 수 있습니다.Jenkins 플러그인.

 

적용방법

API서비스를 생성하는 기본 예제로 수행해보겠다.

 

1.AWS SAM응용 프로그램 샘플 다운로드

※ 어플리케이션을 개발할때는 기본 파일구조를 받고 추가로 서비스를 업그레이드 진행한다. 

$ sam init

 

해당 샘플 앱의 파일구조

 sam-app/
   ├── README.md
   ├── events/
   │   └── event.json
   ├── hello_world/
   │   ├── __init__.py
   │   ├── app.py            #Contains your AWS Lambda handler logic.
   │   └── requirements.txt  #Contains any Python dependencies the application requires, used for sam build
   ├── template.yaml         #Contains the AWS SAM template defining your application's AWS resources.
   └── tests/
       └── unit/
           ├── __init__.py
           └── test_handler.py

 

2. 애플리케이션 빌드

$ cd sam-app
$ sam build


3. 애플리케이션에 배포AWS배포하기

$ sam deploy --guided

 

SAM과 CodeDeploy

 

SAM을 통해서 Serverless Deploy를 수행하면 안정적인 배포를 보장하기 위해서 Code Deploy에 BuiltIn되어 생성된다.

 

예시

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.7
      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

      AutoPublishAlias: live

      DeploymentPreference:
       Type: Canary10Percent10Minutes

위 YAML의 DeploymentPreference 섹션을 참조하여 아래의 CodeDeploy Job을 생성한다.

'IaaS > 퍼블릭클라우드' 카테고리의 다른 글

(AWS) API Gateway란?  (0) 2022.02.18
(AWS) Step Function 이란?  (0) 2022.02.18
(AWS) Lambda Alias란?  (0) 2022.02.15
(AWS) Lambda 에 대해서  (0) 2022.02.07
(AWS) Elastic Beanstalk의 CI/CD에 대해서  (0) 2022.02.07