-
[2판] 01. 왜 테라폼인가24년 11월 이전/Terraform Up and Running 2021. 8. 2. 20:01반응형
이 문서는 책 "테라폼 업앤러닝"을 읽고 작성되었습니다. 최대한 요약해서 책 내용을 최소로 하는데 목표를 두고 있어서, 더 친절하고 정확한 내용을 원하신다면 책을 구매하시는 것을 추천드립니다. => 책 링크
용어 정리
"Devops"란
Devops
는 소프트웨어를 효율적으로 전달하는 프로세스이다. 다음과 같은 핵심 가치 4가지가 존재한다.- Culture
- Automation
- Measurement
- Sharing
이 책은 2번, 특히 인프라스트럭처 배포 자동화에 초점을 맞춘다.
"IaC"란
IaC
는 "Infrastructure As Code"의 약자로써, 코드로 인프라를 관리하는 것을 의미한다. 서버, DB, 네트워크, 로그, 애플리케이션 구성, 문서, 자동화된 테스트, 배포 프로세스 등 거의 모든 작업을 코드로 관리할 수 있다.다음과 같은 도구들이 존재한다.
- 스크립트
- 설정 관리 도구
- 서버 템플릿 도구
- 오케스트레이션 도구
- 프로비전 도구
"IaC"의 종류
간단하게
IaC
의 종류에 대해서 알아보자.스크립트
먼저 스크립트는
Bash
,Python
,Ruby
,Golang
등 여러 프로그래밍 언어로 작성될 수 있으며, 인프라를 관리를 자동화하는데 최소한의 도구이다. 예를 들어 서버에php
로 작성된 코드 기반의 웹 앱을 설치하고apache2
서버를 구동하는 작업을 자동화한다고 해보자. 다음과 같이Bash
스크립트로 작성할 수 있다.#!/bin/bash # 패키지 업데이트 sudo apt-get update # apache2 웹서버, php 설치 sudo apt-get install -y php apache2 # php 프로젝트 클론 /var/www/html/app 에 코드를 품. sudo git clone github.com/foo/php-app /var/www/html/app # 웹 서버 구동 sudo systemctl start apache2
구성 관리 도구
대표적인 구성 관리 도구는
Chef
,Puppet
,Ansible
등이 있다. 이들은 실행 중인 서버의 구성을 변경하는 작업을 자동화할 때 자주 사용된다. 위의 예를Anisble
로 진행해보자. 다음과 같이playbook
을 작성해서 실행하면 된다.- name: Update the apt-get cache apt: update_cache: yes - name: Install PHP apt: name: php - name: Install Apache apt: name: apache2 - name: Git clone Repository git: repo=https://github.com/foo/php-app dest=/var/www/html/app - name: Start Apache systemd: name: apache2 state: started
구성 관리 도구는 다음과 같은 특징이 있다.
- 코드 규칙
- 멱등성
- 분산형 구조
서버 템플릿 도구
대표적인 서버 템플릿 도구로
Docker
와Packer
가 있다. 이들은 머신 이미지를 생성할 때 주로 사용된다. 즉apache
서버 실행 등의 작업은 템플릿 도구로 생성된 이미지를 기반으로 서버를 실행할 때가 되서야 가능하다. 그 이전까지 작업은 이 도구로 자동화할 수 있다.Packer
로 위의 예를 자동화해보자.packer { required_plugins { amazon = { version = ">= 0.0.2" source = "github.com/hashicorp/amazon" } } } source "amazon-ebs" "ubuntu" { ami_name = "learn-packer-linux-aws" instance_type = "t2.micro" region = "us-west-2" source_ami_filter { filters = { name = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*" root-device-type = "ebs" virtualization-type = "hvm" } most_recent = true owners = ["099720109477"] } ssh_username = "ubuntu" } build { name = "learn-packer" sources = [ "source.amazon-ebs.ubuntu" ] provisioner "shell" { inline = [ "sudo apt-get update", "sudo apt-get install -y php apache2", "sudo git clone github.com/foo/php-app /var/www/html/app", ] } }
이렇게 이미지를 만든 후에 이를 기반으로 서버를 구동한 뒤
user_data
등에서sudo systemctl restart apache2
명령어를 작성해주면 된다. 서버 템플릿 도구는Immutable Infrastructure
구성 시 핵심 역할을 하고 있으니 같이 알아두는 것이 좋다.오케스트레이션 도구
오케스트레이션 도구는 일반적으로 수 많은 컨테이너를 관리하는데 필요한 도구이다. 보통
Docker
같은 컨테이너 런타임(Container Runtime) 위에Kubernetes
같은 오케스트레이션 도구를 구축해서 컨테이너들을 관리한다. 다음과 같은 기능을 가졌다.- 블루-그린 배포 같은 배포 전략(롤링 업데이트)
- 컨테이너 오토스케일링
- 트래픽 로드 밸런싱
- 셀프 리커버리
- 서비스 디스커버리
Packer
,Docker
등의 템플릿 도구로 컨테이너 이미지를 구성한 후Kubernetes
설정 파일을 통해서 여러 대의 컨테이너를 배포를 할 수 있다.프로비전 도구
프로비전 도구는 서버뿐 아니라 데이터베이스, 네트워크 등 인프라스트럭처의 형상을 구성 및 관리할 수 있다. 대표적인 도구로
Terraform
,AWS Cloudformation
등이 있다.Terraform
으로도 위의 예를 구성할 수 있다.resource "aws_instance" "example" { ami = "ami-005e54dee72cc1d00" instance_type = "t2.micro" availability_zone = "us-east-1a" user_data = <<EOF #!/bin/bash sudo apt-get update sudo apt-get install -y php apache2 sudo git clone github.com/foo/php-app /var/www/html/app sudo systemctl start apache2 EOF }
일반적으로
Terraform
은 다음과 같은 조합으로 구성하여 인프라스트럭처를 관리한다.- Terraform + Packer + Ansible
- Terraform + Packer + K8S
첫 번째 방식은 기존 클라우드 인프라를 관리하는 구성이다.
Packer
로 서버 이미지를 만든 후,Terraform
으로 인프라스트럭처를 구성한다. 그 후 실행되는 서버 설정은Anisble
을 이용해 관리하는 것이다.두 번째 방식은 최신 컨테이너 형, 클라우드 인프라를 관리하는 구성이다.
Packer
로Docker Image
를 만든 후에,Terraform
으로 인프라스트럭처를 구성한다. 이 때Kubernetes
클러스터를 구성한다.Packer
에 의해 생성된Docker Image
들은Kubernetes
가 참조하여 여러 컨테이너를 오케스트레이션한다."IaC"의 장점
IaC
는 다음과 같은 장점을 얻는다.- 배포 프로세스 자동화
- 속도와 안정성
- 문서화
- 버전 관리
- 유효성 검증
- 재사용성
원래 관리자의 영역이었던 배포 프로세스가 자동화가 되면서 그 개발자들로만으로도 배포 프로세스를 실행시킴으로써 애플리케이션 배포가 가능하게 되었다. 또한, 컴퓨터가 작업함으로 사람이 수작업으로 할 때보다 매우 정확하고 빠르게 프로세스를 수행할 수 있다. 3-6번은 "소스 코드"의 장점이다. 이를 통해서 "행복함"을 얻을 수 있다고 한다.
728x90'레거시 > Terraform Up and Running' 카테고리의 다른 글
06. 테라폼을 팀에서 사용하기 (0) 2021.06.16 05. 테라폼 팁과 요령: 반복문, 조건문, 배포 및 주의사항 (1) 2021.06.14 04. 테라폼 모듈 (0) 2021.06.11 03. 테라폼 상태 관리 (0) 2021.06.02 02. 테라폼 시작하기 (0) 2021.05.26