AWS CloudFormation / SAM

임상규·2023년 11월 4일
1

AWS

목록 보기
31/33
post-thumbnail

CloudFormation

  • AWS 리소스를 모델링하고 설정하여 리소스 관리 시간을 줄이고 애플리케이션에 더 많은 시간을 사용하도록 해주는 서비스
  • AWS 리소스를 설명하고 템플릿을 생성하면 해당 리소스의 프로비저닝과 구성을 담당

CloudFormation 예시

  • 템플릿: JSON/YAML 포맷의 파일
  • 스택
    • 스택이라는 하나의 단위로 리소스를 관리
    • 스택에서 실행중인 리소스를 변경해야 하는 경우 스택을 업데이트 함

EX) JSON

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "A sample template",
    "Resources": {
        "MyEC2Instance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "ImageId": "ami-0ff8a91507f77f867",
                "InstanceType": "t2.micro",
                "KeyName": "testkey",
                "BlockDeviceMappings": [
                    {
                        "DeviceName": "/dev/sdm",
                        "Ebs": {
                            "VolumeType": "io1",
                            "Iops": 200,
                            "DeleteOnTermination": false,
                            "VolumeSize": 20
                        }
                    }
                ]
            }
        }
    }
}

EX) YAML

AWSTemplateFormatVersion: 2010-09-09
Description: A sample template
Resources:
  MyEC2Instance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: ami-0ff8a91507f77f867
      InstanceType: t2.micro
      KeyName: testkey
      BlockDeviceMappings:
        - DeviceName: /dev/sdm
          Ebs:
            VolumeType: io1
            Iops: 200
            DeleteOnTermination: false
            VolumeSize: 20

템플릿을 수정하고 로컬이나 S3 버킷에 저장을 하면 CloudFormation에서 변경점을 발견한다.
변경점을 발견하면 CloudFormation이 스택을 갱신시키고, 갱신된 스택을 업데이트 한다.

장점

  • 인프라 관리 간소화 (별도의 플랫폼 사용 필요 X)
    • 리소스 삭제 시 자동으로 생성되는 자원까지 확실하게 정리됨
  • 인프라 변경 사항 제어 및 추적 가능 (자체적으로 롤백 지원)
  • AWS에서 배포에 필요한 모든 옵션을 제공

단점

  • CloudFormation으로 관리할 리소스에 대한 이해가 낮으면 사용하기 어려움
  • 배포에 필요한 모든 옵션을 직접 활용하기에는 설정이 너무 많음
  • JSON, YAML 문법에서 값 참조 방식 (Getatt, Ref, Sub)

SAM

SAM 이란?

  • Serverless Application Model, SAM
  • AWS 내 서버리스 애플리케이션 구축을 위한 오픈소스 프레임워크
    • 서버리스 애플리케이션은 Lambda, Event Source와 다른 리소스 (API, DB) 조합을 의미
  • CloudFormation을 확장한 프레임 워크
  • SAM은 템플릿과 AWS SAM CLI로 구성

예시

SAM CLI

#Step 1 - 샘플 애플리케이션 다운로드
sam init

#Step 2 - 애플리케이션 빌드
cd sam-app
sam build

#Step 3 - 애플리케이션 배포
sam deploy --guided

템플릿: API Gateway

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
  LambdaFunctionOverHttps:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs18.x
      Policies: AmazonDynamoDBFullAccess
      Events:
        HttpPost:
          Type: Api
          Properties:
            Path: '/DynamoDBOperations/DynamoDBManager'
            Method: post

장점

  • CloudFormation 코드가 추상화되어 있어 쉽게 구성 가능
  • 기존의 CloudFormation 코드와 함께 사용 가능
  • SAM CLI를 통해서 로컬 환경에서 직접 Lambda 함수를 테스트 할 수 있어서 편리

단점

  • SAM으로 정의할 수 있는 리소스가 제한적
    • API Gateway, DynamoDB, Lambda, EventBridge
  • CloudFormation의 확장이기 때문에 CloudFormation의 단점/한계를 그대로 가지고 있음
profile
Junior DevOps Engineer

0개의 댓글