IaC-Cloud Infra Provisioning Pt. 1 (AWS CloudFormation을 중심으로)

구민구민·2022년 12월 27일
0

DevOps

목록 보기
1/2

IaC - Infrastructure as Code

IaC란 코드로 인프라를 프로비저닝 및 관리하는 기술이다.
기존 물리서버환경(On-Premise)은 인프라의 확장, 관리 등이 어려웠다. 반면 클라우드 컴퓨팅 환경에서는 인프라의 확장(Extension), 프로비저닝(Provision), 할당(Allocate) 등의 인프라 관리가 H/W의 가상화에 의해 쉽게 이루어 질 수 있다.
이러한 클라우드 환경에서 서비스들의 규모가 거대해짐에 따라 인프라의 관리 비용이 커졌다. 고가용성을 위한 오토스케일링(Auto-Scaling), 새로운 마이크로서비스의 인프라 프로비저닝 등 사람에 의한 수동관리가 힘들어진다. 이런 배경에서 사람이 직접 관리하기보다 코드(Code)를 통해 인프라를 일관되게, 자동으로 관리하자는 개념(IaC)이 주목받았다.

예시 :

  • 테라폼(Terraform)
  • 플루미(Pulumi)
  • AWS CloudFormation

AWS CloudFormation

IaC를 직접 실습해보기 위해 AWS에서 지원하는 IaC 서비스인 AWS CloudFormation을 이용하여 인프라를 프로비저닝 해보고자 한다.

프로비저닝할 리소스 :
1. VPC
2. Public Subnet 1
3. EC2 instance 1
4. 그 외 InternetGateway, SecurityGroup, ..

CloudFormation은 관리할 AWS의 리소스들을 템플릿(Code)으로서 관리하고, 이를 논리 레벨의 리소스인 스택(Stack)을 생성한 후, 실제 리소스로 프로비저닝하는 과정을 거친다.

  1. 템플릿 Template(코드) 작성
  2. 스택/실제 리소스 생성
  3. 드리프트 Drift(변경사항) 감지 및 Report
  4. 체인지셋 ChangeSet(변경사항)을 템플릿에 적용

1. 템플릿 작성

편의를 위해 EC2에 연결된 AWS Cloud9 IDE에서 템플릿 작성 및 AWS CLI 작업을 진행하였다.
CloudFormation에서는 자체 언어를 이용해 YAML, JSON 형태로 템플릿을 작성해야 한다.
템플릿 구조

  • Description : 템플릿 설명 string
  • Parameters : 템플릿 생성 run time 중에 전달할 value
  • Resources : 생성할 스택 리소스와 속성들(properties)
  • Outputs : 스택 생성 성공 후, 스택 속성으로 반환할 값\

템플릿 예시

# simple-infrastructure-template.yaml
Description: Simple Infrastructure Template!
Parameters:
  SomeValue1:
    Description: CIDR Block for ...
    Type: String				#타입 선언
    Default: 10.199.0.0/16		#기본값
    AllowedValues:				#허용 값 리스트
      - 10.199.0.0/16
  SomeValue2:
    Description: EC2 instance type for ..
    Type: String
    Default: t2.nano
    AllowedValues:
      - t2.nano
      - t2.micro
      - t2.small
  KeyName:
    Description: Keyname for the keypair, must select existing key
    Type: 'AWS::EC2::KeyPair::KeyName'
 
Resources:
  VPC:
    Type: 'AWS::EC2::VPC'	#AWS 객체 타입
    Properties:
      CidrBlock: !Ref SomeValue1	# Parameter 참조
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
      Tags:
        - Key: Application
          Value: !Ref 'AWS::StackId'
        - Key: Name
          Value: CloudFormation Trial Env
  Subnet:
    Type: 'AWS::EC2::Subnet'
    DependsOn: VPC			#DependsOn 통해 순차 생성
    ...
  InternetGateway:
  AttachGateway:
  RouteTable:
  Route:
  SubnetRouteTableAssociation:
  NetworkAcl:
  InboundHTTPNetworkAclEntry:
  InboundSSHNetworkAclEntry:
  InboundResponsePortsNetworkAclEntry:
  OutBoundHTTPNetworkAclEntry:
  OutBoundHTTPSNetworkAclEntry:
  OutBoundResponsePortsNetworkAclEntry:
  SubnetNetworkAclAssociation:
  IPAddress:
    Type: 'AWS::EC2::EIP'
  InstanceSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
  WebServerInstance:
    Type: 'AWS::EC2::Instance'
Outputs:
  URL:
    Value: !Join 
      - ''
      - - 'http://'
        - !GetAtt 
          - WebServerInstance
          - PublicIp
    Description: Newly created application URL


cf-template-eg-dev_kyoomin

참고사항

  • integer, string, boolean 등 yaml에서 지원하지 않는 데이터 타입은 'AWS::EC2::Instance' 와 같은 형태의 AWS 객체 참조를 통해 지정한다.
  • DependsOn 키워드를 통해 순차적인 리소스 생성이 가능하다.
    - VPC 생성 후, Subnet 및 EC2 Instance 생성하는 경우
    - DB 생성 후, WAS 생성 후, WebServer를 생성하는 경우
  • 리소스 별 Tag를 통해 이후 버전/배포 관리 등의 작업이 용이하도록 설정하는 것이 바람직하다.

2. 스택/실제 리소스 생성

앞에 정의한 템플릿을 AWS CLI를 통해 실제 스택으로 생성한다.
$aws cloudformation create-stack 을 이용하여 다음과 같이 생성할 수 있다.

$aws cloudformation create-stack --stack-name SIMPLE-STACK \
--parameters ParameterKey=KeyName,ParameterValue=KEY1-12345-12345 \
ParameterKey=SomeValue2,ParameterValue=t2.micro \
--template-body file://simple-infrastructure-template.yaml

cf-create-stack-eg-dev_kyoomin

create-stack 인자들

  • stack-name : 생성할 스택 이름을 설정한다.
  • parameters : 템플릿에서 선언한, run-time에 전달할 값들을 key-value형태로 다음과 같이 전달한다.
    - EC2::KeyPair::KeyName : $aws ec2 describe-key-pairs 명령을 통해 로컬의 키페어들을 확인할 수있다.
  • template-body : 스택으로 생성할 템플릿(yaml, json)을 지정한다.

스택 생성 후, $aws cloudformation describe-stacks 명령 또는 AWS Console의 CloudFormation 대시보드, EC2 대시보드를 통해 생성된 스택과 리소스들을 확인할 수 있다.
cf-stack-eg-dev_kyoomin

cf-ec2-eg-dev_kyoomin


참고자료

0개의 댓글

관련 채용 정보