인프라 구축 자동화 프로젝트를 하려고 한다.
서버를 구성하고 프로그램을 설치/세팅하고 코드를 배포해 화면을 볼 수 있게 하는 일련의 과정을 자동화 하는걸 말한다.
이런걸 하기위해 알아야 할 기술 Terraform, Ansible 을 차례대로 공부해볼 예정이다.
잘 될지 안될지 어디까지 할 수 있을지는 늘 미지수
Hashcorp에서 오픈소스로 개발중인 클라우드 인프라스트럭쳐 자동화 도구.
Infrastructure As Code (IaC)라고 해서 코드로 인프라스트럭쳐를 관리한다는 개념으로하시코프 설정언어 (HCL)라는걸 사용해 코드를 짜면 클라우드의 리소스들을 컨트롤할 수 있는 개념.
AWS, 구글클라우드, MS애져 등 다양한 클라우드에서 사용이 가능하다고 한다.
테라폼은 tf 파일에 원하는 서버정보를 코드로 입력하고 실행하면 실제 클라우드 서비스에서 해당되는 일련의 작업을 실행하고 tfstate 파일에 내용을 기록해서 실제 서비스와 테라폼의 동기화를 하는식으로 동작한다.
tfstate 파일에 내용이 있는건 테라폼으로 관리한다는걸 의미한다.
그래서 신규생성부터 진행하는 리소스들은 처음부터 동기화가 된 채로 동작하지만 기존에 있는 서비스를 사용하려면 따로 import하는 과정을 거쳐야 한다.
도커 컨테이너 테스트..공식 홈페이지에 있는 내용 따라해본걸 기록.
도커에 nginx이미지를 다운로드 받아서 컨테이너를 실행하는 예제이다.
variable 사용방법과 output을 사용하는 방법 등도 포함되어 있다.
# main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.image_id
name = var.container_name
ports {
internal = 80
external = 8000
}
}
# variables.tf
variable "container_name" {
description = "Value of the name for the Docker container"
type = string
default = "ExampleNginxContainer"
}
#output.tf
output "container_id" {
description = "ID of the Docker container"
value = docker_container.nginx.id
}
output "image_id" {
description = "ID of the Docker image"
value = docker_image.nginx.id
}
output "conatiner_hostname" {
description = "HOSTNAME of the Docker container"
value = docker_container.nginx.hostname
}
위와 같이 main.tf, variables.tf, output.tf 세개의 파일에 각각 코드를 입력하고 저장한다.
테라폼은 한 폴더에 있는 모든 tf파일을 로드하므로 파일을 나눌지 파일명을 뭘로할지는 원하는대로 할 수 있다.
# 테라폼 초기화 세팅
$ terraform init

# 현재 구성으로 테라폼 실행시 예상작업과 결과
$ terraform plan

# 현재 구성 적용
$ terraform apply
# Enter a value 에 'yes'라고 입력해주면 진행


여기까지 하고 도커에 컨테이너가 제대로 실행되었는지 확인
$ docker ps

# 현재 구성된 요소들 삭제
$ terraform destroy
# 여기서도 Enter a value 에 'yes'라고 입력해주면 진행


여기까지 테라폼 간단 사용방법을 기록해 본다.