
– 보안 그룹 설정과 UserData를 활용한 자동 웹 서버 설치까지
앞선 글들에서 VPC, 서브넷, 인터넷 게이트웨이, 라우팅 테이블까지 네트워크 인프라를 구성했다.
이제 그 위에 EC2 인스턴스를 올릴 차례다. 이번 글에서는 EC2 인스턴스를 퍼블릭 서브넷에 생성하고, 보안 그룹을 연결한 뒤, UserData를 활용해 웹 서버까지 자동으로 설치해보자.
CloudFormation으로 EC2 인스턴스를 만들려면 다음 리소스가 필요하다.
Parameters로 정의함)
보안 그룹은 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번 포트는 제한하는 게 좋다.
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 페이지 작성)http://<퍼블릭_IP> 접속 <h1>MyWeb test web page</h1> 메시지가 나와야 성공
ping 8.8.8.8, curl localhost로도 상태 확인 가능
