카이도스의 Tech Blog

AWS CloudFormation 본문

AWS

AWS CloudFormation

카이도스 2023. 5. 17. 18:51
728x90
반응형
현재 근무중인 회사에서는 aws+IDC 하이브리드 구성으로 사용중이다.
aws 환경 중 쿠버네티스의 경우 기존 구성이 문제가 많아 EKS로 변환을 고려중이다.
관련해서 EKS dev → stage → production 순서로 구축 후 기존 서비스를 마이그레이션할 예정이다.
첫번째로 dev 환경을 구성해야하는데, cloudformation을 통해 진행하려고한다.
그러다보니 너무 어려워 스터디를 병행하며 진행해야할것같다.

항상 그렇듯 CloudNet@-가시다(Gasida)님의 스터디를 기준으로 작성할것이다.

1.  AWS CloudFormation Introduction

What is CloudFormation?

    • AWS Infrastructure를 개략적으로 설명하여 선언하는 방법 (Infrastructure as Code - IaC) - 데브옵스로 가는 과정!
    • CloudFormation은 정의한 대상에 대해 자동으로 순서대로 자원을 생성
    • 아키텍처의 전체 정의가 하나의 파일에 있고 AWS에 제출하여 AWS가 모든 리소스를 관리


Benefits of AWS CloudFormation

1. Infrastructure as code(Iac)

  • 수동으로 리소스를 만들지 않아도 된다.
  • Github를 활용하여 제어
  • 코드를 통하여 인프라 변경사항을 검토 가능

2. Cost

  • 리소스 비용을 쉽게 추정할 수 있다.
  • 필요한 경우만 CloudFormation을 배포하고 필요하지 않을 경우 삭제하여 비용 절감 -
    ex)오후 5시에 자원을 삭제하고, 다음날 오전 8시에 자원을 생성

3. Productivity

  • 클라우드 상 인프라를 즉시 삭제하거나 재 생성이 가능
  • Diagram 기능으로 Template 구성 가능 (Automated Generation)
  • Declarative Programming (선언적 프로그래밍)

4. Don’t re-invent the wheel (불필요하게 처음부터 다시 하지 마라!!!)

  • 웹 상에 기존 Template을 활용하라.
  • 다양한 정보와 문서가 많이 있다.

AWS CloudFormation vs Ansible vs Terraform

  • CloudFormation은 AWS의 기본 서비스이며 항상 최신 기능과 옵션을 포함
  • CloudFormation은 상태 기반 동작으로 각 상태 별 도달 상황을 정확히 파악
  • Ansible과 Terraform은 명령 기반으로 스크립트를 작성해야 한다. (스택 조정에 어려움)
  • Ansible과 Terraform은 새로운 서비스가 추가될 때마다 업데이트
  • AWS 인프라 생성 작업은 CloudFormation을 추천

Summary of How CloudFormation works

  • CloudFormation은 Template를 업로드 한다. (S3 or Direct)
  • 업로드 된 상태에서 Template를 편집을 할 수 없고 다른 Template로 업데이트 하여야 한다.
  • CloudFormation 스택을 삭제하면 하위 모든 리소스가 삭제

2.  AWS CloudFormation First Hands-On

2-1 YAML Tutorial

Resources:
  WebServer:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-a4c7edb2
      InstanceType: t2.micro
      KeyName: !Ref KeyName
      SecurityGroups:
        - !Ref WebServerSecurityGroup
      UserData:
        Fn::Base64: |
           #!/bin/bash
           yum update -y
           yum install -y httpd24 php56 mysql55-server php56-mysqlnd
           service httpd start
           chkconfig httpd on
           groupadd www
           usermod -a -G www ec2-user
           chown -R root:www /var/www
           chmod 2775 /var/www
           find /var/www -type d -exec chmod 2775 {} +
           find /var/www -type f -exec chmod 0664 {} +
           echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

  WebServerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: "Enable HTTP access via port 80 + SSH access"
      SecurityGroupIngress:
      - CidrIp: 0.0.0.0/0
        FromPort: '80'
        IpProtocol: tcp
        ToPort: '80'
      - CidrIp: !Ref SSHLocation
        FromPort: '22'
        IpProtocol: tcp
        ToPort: '22'
  • YAML은 CloudFormation Template 작성하는데 사용하는 언어로 사용하기 쉽다.
  • YAML은 직관적인 표현으로 템플릿을 쉽게 읽을 수 있다.
  • Key value Pairs (key: value 형태)
  • Nested Objects (Object 안에 Object 존재)
  • Support Arrays (여러 요소가 존재하는 배열 형태 지원 - (마이너스) 입력 후 여러 요소 표현)
  • Multi line strings (여러 줄로 표현 가능 | (파이프라인)입력 후 여러 줄로 표현)

