클라우드 공부

CloudFormation 이해 및 기본 생성

jjury 2024. 10. 4. 00:15

CloudFormation 이해 및 기본 생성

클라우드에 대해 공부해보고자 인프런의 "AWS 클라우드 서비스 인프라 구축 이해와 해킹, 보안" 강의를 수강하면서 필기한 내용입니다.

CloudFormation이란?

  • 인프라의 구성을 json, yaml 등으로 코딩하여 자동 배포할 수 있는 도구
  • AWS 인프라 리소스를 서로 긴밀하게 통합할 수 있으며, AWS에서만 활용 가능
  • 템플릿으로 생성할 수 있으며, 스택을 통해 변경 사항을 다른 리소스에 미치는 영향을 미리 파악하고 리소스간의 종속성을 관리할 수 있음
  • AWS::*, Alexa::* 및 Cuatom::*과 같은 네임스페이스의 리소스 공급자에서 AWS CloudFormation을 사용하는 경우 추가 요금은 부과되지 않음
  • 타사 리소스 공급자(AWS::*, Alexa::* 또는 Cuatom::* 제외)

CloudFormation 스택 생성

생성 전에 ec_test1.yaml 파일을 다운로드

ec_test1.yaml 코드

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:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref LatestAmiId
      InstanceType: t2.micro
      KeyName: !Ref KeyName
      Tags:
        - Key: Name
          Value: WebServer
      SecurityGroups:
        - !Ref MySG
      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

  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​

 

스택 생성

템플릿 파일 업로드를 선택해 다운 받은 yaml 파일을 업로드 한다.

yaml 파일을 업로드할 때 주의해야 할 점은 파일을 수정하고 이름을 변경하지 않으면 기존에 있던 파일을 적용하기 때문에 파일 내용을 수정했다면 파일이름을 변경해주어야 한다.

스택 세부 정보 지정

스택 옵션 구성에서는 딱히 건들 것이 없음으로 다음

이후 전송을 선택

생성이 완료되기까지 기다리고 VPC로 이동해 보안그룹을 보면 보안 그룹이 생성되어 있는 것을 확인할 수 있다.

스택에서 이벤트를 보면 몇몇 이벤트가 완료 표시가 뜬다면 인스턴스가 생성이 된 것을 확인 할 수 있다.

이전처럼 인스턴스를 하나 하나 지정하지 않고도 코드들만으로 인스턴스를 배포한 것이다.

할당 된 ip를 입력해 이동하면 주어진 ip로 접속하게 되면 yaml 파일에서 user data에 코딩한 html 코드가 출력된다.

스택 삭제 시에는 관련된 리소스가 모두 삭제되기 때문에 관리자의 입장이라면 반드시 조심해야 한다.