[AWS] AWS SAM

AWS SAM

Resources : AWS CloudFormation

SAM : Serverless Application Model
SAM 은 AWS 상에서 Serveless 어플리케이션을 구축할 때 사용하는 프레임워크 이다.

SAM

AWS SAM 을 사용하여 서버리스 어플리케이션을 정의할 수 있다.

거의 모든 앱이나 백엔드 서비스는 서버리스를 통해 구축 가능하다.

Table of Contents

AWS SAM Components

AWS SAM 은 아래의 구성요소로 이루어져 있다.

Template Specification

SAM 의 템플릿은 AWS CloudFormation 템플릿 파일의 포멧과 상당히 비슷하다.

SAM Template Specification 은 YAML 또는 JSON 형식을 지니고 있다.

Template 의 예)

AWSTemplateFormatVersion: 2020-04-23 
 Transform: [LalaMacro, AWS::Serverless]
 Resources:
    WaitCondition:
      Type: AWS::CloudFormation::WaitCondition
    LalaBucket:
      Type: 'AWS::S3::Bucket'  
      Properties:
        BucketName: MyBucket 
        Tags: [{"key":"value"}] 
        CorsConfiguration:[]   
    LalaEc2Instance:
      Type: 'AWS::EC2::Instance' 
      Properties:
        ImageID: "lala-2020"

↑ return to TOC

Template Section

템플릿은 반드시 포함시켜야 하는 부분과 선택적인 부분으로 나뉜다.

  1. Required
    • Transform
    • Resources
  2. Optional
    • Globals
    • Description
    • Metadata
    • Parameters
    • Mappings
    • Conditions
    • Outputs

Required

반드시 포함시켜야 하는 부분

  1. Transform
    e.g) AWS::Serverless-2020-04-23

  2. Resources
    스택의 리소스(Resrouces)와 속성(Properties)을 지정해준다.
    리소스의 키 명은 Resources 이다.
    e.g) JSON

     "Resources" : {
     "LalaEC2Instance" : {
         "Type" : "AWS::EC2::Instance",
         "Properties" : {
         "ImageId" : "lala-0ff8a4950f237f972"
         }
       }
     }
    

    e.g) YAML

     Resources:
     Logical ID:
         Type: Resource type
         Properties:
         Set of properties
    

    리소스가 지닌 필드

    • Logical ID
      알파벳과 숫자로만 이루어져 있다.
      템플릿 안에서는 유일한 값이어야 한다.
      리소스는 EC2 Instance ID 또는 S3 버킷명 과 같은 Physical ID 도 갖고 있다.
    • Resource types

      e.g)
      아마존이 제공하는 리소스를 식별하기 위해서 아래와 같은 형식이 사용된다.
      service-provider::service-name::data-type-name

      AWS::EC2::Instance

    • Resource properties
      e.g) JSON
      "Resources" : {
        "LalaEC2Instance" : {
            "Type" : "AWS::EC2::Instance",
            "Properties" : {
            "ImageId" : "lala-0ff8a4950f237f972"
            }
        }
      }
      

      e.g) YAML

      Resources:
        LalaEC2Instance:
            Type: "AWS::EC2::Instance"
            Properties:
            ImageId: "lala-0ff8a4950f237f972"
      

Optional

선택 사항

  1. Globals
    Serverless function, APIs, and Simple Table 에서 공통적으로 사용될 요소들을 설정.

     Globals:
       Function:
         Runtime: go1.x
         Timeout: 60
         Handler: cloudfront-test
         Environment:
           Variables:
             TABLE_NAME: data-table
    
  2. Description
    템플릿에 관한 설명 (Text String).

  3. Metadata
    템플릿에 관해 추가적으로 전달해줄 정보.

  4. Parameters
    runtime 시 템플릿에 전달할 값.

  5. Mappings

  6. Conditions

  7. Outputs

↑ return to TOC

Resource Types

리소스 종류에 대해 알아보자. 다양한 리소스 타입은 여기 에서 확인 가능하다.

Amazon Athena

CloudFront

CloudWatch

Elasticsearch

AWS Glue

IAM

Lambda

Function

AWS::Serverless::Function 은 람다 함수, IAM 실행역할(IAM execution role)과 이벤트 소스 매핑(event source mapping)을 생성한다.

Function 속성
함수의 속성중에서 반드시 적어주어야 하는 속성은 HandlerRuntime 이다.

↑ return to TOC

CLI

SAM Command Line Interface
람다 사용을 위한 명령줄 인터페이스

Install SAM CLI

Brew 를 통한 설치법은 아래와 같다.

brew tap aws/tap
brew install aws-sam-cli

↑ return to TOC

Upgrade SAM CLI

Brew 를 통한 SAM CLI 최신버전 업그레이드

brew upgrade aws-sam-cli

↑ return to TOC

Deploy

배포 과정은 다음과 같다. (대소문자는 구분 안함)

SAM Build

SAM Package

SAM Deploy

↑ return to TOC

Commands

AWS SAM 명령어에 대해 알아보자.

Local

generate-event

sam local generate-event [OPTIONS] COMMAND [ARGS]...

invoke

invoke 는 해당 함수를 한번만 실행시킨다. 함수는 실행이 완료된 후에는 종료된다.

↑ return to TOC