[AWS] CloudFormation
CloudFormation은, 인프라를 코드로 처리하여 AWS 및 서드 파티 리소스를 모델링, 프로비저닝 및 관리할 수 있다.
이를 사용하기 위해, 우선 템플릿 파일을 생성해보자
1. 템플릿 파일 생성
visual studio code를 설치한 후, 열어준다.
왼쪽 5번째 사각 버튼을 클릭한 후, CloudFormation을 설치해준다.
새 파일을 만들어준다. 필자는 1_lab2.yml이라는 파일을 생성하였다.
파일을 생성할 때, 주의할 점은 뒤에 확장명이 yml 혹은 yaml으로 끝나야 한다는 점이다.
Parameters:
KeyName:
Description: Name do an esisting RC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameters
Type: AWS::EC2::KeyPair::KeyName
ConstraintDescription: must be the name of an existing EC2 KeyPair.
Resources:
MyInstance: # EC2 인스턴스 이름
Type: AWS::EC2::Instance # EC2 인스턴스
Properties:
ImageId: 본인 ami ID
InstanceType: t2.micro # 인스턴스 유형
KeyName: !Ref KeyName # 키 페어 참조
Tags: # 태그
- Key: Name
Value: WebServer
SecurityGroups: # EC2에 연결될 보안그룹 지정
- !Ref MySG # MySG라는 보안그룹 참조
UserData:
Fn::Base64:
!Sub |
#!/bin/bash
yum install httpd -y # apache 설치
systemctl start httpd # apache 실행
echo "<h1>Test Web Server</h1>" > /var/www/html/index.html # Test Web Server이라는 문구를, /var/www/html/index.html 파일 안에 넣기
MySG: # 보안그룹 이름
Type: AWS::EC2::SecurityGroup # 보안그룹
Properties:
GroupDescription: Enable HTTP access via port 80 and SSH access via port 22 # 설명 (http 포트 80번, SSH 포트 22번을 열겠다.)
SecurityGroupIngress:
- IpProtocol: tcp # 80번 포트
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp # 22번 포트
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
코드를 입력해준 뒤, 저장해준다.
2. 스택 올리기
1단계에서 만든 템플릿 파일을 이용하여, 스택을 올린다.
CloudFormation -> 스택 -> 스택생성 클릭
준비된 템플릿 -> 템플릿 파일 업로드 클릭
1단계에서 만든 템플릿 파일을 업로드한다.
이후 다음 클릭
스택 이름 : 원하는 스택 이름으로 지정
KeyName : 본인의 키 페어로 지정
태그 또한 원하는 대로 달아준다.
이후 스택 생성
완료
실패 뜨면 삭제한 뒤,
오류 확인하고, 오류 수정 뒤 다시 스택 올리면 된다.
3. 확인
스택이 정상적으로 올라왔다면
생성된 EC2 인스턴스를 확인한다.
Xshell 새 세션에
EC2 인스턴스 퍼블릭 IP 입력
사용자 이름 : ec2-user
방법 : Public Key
설정 - 사용자 키 - RSA 키 불러온 후 연결
sudo su - : root로 전환
vim /var/www/html/index.html : /var/www/html/index.html 파일 열어서, 템플릿 파일에 입력한 대로 코드가 있는지 확인
systemctl restart httpd : httpd 재시작
systemctl status httpd : httpd 상태 확인
인스턴스의 퍼블릭 IP로 접속
정상적으로 웹 접속이 잘 되면 성공
4. 삭제
CloudFormation -> 스택 -> 원하는 스택 클릭 -> 삭제 버튼