본문 바로가기
Infra & Cloud/AWS (아마존 웹 서비스)

[AWS] AWS CloudFormation이란? (클라우드 리소스 라이프사이클 관리도구)

by newstellar 2022. 8. 9.
반응형
복잡한 AWS Console이나 CLI, SDK 말고도 AWS 자원을 CUD(creation, update, deletion; 생성, 수정, 삭제)할 수 있는 방법이 존재합니다. 바로 AWS CloudFormation (클라우드 포메이션)입니다.

 

0. 들어가며
1. AWS CloudFormation 이란?
2. 코딩 템플릿 (Coding Templates)
3. 내장 함수 (Intrinsic Functions)
4. 활용

 

0. 들어가며

  • 아마존(Amazon)의 AWS를 비롯한 CSP(Cloud Service Provider)의 자원을 관리하는 방법은 여러 가지가 있습니다.
    1. AWS Management Console
    2. AWS Command Line Interface
    3. AWS Tools & Software Development Kits
    4. AWS CloudFormation

  • 오늘은 4번, IaC(Infrastructure as Code)의 사례 중 하나인 AWS CloudFormation에 대해 알아보고자 합니다.
    IaaS, PaaS, SaaS와 달리 IaC는 a가 하나라는 점에 유의할 것.

 


1. AWS CloudFormation이란?

  • 코드형 인프라(IaC; Infrastructure as Code)는 사용자가 마우스로 클릭해가며 IT 인프라를 관리하는 프로세스가 아닌, 코드를 통해 선언적으로 프로비저닝하는 툴입니다.
    [Red Hat 참고]

    • 가령, A 회사에서 일하는 100명의 직원들에게 각자 Web App을 배포하라는 숙제를 낸다면, 100명의 직원들은 Web App 배포에 필요한 인프라 환경을 각기 구성할 것이며, 10분이 소요될 구성 시간은 1000분이 낭비되는 비효율적인 상황을 낳습니다.

    • 이때 인프라 구성 사양을 코드화하고 문서화한다면, 직원 중 하나가 실수하여 Web App이 제대로 배포되지 않아 디버깅하는 시간을 줄일 수도 있고, 무엇보다 개발자가 직접 서버/OS/스토리지 등의 리소스를 프로비저닝 및 관리할 필요가 없어집니다.

    • 대표적인 IaC 툴을 소개하면 다음과 같습니다.
      • Chef
      • Puppet
      • Red Hat Ansible Automation Platform
      • Saltstack
      • Terraform (HashiCorp 社의 개발 환경 관리 툴) 
      • Vagrant (HashiCorp 社의 개발 환경 관리 툴)
      • AWS CloudFormation  <-  오늘의 주인공

  • AWS CloudFormation의 작동 방식은 4단계로 이루어집니다.
    • 템플릿(Template) 작성
    • 템플릿 업로드 (in S3 Bucket)
    • 스택 생성
    • 스택 설정 및 리소스 생성

AWS 공식 문서에서 소개하고 있는 CloudFormation 작동 방식

 

  • 템플릿(Template)은 Stack에 담길 리소스를 프로비저닝(provisioning)하기 위해 필요한 파일입니다.
    JSON이나 YAML 형식의 텍스트 파일로 작성할 수 있으며 GUI 툴인 AWS CloudFormation Designer를 사용하는 방식으로도 템플릿을 작성할 수 있습니다. 이 Designer 툴에서 JSON -> YAML, YAML -> JSON으로 형식을 자유롭게 바꿀 수 있습니다. 

  • 스택(Stack)은 AWS 리소스의 모음으로, CloudFormation을 통해 리소스를 한데 묶은 스택을 생성하면, 이후 업데이트와 삭제까지 템플릿을 통해 정의할 수 있습니다.
    스택을 삭제하면 템플릿에 정의된 모든 리소스가 삭제됩니다.

반응형

 

2. 코딩 템플릿(Coding Templates)

  • AWSTemplateFormatVersion & Description(optional)
    • 템플릿에 대한 버전 정보 및 설명을 추가할 수 있습니다.
// JSON 형식

{
  "AWSTemplateFormatVersion": "version date",
  "Description": "JSON string",
}

 

  • Metadata
    • JSON 또는 YAML 형태로 쓰여진 객체에 대한 메타데이터를 기입할 수 있습니다.
// JSON 형식

{
  ...,
  "Metadata": {
    "Instances": {
      "Description": "Information about the instances"
    },
    "Databases": {
      "Description": "Information about the databases"
    }
  },
  ...
}

 

  • Parameters
    • stack 생성/수정 시 필요한 parameter를 정의합니다.

    • String, Number, List<Number>, CommaDelimitedList, AWS-Specific types(*)와 SSM types를 지원합니다.

      (*) AWS-specific Parameter Types
      : 사용자 AWS 계정에 기록된 리소스 validation 값들을 parameter처럼 사용하여, stack 생성/수정 시 invalid 값인지 아닌지 체크할 수 있습니다.
      ex) AWS::EC2::AvailabilityZone::Name, AWS::EC2::Instance::Id, AWS::EC2::SecurityGroup::GroupName, AWS::Route53::HostedZone::Id, List<AWS::EC2::AvailabilityZone::Name>, List<AWS::EC2::VPC::Id>

    • 추후 다룰 내장 함수(intrinsic function)을 사용하여 parameter를 리소스 설정값으로 사용할 수 있습니다.
// JSON 형식

{
  ...
  "Parameters": {
    "S3NameParam": {
      "Type": "String",
      "Default": "mybucket",
      "Description": "Name for your AWS S3 bucket",
      "MinLength": 5,
      "MaxLength": 30
    }
  },
  ...
}

 

  • Resources
    • 위 section들과 다르게 유일하게 optional이 아닌, 필수적으로 들어가야 하는 section입니다.
    • AWS 리소스를 생성 및 수정하기 위해 작성하는 곳으로, 500개 이상의 리소스를 지원하고 커스터마이징도 가능합니다.
// JSON 형식

{
  ...
  "Resources": {
    "S3Bucket": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "AccessControl": "PublicRead",
        "BucketName": {"Ref" : "S3NameParam"} // 위 Parameters section에서 정의한 "S3NameParam" 사용
      },
      "DeletionPolicy": "Retain"
    }
  },
  ...
}
// YAML 형식

Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType:
        Ref: InstanceType
      SecurityGroups:
        - Ref: InstanceSecurityGroup
      KeyName:
        Ref: KeyName
      ImageId:
        Fn::FindInMap:
        - AWSRegionArch2AMI
        - Ref: AWS::Region
        - Fn::FindInMap:
        - AWSInstanceType2Arch
        - Ref: InstanceType
        - Arch

 

 


참고 문헌

 

코드형 인프라(IaC)란?

코드형 인프라(Infrastructure as Code, IaC)는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말합니다.

www.redhat.com

 

AWS CloudFormation으로 인프라 자동화 시작하기

이 글은 CloudFormatin을 처음으로 시작하는 사용자를 위한 안내서이다. 이미 CloudFormation을 능숙하게 사용하고 있다면 사용 방법에 대한 설명은 대충 보고, 실무에서 어떻게 사용하는지에 대해서 주

medium.com

 

AWS CloudFormation 작동 방식 - AWS CloudFormation

템플릿 파일을 로컬에 저장하도록 지정한 경우 CloudFormation은 해당 파일을 AWS 계정의 S3 버킷에 업로드합니다. CloudFormation은 템플릿 파일을 업로드하는 리전별로 버킷을 생성합니다. AWS 계정에서

docs.aws.amazon.com

 

반응형

댓글