Skip to content
11월 18, 2024chattiboyetc

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

image 22

OpenTofu

OpenTofu란?

image 22

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/
image 19

웹콘솔 조회

웹콘솔로 접근하여 조회도 가능합니다.

image 20

백엔드 설정 샘플

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
image 21

참고자료

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

Leave a comment