OpenTofu
OpenTofu란?
OpenTofu는 Terraform을 대체할수 있는 오픈소스 도구 입니다.
클라우드와 온프레미스 리소스를 모두 사람이 읽을 수 있는 구성 파일에 정의하여 버전 관리, 재사용 및 공유할 수 있는 인프라스트럭처 코드 도구입니다. 그런 다음 일관된 워크플로를 사용하여 라이프사이클 전체에 걸쳐 모든 인프라를 프로비저닝하고 관리할 수 있습니다. OpenTofu는 컴퓨팅, 스토리지 및 네트워킹 리소스와 같은 저수준 구성 요소와 DNS 항목 및 SaaS 기능과 같은 고수준 구성 요소를 관리할 수 있습니다.
OpenTofu 배포 스크립트
#!/bin/bash
set -e -x
apt-get update && apt-get install -y apt-transport-https ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://get.opentofu.org/opentofu.gpg | sudo tee /etc/apt/keyrings/opentofu.gpg >/dev/null
curl -fsSL https://packages.opentofu.org/opentofu/tofu/gpgkey | sudo gpg --no-tty --batch --dearmor -o /etc/apt/keyrings/opentofu-repo.gpg >/dev/null
chmod a+r /etc/apt/keyrings/opentofu.gpg /etc/apt/keyrings/opentofu-repo.gpg
echo "deb [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main
deb-src [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main" | tee /etc/apt/sources.list.d/opentofu.list > /dev/null
chmod a+r /etc/apt/sources.list.d/opentofu.list
apt-get update && apt-get install -y tofu
tofu --version
Alias 설정
.bashrc에 alias tf=’tofu’를추가합니다.
alias tf='tofu'
Consul
Consul란?
Consul은 HashiCorp에서 개발한 분산 시스템 및 서비스 관리 도구이며, Key-Value 저장소로 사용할 수 있습니다.(단, 상용으로 이용하는 경우 라이선스 이슈가 있을 수 있습니다.)
상용으로 이용하는 경우 MinIO를 고려해볼수 있겠으나 lock기능을 사용할수 없는 단점이 있습니다.
Consul Deploy(on docker)
도커서버에 간단하게 서비스를 배포합니다.
docker run -d --name=dev-consul -p 8500:8500 consul:1.15.4
데이터 생성 검증
쉘 접속을 하여 샘플 데이터를 생성합니다.
docker exec -it dev-consul sh
2개의 샘플 데이터를 생성합니다.
consul kv put sample/key1 "value1"
consul kv put sample/key2 "value2"
생성결과를 조회합니다.
consul kv get -recurse sample/
웹콘솔 조회
웹콘솔로 접근하여 조회도 가능합니다.
백엔드 설정 샘플
OpenTofu 템플릿
terraform {
backend "consul" {
address = "192.168.0.204:8500"
path = "terraform/state"
lock = true
}
}
provider "aws" {
region = "ap-northeast-2" # 리전별 프로바이더 설정 필요.
}
resource "aws_vpc" "foo" {
cidr_block = "10.0.0.0/16"
tags = {
"Name" = "This TF"
}
}
output "vpc_foo" {
value = aws_vpc.foo
}
적용 및 실행
tf init을 실행하여 백엔드 적용을합니다.
tf plan을 실행하여 예상되는 결과를 출력합니다.
tf apply를 실행하여 반영합니다.
tf init
tf plan
tf apply