W10 Ansible,Terraform
10주차에 진행되었던 Ansible과 Terraform 학습 내용을 정리하였습니다
Terraform 사전 공부
[Terraform explained in 15 mins | Terraform Tutorial for Beginners](https://youtu.be/l5k1ai_GBDE) |
-
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
-
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;
- 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
- Deploying Apps (S/W Developer)
- Deploy 5 microservices
- w/Docker container + DB container
- Provisioning Infra in correct order (DevOps)
- automate and manage your infra.(platform&services)
-
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
-
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
- create&change infra
-
08:18 - How does Terraform work? Terraform Architecture
- Architecture; 2 main components
- Core & Providers
- 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
- Architecture; 2 main components
-
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.
-
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
- Declarative?
-
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
- Diff. stages
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_* 모듈과 반복문을 함께 사용하면 포함된 작업이 루프의 각 항목에 대해 한 번씩 실행
- 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), 프로바이더 요구사항, 리소스 등을 정의
- 프로바이더
- 프로바이더는 리소스를 관리
- 모든 리소스의 유형은 프로바이더에 의해 구현
- 리소스
- 프로바이더에 의해 구현된 리소스를 정의
Leave a comment