7 minute read

10주차에 진행되었던 Ansible과 Terraform 학습 내용을 정리하였습니다

Terraform 사전 공부

[Terraform explained in 15 mins Terraform Tutorial for Beginners](https://youtu.be/l5k1ai_GBDE)
  1. 0:00 - Intro

    • What is Terraform?
    • What is Terraform used for?
    • Difference b2w TRF&ASB
      • When to use each
    • TRF Architecture&Commands
    • Ex. Conf. File

    • How TRF works&How TRF does its job
  2. 0:30 - What is Terraform? What is infrastructure provisioning?

    • automate and manage your infra.(platform&services)
      • open source
      • declarative lang.
    Declarative Imperative
    Define WHAT end result Define How jobs works
    • Tool for infrastructure provisioning
      • What does that mean?
      • EX. Create infra for application;
        1. Provisioning Infra in correct order (DevOps)
          • Based on AWS Platform (VPC)
          • Spin up several servers (EC2 instance)
          • Security Measures (Firewall,N/W, etc.)
          • Grant proper permissions per users
        2. Deploying Apps (S/W Developer)
          • Deploy 5 microservices
          • w/Docker container + DB container
  3. 03:22 - Terraform vs Ansible

    • By Official Docs. looks like same tool
    • Similairty
      • IaC Tool
      • Both automates; Prov. Conf. Mng. Infra
    • Differences
      • TRF; Mainly Infra Prov. + CAN deploy apps/NEW/advanced in orchetra
      • ASB; Mainly Conf. tool(Conf,Dply,inst/updates S/W)/Mature
    • Combination 2 > Common Practice
  4. 06:07 - What is Terraform used for? Terraform Use Cases

    • create&change infra
      • Automate the continuos changes to infra
    • Replicaing infra
      • DEV environment
      • PROD envir. > same as DEV envir.
      • STAGING envir. > same as above by using TRF File
  5. 08:18 - How does Terraform work? Terraform Architecture

    • Architecture; 2 main components
      • Core & Providers

    trf

    • Core; Create execution plan
      • TF-config: what to create/configure
      • State: current state of setup
      • CORE: Compare current state <> desired state(config-file) Figure out what to be done = Plan
    • Provider; Excute the Plan w/Providers
      • AWS/Azure (IaaS)
      • Kubernetes (PaaS)
      • Fastly (SaaS)
      • over 100 providers, to over 1000 resources/services
    • To Complete Application Setup
  6. 12:01 - Terraform Example Configuration File

     ```
     json format
     #Configure the AWS Provider
     provider "aws" {
         version = "~>2.0"
         region = us-east-1
     }
    
     #Create a VPC
     resource "aws_vpc" "example" {
         cidr_block = "10.0.0.0/16"
     }
     ```  - Define resource and its attributes.
    
  7. 12:47 - Declarative vs Imperative

    • Declarative?
      • Define end state in conf. file
      • 5 servers w/following N/W config
      • AWS user w/following permissions
    • In looks similar in initial set-up

    • Updates the infra
      • Remove/Add a server
      • Imp; give instructions, rm server, add fw, add perm.
      • Dec; figure out end state, don’t need to calculate
        • adjust old config&re-execute
        • clean&small conf file
        • always know the current setup
  8. 15:23 - Terraform Basic Commands

    • Diff. stages
      • refresh; query infra provider to get current state
      • plan; create an execution plan, just preview, no changes
        • determine what actions necessary to archieve desired state
      • apply; execute the plan
      • destroy; destroy the resources/infras

Ansible

  • 반복문
    • 반복적인 작업을 효율적으로 하기 위해 사용
    • loop 구문을 사용해서 각 모듈(작업)에 대한 반복 작업 수행 가능
    • 변수 값을 변경하면서 모듈을 실행 ( item 이라는 이름의 변수 사용 )
    • 조건식과는 다르게 block 단위의 반복작업은 불가
    • 조건식과 함께 사용하는 방식은 가능
    • loop 구문에서 변수 선언 시에 리스트 형태 구성도 가능
    • 중첩 기능도 제공
  • 조건문
    • Ansible은 조건문을 사용하여 특정 조건을 충족하는 작업 또는 플레이를 실행할 수 있음
    • 서비스를 설치하거나 구성하기 전에 관리 호스트에서 사용 가능한 메모리를 확인하는데 조건문을 사용할 수 있음
    • 조건문을 사용하여 관리자가 관리 호스트간의 차이점을 구분하고 충족된 조건을 기반으로 하여 기능 역활을 할당할 수 있음
    • 플레이북 변수, 등록된 변수 및 Ansible 팩트는 모두 조건문을 사용하여 테스트할 수 있음.
    • Ansible은 조건부에서 테스트 및 필터 를 사용
    • 테스트는 표현식을 평가하고 True 와 False를 반환
    • 조건문에서 변수를 참조 하더라도 변수명에 {{ }} 이중 중괄호를 사용하지 않음
  • 템플릿
    • 소개
      • Asible에서 파일을 관리하는 가장 강력한 방법은 템플릿을 만드는 것
      • 템플릿을 사용하면 가능한 변수와 팩트를 사용하여 파일이 배포될 때 관리 호스트에 대해 자동으로 사용자 정의되는 템플릿 구성 파일을 작성할 수 있음
    • Jinja2
      • Python의 매우 강력하고 고급 템플릿 언어
      • 매우 빠르고 안정적이며 동적 데이터를 생성하는 데 널리 사용
      • 텍스트 기반 템플릿 언어이므로 모든 마크업과 소스 코드를 생성하는 데 사용할 수 있음
    • Jinja2 의 특징
      • 제어 구조(루프 및 조건문)
      • 템플릿 상속
      • 사용자 정의 필터 지원
      • 풍부한 내장 필터 세트
      • 구성 가능한 구문
      • Jinja2 기호
      • Python의 매우 강력하고 고급 템플릿 언어
      • 매우 빠르고 안정적이며 동적 데이터를 생성하는 데 널리 사용
      • 텍스트 기반 템플릿 언어이므로 모든 마크업과 소스 코드를 생성하는 데 사용할 수 있음
  • 핸들러
    • 특정 서비스가 실행 중일 경우에만 httpd 서비스 다시 시작
    • 핸들러(Handler)는 작업을 실행하고 시스템의 변경(Changed)이 있을 때에 별도의 작업을 호출하고 실행하는 작업
    • 주로 핸들러를 사용하게 시스템에서 특정 서비스의 구성 파일이 변경된 경우 서비스를 재시작할 때
    • Ansible 모듈은 멱등이 되도록 설계 되어 있음. 즉 제어 노드가 원하는 상태가 되도록 하기 위해 플레이북과 해당 작업을 변경하지 않아도 되는 경우, 적절하게 작성된 플레이북에서 제어노드를 변경하지 않고 플레이북과 해당 작업을 여러번 실행 가능
    • 핸들러는 작업에 변경이 있고, 반드시 알림(Notify)이 있을 때만 실행되는 작업
    • 작업(변경) —> 알림 —> 핸들러
  • 위임(작업 실행 위치 제어)
    • 하나의 플레이를 실행 할 때 작업들은 별도로 설정하지 않는 한 호스트에 실행이 됨
    • 위임(delegation)은 호스트에 정의 되어있는 여러 작업들 중에 일부분의 작업을 다른 호스트에서 실행할 수 있음
    • 위임을 사용하면 상호 관련된 환경을 정확하고 효율적으로 관리할 수 있음
    • 다른 호스트를 참조하여 한 호스트에서 작업을 수행하려면 작업에서 delegate_to키워드를 사용
    • 이는 로드 밸런싱된 풀에서 노드를 관리하거나 중단 기간을 제어하는 데 이상적
    • 직렬 키워드 와 함께 위임을 사용 하여 한 번에 실행되는 호스트 수를 제어할 수 있음
  • 블록의 개념
    • 블록은 플레이에 하나 이상의 작업을 논리적으로 그룹화 할 수 있음
      • 그룹화의 장점은 대부분 단일 작업에서 적용했던 플레이북 키워드를 블록 수준에서 적용할 수 있음
      • 조건문(when), 권한상승(become) 등 블록에 구성할 수 가능
      • 블록에 구성된 키워드는 블록에 속한 모든 작업에 공통으로 적용
      • 단 반복문은 블록에 적용 X
    • 대부분의 프로그래밍 언어에 있듯이 예외 처리 기능을 제공
      • 블록의 하나 이상의 작업이 실패한 경우, 실패한 작업에 대응(롤 백, 오류 수정 등)하는 작업을 지정 가능
  • 작업의 그룹화
    • 블록의 모든 작업은 블록 수준에서 적용된 지시문을 상속
    • 단일 작업에 적용할 수 있는 대부분(반복문(loop) 제외)은 블록 수준에서 적용할 수 있으므로 블록을 사용하면 작업에 공통적인 데이터나 지시문을 훨씬 쉽게 설정 가능
    • 지시문은 블록 자체에 영향을 미치지 않으며 블록으로 묶인 작업에 의해서만 상속
      • when 문은 블록 자체가 아니라 블록 내의 작업에 적용
  • 오류 처리
    • rescue및 always섹션이 있는 블록을 사용하여 Ansible이 작업 오류에 응답하는 방식을 제어할 수 있음
    • 복구 블록은 블록의 이전 작업이 실패할 때 실행할 작업을 지정
      • 접근 방식은 많은 프로그래밍 언어의 예외 처리와 유사
    • Ansible은 작업이 ‘실패’ 상태를 반환한 후에만 복구 블록을 실행
      • 잘못된 작업 정의와 연결할 수 없는 호스트는 복구 블록을 트리거하지 않음
    • 블록의 작업 중 하나라도 실패가 있으면, Rescue 섹션의 작업이 실행
      • 블록의 작업 중 실패가 없으면, Rescue 섹션은 실행 X
  • 태그(tags)
    • 많은 작업이 있는 플레이북의 경우 플레이북 전체를 실행하는 대신 특정 일부분 만 실행하는 것이 유용할 수 있음
    • Ansible 태그로 특정 작업만 실행하거나, 특정 작업을 실행하지 않을 수 있음
    • 태그는 플레이, 블록, 역할, 작업에 설정하고, 플레이북 실행 시 태그를 선택
  • 아티팩트 개념
    • Ansible 플레이북 작성 시 하나의 매우 큰 파일에 플레이 및 작업을 작성할 수 있음
    • 단일 플레이북의 복잡한 작업을 다른 파일로 나누어 작업 집합으로 구성할 수 있음
    • 더 작고 분산된 아티팩트를 통해 변수, 작업 및 플레이를 여러 플레이북에서 재사용 가능
    • 재사용 가능한 아티팩트:
      • 변수 파일
      • 작업 파일
      • 플레이북 파일
      • 역할
  • 플레이북에서 변수 재사용
    • 플레이북에서 vars_files 키워드 및 include_vars 모듈을 사용하여 외부 변수 파일을 가져올 수 있음
    • vars_files 키워드
      • 플레이 안에서 변수 파일을 불러와서 참조함
    • include_vars 모듈
      • tasks 영역에서 변수 파일을 불러와서 참조함
  • 인벤토리 / 플레이북 디렉토리에서 변수 재사용
    • Ansible Automation Engine은 인벤토리 또는 플레이북 파일이 있는 디렉토리에서 group_vars/ 또는 host_vars 디렉토리의 YAML 형식의 변수 파일을 가져올 수 있음
    • 별도로 플레이북 키워드나 모듈을 사용하지 않아도 Ansible Automation Engine이 group_vars/ 또는 host_vars/ 디렉토리가 있으면 읽어 들임
      • 그룹 변수: group_vars/ 디렉토리
      • 호스트 변수: host_vars/ 디렉토리
  • 플레이북, 플레이, 작업 일부, 변수를 재사용하기 위해 include_* 및 import_* 모듈을 사용할 수 있음
    • include_* 모듈
      • include_* 모듈의 주요 용도는 반복문에서 사용하는 것
      • include_* 모듈과 반복문을 함께 사용하면 포함된 작업이 루프의 각 항목에 대해 한 번씩 실행

Terraform

  • 테라폼
    • HashiCorp 사의 코드형 인프라스트럭처(Infrastructure as Code) 도구
    • 클라우드, 물리 시스템, VM, 네트워크 장비, 컨테이너 등 인프라의 자동화된 배포, 변경 및 관리를 제공
    • 사람이 쓰고 읽을 수 있고 자동화된 배포를 위해 HCL(HashiCorp Configuration Language)이라는 구성 파일로 작성하고 인프라, 플랫폼 및 소프트웨어를 관리할 수 있음
    • 구성 파일은 단일 애플리케이션 또는 인프라 전체를 실행하는데 필요한 구성 요소를 선언
    • 관리자가 원하는 상태에 도달하기 위해 수행 할 작업을 선언하고, 실행 계획을 생성 한 다음 이를 실행하여 정의된 인프라를 구성
    • 기존의 구성이 변경되어야 한다면 변경된 사항을 확인하고 적용할 수 있는 증분 실행 계획을 적용
    • 프로바이더(Provider)의 API와 상호작용하며 리소스를 배포 및 관리
  • 테라폼 의 주요 기능
    • 코드형 인프라
      • Terraform은 HCL 구성 파일로 정의하며, 이를 통해 인프라의 구성을 코드화하고 버전 관리를 통해 관리할 수 있다. 또한 이런 코드를 재사용하고 공유할 수 있음
    • 실행 계획
      • Terraform은 구성 파일에 정의된 리소스를 실제 배포하기 전에 “계획” 단계를 통해 수행 할 작업을 미리 확인할 수 있음
    • 리소스 종속성
      • Terraform은 구성 파일에 정의된 모든 리소스의 종속성을 확인하고 비 종속적인 리소스의 생성을 병렬화 함
    • 변경 자동화
      • 리소스의 종속성을 통해 리소스가 어떤 순서로 변경되는지 정확히 알 수 있으며, 이는 사람이 직접 구성함으로써 발생하는 오류를 방지함
  • 구성 파일 및 디렉토리
    • 파일 확장자
      • Terraform 구성 파일은 .tf 또는 JSON 기반의 Terraform 구성 파일인.tf.json 을 사용
    • 텍스트 인코딩
      • 구성 파일은 UTF8 인코딩을 사용하며 Unix 스타일의 줄바꿈인 LF를 사용하지만 Windows 스타일의 줄바꿈인 CRLF도 허용
    • 디렉토리
      • Terraform은 현재 작업 디렉토리의 모든 구성 파일을 읽어 하나의 문서로 처리
      • 단일 구성 파일을 정의하거나 여러 구성 파일을 분리하여 정의하는 것은 사용자의 편의를 위한 것이며 동작에는 영향을 미치지 않음
  • 구성 파일 기본
    • 구성 파일은 인프라의 리소스를 정의하는 것이 주요 목적
    • 구성 파일에는 프로바이더(Provider), 프로바이더 요구사항, 리소스 등을 정의
  • 프로바이더
    • 프로바이더는 리소스를 관리
    • 모든 리소스의 유형은 프로바이더에 의해 구현
  • 리소스
    • 프로바이더에 의해 구현된 리소스를 정의

Categories:

Updated:

Leave a comment