IaC 의 두 종류 : 1. Provisioning Tool (프로비저닝 도구) 2. SCM Tool( 구성관리도구)
1. Provisioning Tool -> Terraform, CloudFormation
모든 가상 리소스(가상 서버, 로드 밸런서, 스토리지, 네트워크 계층 등)를 코드로 관리한다.
2. 시스템 구성에 초점을 두는 구성관리(Configuration System) - Ansible
운영체제 구성부터 패키지 설치 및 애플리케이션 배포까지 자동화
3. 클라우드 포메이션
3-1. 클라우드 포메이션 구성요소
1) Template : JSON 또는 YAML 형식의 텍스트 파일로 .json, .yaml, .template, .txt 등 모든 확장명으로 파일을 저장할 수 있다. CloudFormation에서는 템플릿을 AWS 리소스 구축을 위한 블루 프린트로 사용한다.
2) Stack : CloudFormation으로 생성한 AWS리소스 집합으로, Stack 단위로 생성, 수정, 삭제가 가능하다. 리소스간에 의존관계가 있으면 순서에 맞게 생성되고, Stack을 사겢하면 관련 리소스가 모두 삭제된다.
3) Change Set : Stack에서 실행중인 리소스를 변경해야하는 경우 스택을 업데이트한다. 리소스를 변경하기 전에 제안된 변경세트를 생성할 수 있다.
3-2. 클라우드 포메이션 동작방식
Template 코드를 읽어 Stack을 생성
클라우드 포메이션은 JSON 또는 YAML파일로 구축하려는 AWS 아키텍쳐를 정확히 기술할 수 있다.
이런 파일을 작성해 간단히 업로드하면 이파일을 실행해 AWS 리소스를 자동으로 생성하고 갱신한다.
## Template 특징
{
"AWSTemplateFormatVersion": "version date",
"Description" : "템플릿 작업 요약을 기술",
"Resources" : {}, // AWS 서비스를 초기화하고 서비스의 구성이 무엇인지 기술
// ex) InternetGateway, Vpc, 보안그룹, EC2 등.
"Parameters" : {}, //SSH로 접근하기 위해 SSH 키 페어와 같은 추가적인 정보제공
"Mapping" : {}, //리전별로 어떤 AMI를 사용할지 Mapping을 통해 정의할 수 있다.
"Conditions": {}, // 조건부 논리를 추가하는 데 사용한다.
"Metadata": {}, // 임의의 정보를 리소스에 추가하는 데 사용
"Outputs":{},
// EC2 서버 IP주소와 같이 템플릿 실행 후 유익한 정보를 출력하거나 추출하는데 사용
// ex) 웹 애플리케이션 접속 url, SSH로 인스턴스에 접근할 수 있는 공인 IP주소 출력가능
}
## 예시Public Subnet2, Private Subnet2, NAT
VPC - InternetGateway - AttachGateway - EIP - NatGateway - PrivateRoute(PrivateRouteTable)- PrivateSubnet1,2
AWSTemplateFormatVersion: 2010-09-09
Description: Deploy a VPC
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: true
Tags:
- Key: Name
Value: Lab VPC
InternetGateway:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Name
Value: Lab Internet Gateway
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
PublicSubnet1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.0.0/24
AvailabilityZone: !Select
- '0'
- !GetAZs ''
Tags:
- Key: Name
Value: Public Subnet 1
PublicSubnet2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.2.0/24
AvailabilityZone: !Select
- '1'
- !GetAZs ''
Tags:
- Key: Name
Value: Public Subnet 2
# 1
PrivateSubnet1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.1.0/24
AvailabilityZone: !Select
- '0'
- !GetAZs ''
Tags:
- Key: Name
Value: Private Subnet 1
PrivateSubnet2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.3.0/24
AvailabilityZone: !Select
- '1'
- !GetAZs ''
Tags:
- Key: Name
Value: Private Subnet 2
PublicRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: Public Route Table
PublicRoute:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway
PublicSubnetRouteTableAssociation1:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnet1
RouteTableId: !Ref PublicRouteTable
PublicSubnetRouteTableAssociation2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PublicSubnet2
RouteTableId: !Ref PublicRouteTable
# nat1
NATGW01:
Type: AWS::EC2::NatGateway
Properties:
AllocationId: !GetAtt EIP.AllocationId
SubnetId: !Ref PrivateSubnet1
# nat2
EIP:
DependsOn: AttachGateway
Type: AWS::EC2::EIP
Properties:
Domain: vpc
# 2
PrivateRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: Private Route Table
# nat 3
PrivateRoute:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PrivateRouteTable
DestinationCidrBlock: 0.0.0.0/0
NatGatewayId: !Ref NATGW01
# 3
PrivateSubnetRouteTableAssociation1:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PrivateSubnet1
RouteTableId: !Ref PrivateRouteTable
PrivateSubnetRouteTableAssociation2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref PrivateSubnet2
RouteTableId: !Ref PrivateRouteTable
Outputs:
VPC:
Description: VPC
Value: !Ref VPC
AZ1:
Description: Availability Zone 1
Value: !GetAtt
- PublicSubnet1
- AvailabilityZone
4. AWS 클라우드 포메이션 디자이너 - GUI로 작업가능
GUI로 클라우드 포메이션 템플릿을 작성하고 편집하는 도구
5. AWS 클라우드 포메이션 예제를 많이 봐
'DevOps > Docker, Jenkins, Ansible, Terraform' 카테고리의 다른 글
Terraform 테라폼, 여러 클라우드의 이기종 환경에서 프로비저닝 위함. (0) | 2023.02.05 |
---|---|
Ansible-Playbook (0) | 2023.02.04 |
Jenkins, Packer, Ansible의 역할 (0) | 2023.01.24 |
Docker와 Vmware, Virtualbox 차이점 (0) | 2023.01.23 |
Jenkins, Docker, SpringBoot, React or Vue (0) | 2023.01.08 |