본문 바로가기
INFRA/Operation

참고 : Terraform & Ansible외의 도구 개념 및 관계 - 2

by BTC_Dana 2022. 5. 2.

안녕하세요! 하씨가문의 영광입니다.

이전시간에는 Puppet & Chef를 다뤄봤는데요!

이번 시간에서는 AWS CloudFormation & SaltStack에 대해서 알아보겠습니다!


※ 목차

  1. AWS CloudFormation
  2. SaltStack

AWS CloudFormation
  • AWS 리소스를 생성하기 위한 각종 설정을 템플릿 파일로 만들어서 사용하는 도구입니다.
  • AWS 리소스를 모델링하고 설정하여 리소스 관리 시간을 줄이고 AWS에서 실행되는 애플리케이션에 더 많은 시간을 사용하도록 해 주는 서비스입니다.
  • 필요한 모든 AWS 리소스를 설명하는 템플릿을 생성하면 CloudFormation이 해당 리소스의 프로비저닝과 구성을 담당합니다.
  • AWS 리소스를 개별적으로 생성하고 구성할 필요가 없으며 어떤 것이 무엇에 의존하는 지 파악할 필요도 없습니다.

 

구성요소

Template

  • JSON 또는 YAML 형식의 텍스트 파일입니다. 
  • .json, .yaml, .template 또는 .txt 등 모든 확장명으로 파일을 저장할 수 있습니다.
  • CloudFormation에서는 템플릿을 AWS 리소스 구축을 위한 블루프린트로 사용합니다. 

Stack

  • CloudFormation으로 생성한 AWS 리소스 집합입니다.
  • Stack 단위로 생성 수정 삭제 가능합니다.
  • Stack을 삭제하면 관련 리소스가 모두 삭제됩니다.
  • 리소스 간에 의존관계가 있는 경우 순서에 맞게 생성됩니다.

Change Set

  • 스택에서 실행 중인 리소스를 변경해야 하는 경우 스택을 업데이트합니다.
  • 리소스를 변경하기 전에 제안된 변경 사항이 요약된 변경 세트를 생성할 수 있습니다.
  • 변경 세트를 사용하면 변경 사항을 구현하기 이전에 해당 변경이 실행 중인 리소스입니다.
  • 특히, 중요 리소스에 미치는 영향을 확인할 수 있습니다.

 

동작원리

  1. Template 작성
    • JSON/YAML 코드로 템플릿을 작성합니다.
    • .json, .yaml, .template, .txt 등 확장명으로 파일을 저장할 수 있습니다.
    • 5가지 유형
      • 템플릿 파라미터의 선택적 목록
      • 출력 값의 선택적 목록
      • 정적 구성 값을 조회하는 데 사용되는 데이터 테이블의 선택적 목록
      • AWS 리소스 및 해당 구성 값 목록
      • 템플릿 파일 형식 버전 번호
  2. Template 업로드
    • 작성한 템플릿을 Local 또는 S3 버킷에 저장하여 업로드 합니다.
  3. Stack 생성
    • 스택이라는 하나의 단위로 관련 리소스를 관리합니다.
    • 스택의 모든 리소스는 템플릿으로 정의되며, CloudFormation은 템플릿 코드를 읽어 스택을 생성합니다.
  4. Stack 설정 및 resource 생성
    • 템플릿에 정의된 리소스가 생성된 후 CloudFormation은 유저에게 스택이 생성되었다고 보고합니다.
    • 그러면 유저는 스택의 리소스를 사용할 수 있는 것입니다.

 


SaltStack
  • 원격 실행 도구구성 관리 시스템입니다.
  • 관리자는 원격 실행 기능을 사용하여 다양한 시스템에서 유연한 대상 시스템과 병렬로 명령을 실행할 수 있습니다.
  • 구성 관리 기능은 지정된 정책에 따라 인프라 구성요소를 빠르고 쉽게 안전하게 가져올 수 있는 클라이언트-서버 모델을 구축합니다.

 

SaltStack의 장점
  1. 일단 빠릅니다.
    • Server와 Agent 간 ZeroMQ를 통해 통신하는데, Agent 요청에 대해 비동기 병렬로 처리 하기 때문에 Agent가 많아져도 수 초안에 처리가 가능합니다.
  2. 구조가 심플합니다.
    • Server-Agent 기반의 매우 단순한 구조입니다.
    • 서버의 경우 DB 조차 사용하지 않습니다.
  3. 풍부한 모듈 지원
    • 인프라 환경 구성을 위한 거의 대부분의 작업을 지원하는 내장 모듈이 존재합니다.
    • 그리고 이를 이용해 다수의 서버를 섬세하게 제어하는게 가능합니다.
SaltStack Architecture

  1. Salt-Master
    • Saltstack에서 Server 역할을 담당합니다.
    • Master는 등록된 Minion에게 명령Publishing 하고 그 결과를 취합하여 보여주는 역할입니다.
    • 1대의 Single master가 Minion 수천대까지 관리 가능합니다.
  2. Salt-Minion
    • Agent의 역할이며, 구성 자동화를 하기 위한 대상 서버를 설치하면 됩니다.
    • Master의 명령을 기다리고 있다가 명령이 오면 그에 맞춰 작업을 수행하게 됩니다.
  3. ZeroMQ
    • Salt-master와 Salt-minion 간 통신에 ZeroMQ라는 비동기 메시징 라이브러리를 사용합니다.
    • 따로 설치해야 하는 것은 아니며 Salt-master를 설치하면 ZeroMQ도 함께 설치 됩니다.

 

SaltStack의 특징
  1. Python 기반
    • SaltStack 자체가 Python으로 개발되었으며, SaltStack에서 실행되는 모든 명령 실행 코드는 Python 기반의 Module Function으로 구현되어 있습니다.
    • 만약 사용자가 원하는 custom module로 구현하고 싶다면 Python 으로 개발하면 됩니다.
  2. YAML & Jinja2 포맷의 설정 파일
    • 자동화할 작업들을 명세하는 sls 파일들은 YAML 포맷을 기본으로 합니다.
    • Template 파일의 경우, 로직에 대한 처리는 Jinja2 template을 사용합니다.
    • Jinja의 경우 기존에 Django나 Flask 같은 프레임워크에서도 많이 사용된 기술이기 때문에 어렵지 않게 사용이 가능합니다.
  3. AES 암호화 통신
    • Salt-minion이 Master에 처음 등록될 때 minion은 master에게 자신의 public key를 전달하게 됩니다.
    • 그리고 master는 이 public key를 저장하고 해당 minion의 등록을 허락하는 절차를 거치게 됩니다.
    • 이후 master와 minion은 ZeroMQ를 통해 통신할 때 public keyAES key를 이용해 암호화 되어 통신하게 됩니다.

지금까지 AWS CloudFormation & SaltStack에 대해 알아보았습니다.
최근 날씨가 쌀쌀해지니 감기 조심하세요!
감사합니다 :->

'INFRA > Operation' 카테고리의 다른 글

Azure Terraform 설치  (0) 2022.05.16
Linux Terraform & Ansible 설치 방법  (0) 2022.05.10
참고 : terraform & Ansible외의 도구 개념 및 관계 - 1  (0) 2022.04.28
Terraform & Ansible 관계  (0) 2022.04.20
Ansible 개념  (0) 2022.04.14

댓글