CloudFormation으로 EC2 인스턴스 생성하기

y001·2025년 3월 29일
0
post-thumbnail

시작하면서

– 보안 그룹 설정과 UserData를 활용한 자동 웹 서버 설치까지

앞선 글들에서 VPC, 서브넷, 인터넷 게이트웨이, 라우팅 테이블까지 네트워크 인프라를 구성했다.
이제 그 위에 EC2 인스턴스를 올릴 차례다. 이번 글에서는 EC2 인스턴스를 퍼블릭 서브넷에 생성하고, 보안 그룹을 연결한 뒤, UserData를 활용해 웹 서버까지 자동으로 설치해보자.


EC2 인스턴스를 띄우기 위한 준비 요소

CloudFormation으로 EC2 인스턴스를 만들려면 다음 리소스가 필요하다.

  • KeyName: SSH 접속을 위한 키 (2편에서 Parameters로 정의함)
  • LatestAmiId: 사용할 AMI 이미지 ID (2편에서 정의)
  • SubnetId: EC2를 배치할 퍼블릭 서브넷
  • SecurityGroup: 외부에서 접근 가능한 포트를 열어줌
  • UserData: 인스턴스 부팅 시 자동 실행할 초기 설정 스크립트


1. 보안 그룹 생성

보안 그룹은 EC2 인스턴스의 방화벽 역할을 한다. HTTP(80), HTTPS(443), SSH(22) 포트를 열어두면, 웹 서버 테스트와 원격 접속이 가능해진다.

MyPublicSecugroup:
  Type: AWS::EC2::SecurityGroup
  Properties:
    GroupDescription: Permit HTTP(80), HTTPS(443) and SSH(22)
    GroupName : MyPublicSecugroup
    VpcId: !Ref MyVPC
    Tags:
      - Key: Name
        Value: MyPublicSecugroup
    SecurityGroupIngress:
      - IpProtocol: tcp
        FromPort: 80
        ToPort: 80
        CidrIp: 0.0.0.0/0
      - IpProtocol: tcp
        FromPort: 443
        ToPort: 443
        CidrIp: 0.0.0.0/0
      - IpProtocol: tcp
        FromPort: 22
        ToPort: 22
        CidrIp: 0.0.0.0/0

EC2를 테스트 목적이 아니라 실제 운영 환경에 배포할 땐 22번 포트는 제한하는 게 좋다.


2. EC2 인스턴스 생성

EC2를 퍼블릭 서브넷에 생성하고, 퍼블릭 IP를 할당하며, 보안 그룹을 연결한다. 그리고 UserData 스크립트를 통해 EC2 부팅 시 자동으로 Apache 웹 서버를 설치하고 페이지를 만든다.

MyWeb:
  Type: AWS::EC2::Instance
  DependsOn: MyIGWAttachment
  Properties:
    ImageId: !Ref LatestAmiId
    InstanceType: t3.micro
    KeyName: !Ref KeyName
    Tags:
      - Key: Name
        Value: MyWeb
    NetworkInterfaces:
      - DeviceIndex: 0
        SubnetId: !Ref MyPublicSubnet
        AssociatePublicIpAddress: true
        PrivateIpAddress: 10.0.1.101
        GroupSet:
          - !Ref MyPublicSecugroup
    UserData:
      Fn::Base64: !Sub |
        #!/bin/bash
        hostnamectl --static set-hostname MyWeb
        echo "toor1234." | passwd --stdin root
        sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
        sed -i "s/^#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
        systemctl restart sshd
        yum install -y httpd
        systemctl enable --now httpd
        echo "<h1>MyWeb test web page</h1>" > /var/www/html/index.html
  • AssociatePublicIpAddress: true로 퍼블릭 IP 자동 할당
  • DependsOn: MyIGWAttachment는 인터넷 연결 보장
  • UserData는 EC2가 부팅되자마자 자동 실행됨 (웹 서버 설치 + HTML 페이지 작성)

3. 정상 동작 확인

  1. CloudFormation에서 스택이 정상적으로 생성됐는지 확인
  2. EC2 퍼블릭 IP 복사 → 브라우저에서 http://<퍼블릭_IP> 접속
  3. 아래처럼 Apache 웹 서버의 기본 페이지가 아니라, 커스텀한<h1>MyWeb test web page</h1> 메시지가 나와야 성공

  1. 또는 EC2에 SSH 접속해서 ping 8.8.8.8, curl localhost로도 상태 확인 가능


전체 구성 요약

0개의 댓글