Consul과 네트워크 인프라 자동화 구성

Consul과 네트워크 인프라 자동화 구성 (CTS)

Consul-Terraform-Sync(CTS)로 네트워크 인프라 자동화를 구성하는 핵심 구성 요소를 설명하는 문서예요. 태스크, Terraform 프로바이더, 전체 구성 파일 예시까지 높은 수준에서 살펴봐요.

출처: 문서

본문

이 페이지는 Consul로 네트워크 인프라 자동화(Network Infrastructure Automation)를 구성할 때의 주요 구성 요소를 높은 수준에서 다룰 거예요. 전체 구성 옵션 목록은 Consul-Terraform-Sync(CTS) 구성 페이지를 방문하세요.

태스크 (Tasks)

태스크는 주어진 조건에서 어떤 네트워크 리소스를 업데이트할지 정의함으로써 네트워크 자동화 프로세스를 포착해요. CTS에는 Consul 서비스 목록, Terraform 모듈, 다양한 Terraform 프로바이더를 포함하는 하나 이상의 태스크로 구성돼요.

task 블록 안에서 태스크의 서비스 목록은 네트워크 자동화를 구동하는 서비스 레이어를 나타내요. module은 태스크의 네트워크 자동화 프로세스를 정의하는 Terraform 모듈의 발견 위치(discovery location)예요. 아래에 표시되지 않은 condition은 구성하지 않으면 기본적으로 services 조건으로 설정되어, 시간이 지남에 따라 서비스 목록이 변경되면 네트워크 리소스가 갱신돼요.

네트워크 자동화에 사용할 Terraform 모듈을 검토하고 모듈에 필요한 Terraform 프로바이더를 식별해요. 모듈이 일련의 프로바이더에 의존한다면 providers 필드에 프로바이더 이름 목록을 포함시켜 해당 프로바이더 구성을 태스크와 연결해요. 이 프로바이더들은 나중에 별도의 블록에서 구성해야 해요.

task {
  name        = "website-x"
  description = "automate services for website-x"
  module      = "namespace/example/module"
  version     = "1.0.0"
  providers   = ["myprovider"]
  condition "services" {
    names = ["web", "api"]
  }
}

Terraform 프로바이더 (Terraform Providers)

CTS 내에서 Terraform 프로바이더를 구성하려면 2개의 구성 요소가 필요해요. 첫 번째 구성 요소는 driver.terraform 블록 안에 있어야 해요. CTS에 구성된 모든 프로바이더는 Terraform이 이를 발견하고 설치할 수 있도록 하는 Terraform v0.13+ 요구 사항을 충족시키기 위해 required_providers 스탠자 안에 나열되어야 해요. 나열된 프로바이더는 나중에 CTS가 각 태스크의 적절한 Terraform 구성 파일에 포함되도록 정리해요.

driver "terraform" {
  required_providers {
    myprovider = {
      source  = "namespace/myprovider"
      version = "1.3.0"
    }
  }
}

프로바이더를 구성하기 위한 두 번째 구성 요소는 terraform_provider 블록이에요. 이 블록은 Terraform 구성의 provider 블록과 비슷하며, 특정 인프라 플랫폼에 대한 API 상호 작용을 이해하고 리소스를 노출하는 동일한 책임을 가져요.

태스크 자동화를 위해 구성된 Terraform 모듈은 참조된 프로바이더의 구성을 요구할 수 있어요. 예를 들어 네트워크 인프라와 인터페이스하기 위한 호스트 주소와 인증을 구성하는 경우가 그렇지요. 사용 가능한 옵션을 찾으려면 Terraform Registry에 호스팅된 Terraform 프로바이더 문서를 참고하세요. terraform_provider 블록은 런타임 중 CTS에 로드되어 태스크 자동화에 사용되는 자동 생성된 Terraform 구성 파일에 포함되도록 처리돼요. 프로바이더에 대한 terraform_provider 블록을 생략하면 빈 기본 구성을 가정하는 Terraform 동작에 따르게 돼요.

terraform_provider "myprovider" {
  address = "myprovider.example.com"
}

요약 (Summary)

모두 조합해 보면 CTS의 구성 파일에는 CTS 데몬을 구성하는 다른 옵션과 함께 여러 HCL 블록(task, driver.terraform, terraform_provider 블록)이 있을 거예요.

두 개의 서비스에 변경이 있을 때 Terraform 모듈을 실행하도록 하나의 태스크를 자동화하는 예시 HCL 구성 파일이 아래에 나와 있어요.

cts-example-config.hcl

log_level = "info"

syslog {
  enabled = true
}

consul {
  address = "consul.example.com"
}

task {
  name        = "website-x"
  description = "automate services for website-x"
  module      = "namespace/example/module"
  version     = "1.0.0"
  providers   = ["myprovider"]
  condition "services" {
    names = ["web", "api"]
  }
  buffer_period {
    min = "10s"
  }
}

driver "terraform" {
  log = true

  required_providers {
    myprovider = {
      source  = "namespace/myprovider"
      version = "1.3.0"
    }
  }
}

terraform_provider "myprovider" {
  address = "myprovider.example.com"
}

더 알아보기 (Learn more)