Infra/AWS

[AWS] CloudFormation 이란 - "IaC : 인프라를 코드로"

민돌v 2023. 5. 11. 16:23
인프런 CloudNet@와 함께하는 AWS 네트워킹 입문 강의를 보고 정리한 글입니다.

 

☁️ CloudFormation 이란

→ AWS 클라우드 서비스 중 하나로 “인프라를 코드 기반으로 정의”하고 선언하여 자원을 생성하거나 삭제하는 기능을 제공하는 IaC 서비스입니다.

 

💡Iac (Infrastructure as Code)란 : 인프라를 코드로 정의한

 

 

CloudFormation 에서 코드로 인프라를 정의한 텍스트 파일을 템플릿이라고 합니다.


💡 CloudFormation 사용 순서

AWS CloudFormation 의 순서는 다음과 같습니다.
  1. 먼저 템플릿 파일을 작성해야합니다.
    • 템플릿이란, CloudFormation에서   "JSON" or "YAML" 언어로(코드로) AWS 클라우드 인프라를 선언한 텍스트 파일을 말합니다.
  2. 템플릿 파일을 CloudFormation 프레임워크에 제출합니다.
  3. CloudFormation 전달받은 템플릿으로 스택을 생성합니다.
    • 여기서 스택이란, 다수의 AWS 클라우드 인프라들을 정의하는 단위를 말합니다.
  4. 스택을 생성한다는것은, 템플릿에 의해 정의된 AWS 클라우드 인프라들을 순차적으로 생성한다는 의미를 가집니다.
  5. 스택을 삭제하면 AWS 클라우드 인프라를 순차적으로 삭제됩니다.

 

1) 스택생성

템플릿 파일은 강의내용을 가져왔습니다. 

📌 stack yaml 파일

더보기
# Parameters 블럭을 통해 동적으로 값을 입력받을수 있음
Parameters:
    #각자 사용하는 프라이빗 키를 입력받아 사용
    KeyName:
        Description: Name of an existing EC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameter
        Type: AWS::EC2::KeyPair::KeyName
        ConstraintDescription: must be the name of an existing EC2 KeyPair.

    #유형별로 코드값 존재 - 최신 코드값을 동적으로 입력받아 사용할 수 있도록 설정
    LatestAmiId:
        Description: (DO NOT CHANGE)
        Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
        Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
        AllowedValues:
            - /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2

# Resources 블록을 통해 사용할 AWS 클라우드 인프라를 정의
Resources:
    MyInstance:
        Type: AWS::EC2::Instance
        Properties:
            ImageId: !Ref LatestAmiId
            InstanceType: t2.micro
            KeyName: !Ref KeyName
            Tags:
                - Key: Name
                  Value: WebServer
            SecurityGroups:
                - !Ref MySG
            # UserData 를 통해 인스턴스가 부팅할 때 - 자동으로 수행할 명령어를 정의 [순차 실행]
            UserData:
                Fn::Base64:
                  !Sub |
                    #!/bin/bash
                    yum install httpd -y   
                    systemctl start httpd && systemctl enable httpd
                    echo "<h1>Test Web Server</h1>" > /var/www/html/index.html

    #보안그룹 정의 - 모든 IP 대역에 대해 SSH 트래픽과 HTTP 트래픽을 허용한다.
    MySG:
        Type: AWS::EC2::SecurityGroup
        Properties:
            GroupDescription: Enable HTTP access via port 80 and SSH access via port 22
            SecurityGroupIngress:
                - IpProtocol: tcp
                  FromPort: 80
                  ToPort: 80
                  CidrIp: 0.0.0.0/0
                - IpProtocol: tcp
                  FromPort: 22
                  ToPort: 22
                  CidrIp: 0.0.0.0/0

 

CloudFormation 스택 생성

 

 

2) 스택 세부 지정

스택 이름과, 사용할 ssh pem key를 선택합니다.

  • 그리고 스택옵션 [다음] - [전송] 누르면 생성됩니다.
  • 만든 리소스 탭을 누르면 - 생성중인 AWS 클라우드 자원을 볼 수 있습니다. (EC2 인스턴스 + 보안 그룹)