2-2 Creating & Update an S3 Bucket using CloudFormation

  • S3 Bucket 생성
---
Resources:
  MyOngS3Bucket:
    Type: "AWS::S3::Bucket"
    Properties: {}
  • Properties를 정의하지 않으면, {}로 표기

  • S3 Bucket 중단이나 교체가 없는 업데이트
---
Resources:
  MyOngS3Bucket:
    Type: "AWS::S3::Bucket"
    Properties:
      AccessControl: PublicRead
  • AccessControl을 추가 (PublicRead) - 아래부터는 실습 진행하지 않고 스킵

  • AccessControl을 수정하여 업데이트 시 Replacement는 False (즉, 교체 없이 바로 수정)

  • 퍼블릭 엑세스 권한

2-3. S3 Bucket 중단이나 교체가 있는 업데이트

---
Resources:
  MyOngS3Bucket:
    Type: "AWS::S3::Bucket"
    Properties:
      AccessControl: PublicRead
      BucketName: "insert-some-random-string-here-599956"
  • BucketName을 수정할 경우

  • BucketName을 수정하여 업데이트 시 Replacement는 True (즉, 교체를 위해 삭제 후 재생성)

  • 주의!!! S3 Bucket이 삭제되고 재생성 될 때 데이터 백업이 되지 않음.

 


2-4. CloudFormation Template Options

  • 태그 (Tags): 생성된 모든 리소스가 동일한 태그를 공유
  • 권한 (Permissions): 계정 별 CloudFormation 수행 역할 제공
  • 알림 옵션 (Notification Options): 이메일 또는 SNS로 알림을 보냄
  • 스택 정책 (Stack Policy): 스택 업데이트 중 업데이트되지 않도록 하는 리소스 정의
  • 롤백 구성 (Rollback on Failure): 실패 시 CloudFormation 이전 상태로 롤백
  • 제한 시간 (Timeouts): 특정 시간이 지나면 CloudFormation이 실패

2-5. CloudFormation Designer

  • 시각적으로 CloudFormation을 설계
  • CloudFormation Template을 빠르게 작성하고 확인하는 기능 제공

  • Drag & Drop으로 서비스 생성 및 서비스 간 연결 (EC2 Instance, EIP, Security Group)
  • 기존 템플릿을 넣어 Designer에서 확인 가능

  • 완료되면 유효성 검사 후 CloudFormation으로 업로드 가능

2-6. Formation Building Blocks

Template Components

  • Resources: 템플릿에 선언된 AWS 리소스들 (필수)
  • Parameters: 동적으로 입력 받는 매개 변수 (옵션)
  • Mappings: 정적으로 지정한 변수 매핑 (옵션)
  • Outputs: 스택의 속성을 반환되는 값을 설명 (옵션)
  • Conditionals: 특정 리소스 속성에 값이 할당되는지 또는 생성되는지 여부를 제어 (옵션)
  • Metadata: 템플릿에 대한 추가 정보를 제공하는 객체 (옵션)
728x90
반응형

'AWS' 카테고리의 다른 글

AWS CLI 자격증명  (0) 2023.05.16
AWS 비용 최적화(예약 인스턴스, savings plans)  (0) 2023.05.10
ALB- S3 로그 연동  (0) 2023.04.04
AWS MongoDB backup - S3  (0) 2023.04.04
EC2-cloudwatch 로그 연동  (0) 2023.03.29
Comments