OpenTofu와 Consul을 활용한 백엔드 스토리지 구성 방법

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

참고자료

https://opentofu.org/docs/language/settings/backends/consul