Infra/AWS
[AWS] CloudFormation 이란 - "IaC : 인프라를 코드로"
민돌v
2023. 5. 11. 16:23
인프런 CloudNet@와 함께하는 AWS 네트워킹 입문 강의를 보고 정리한 글입니다.
☁️ CloudFormation 이란
→ AWS 클라우드 서비스 중 하나로 “인프라를 코드 기반으로 정의”하고 선언하여 자원을 생성하거나 삭제하는 기능을 제공하는 IaC 서비스입니다.
💡Iac (Infrastructure as Code)란 : 인프라를 코드로 정의한 것
CloudFormation 에서 코드로 인프라를 정의한 텍스트 파일을 템플릿이라고 합니다.
💡 CloudFormation 사용 순서
AWS CloudFormation 의 순서는 다음과 같습니다.
- 먼저 템플릿 파일을 작성해야합니다.
- 템플릿이란, CloudFormation에서 "JSON" or "YAML" 언어로(코드로) AWS 클라우드 인프라를 선언한 텍스트 파일을 말합니다.
- 템플릿 파일을 CloudFormation 프레임워크에 제출합니다.
- CloudFormation 은 전달받은 템플릿으로 스택을 생성합니다.
- 여기서 스택이란, 다수의 AWS 클라우드 인프라들을 정의하는 단위를 말합니다.
- 스택을 생성한다는것은, 템플릿에 의해 정의된 AWS 클라우드 인프라들을 순차적으로 생성한다는 의미를 가집니다.
- 스택을 삭제하면 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
2) 스택 세부 지정
스택 이름과, 사용할 ssh pem key를 선택합니다.
- 그리고 스택옵션 [다음] - [전송] 누르면 생성됩니다.
- 만든 후 리소스 탭을 누르면 - 생성중인 AWS 클라우드 자원을 볼 수 있습니다. (EC2 인스턴스 + 보안 그룹)