HCP Terraform 드라이버

HCP Terraform 드라이버 (HCP Terraform Driver)

이 문서는 CTS(Consul-Terraform-Sync)가 HCP Terraform과 통합되어 동작하는 방식을 설명해 드릴게요. HCP Terraform 드라이버를 이해하면 네트워크 인프라 자동화를 더 강력하게 구성할 수 있어요.

출처: 문서

본문

Enterprise

이 기능은 Consul Enterprise에서 제공되는 Consul-Terraform-Sync Enterprise [https://www.hashicorp.com/products/consul/features]가 필요합니다.

CTS(Consul-Terraform-Sync)는 HCP Terraform [https://cloud.hashicorp.com/products/terraform]과 통합하면 더 강력해집니다. HCP Terraform과 통합하면 CTS가 네트워크 인프라를 동적으로 업데이트할 때 향상된 워크스페이스와 Terraform 작업에 대한 인사이트 같은 기능을 제공합니다. CTS는 HCP Terraform의 셀프 호스팅 [https://www.hashicorp.com/products/terraform/editions/enterprise] 버전과 관리형 서비스 [https://www.hashicorp.com/products/terraform/editions/cloud] 버전 모두와 호환됩니다. 또한 HCP Terraform 관리형 서비스의 모든 등급(tier) [https://www.hashicorp.com/products/terraform/pricing]을 지원합니다.

이 페이지는 CTS 내에서 HCP Terraform 드라이버가 어떻게 작동하는지 설명합니다.

Terraform 워크스페이스 자동화 (Terraform Workspace Automation)

CTS는 HCP Terraform의 워크스페이스에 대해 API 기반 실행 워크플로 [/terraform/cloud-docs/run/api]에 따라 Terraform 실행(run)을 관리합니다.

시작 시 CTS는:

  • 구성된 작업(task)에 해당하는 HCP Terraform 워크스페이스를 생성하거나 발견합니다.
  • 로컬 환경을 준비하고 각 작업의 루트 모듈(root module)을 구성하는 Terraform 구성 파일을 생성합니다.
  • 생성된 파일을 패키징하고 작업 워크스페이스의 구성 버전(configuration version)으로 HCP Terraform에 업로드합니다.

모든 워크스페이스가 설정되면 CTS는 서비스 변경 사항에 대해 Consul 카탈로그를 모니터링합니다. 관련 변경 사항이 감지되면 HCP Terraform 드라이버는 HCP Terraform API를 사용하여 해당 작업의 입력 변수를 워크스페이스 변수 [/terraform/cloud-docs/workspaces/variables]로 직접 동적으로 업데이트합니다. 그런 다음 드라이버는 auto-apply를 활성화한 상태로 워크스페이스에 실행을 대기시켜 네트워크 인프라를 업데이트합니다.

참고: 작업용 워크스페이스는 격리된 환경에서 실행되지만, 이는 동시 작업 실행으로 인한 인프라 변경이 독립적임을 보장하지는 않습니다. 모든 작업의 모듈이 동일한 리소스 객체를 수정하지 않거나 자동화 중 경합 조건(race condition)을 초래할 수 있는 중복 변경이 없는지 확인하세요.

원격 워크스페이스 (Remote Workspaces)

CTS는 구성된 작업에 따라 새 워크스페이스를 발견하거나 생성합니다. 작업 구성의 name [/consul/docs/nia/configuration#name-1]과 description [/consul/docs/nia/configuration#description]이 워크스페이스 이름과 설명을 설정하는 데 사용됩니다. 작업 구성의 terraform_cloud_workspace [/consul/docs/nia/configuration#terraform_cloud_workspace]는 Terraform 버전, 실행 모드, 관련된 경우 에이전트 풀(agent pool) 같은 옵션을 설정하는 데 사용됩니다. CTS는 드라이버 구성의 workspaces [/consul/docs/nia/configuration#workspaces]에 지정된 전역 워크스페이스 구성도 사용합니다.

워크스페이스 자동화에 대한 CTS 요구 사항은 다른 워크스페이스를 의도치 않게 덮어쓰지 않도록 하기 위한 것입니다.

  • 원격(remote) 또는 에이전트(agent) 실행 모드로 설정되어야 함
  • VCS에 연결할 수 없음
  • 다른 애플리케이션이 업로드한 기존 구성 버전이 있을 수 없음
  • CTS 운영자가 설정한 워크스페이스 태그 요구 사항 [/consul/docs/nia/configuration#tags_allowlist]과 태그 제한 [/consul/docs/nia/configuration#tags_denylist]을 충족해야 함

CTS가 생성한 워크스페이스는 다음 설정으로 구성됩니다:

| | 설정 | 값 | | | 워크스페이스 이름 | CTS 작업 이름 | | | 설명 | CTS 작업 설명 | | | 실행 모드 | task.terraform_cloud_workspace.execution_mode [/consul/docs/nia/configuration#execution_mode] 또는 기본적으로 remote | | | 적용 방법 | Auto apply | | | Terraform 버전 | task.terraform_cloud_workspace.terraform_version [/consul/docs/nia/configuration#terraform_version-1], task.terraform_version [/consul/docs/nia/configuration#terraform_version] (deprecated), 또는 조직에서 사용 가능한 CTS [/consul/docs/nia/compatibility#terraform]와 호환되는 최신 Terraform 버전 | | | 태그 | source:cts 및 CTS 운영자가 설정한 추가 태그 [/consul/docs/nia/configuration#tags] |

다른 워크스페이스 설정은 사전 구성하거나 업데이트할 수 있습니다. 예를 들어 워크스페이스를 수동 적용(manual apply) [/consul/docs/automate/infrastructure/network-driver/hcp-terraform#manual-apply]으로 설정하거나, CTS가 네트워크 인프라를 업데이트할 때 Slack 채널에 메시지를 보내도록 실행 알림(run notification) [/terraform/cloud-docs/workspaces/settings/notifications]을 추가할 수 있습니다.

수동 적용 (Manual Apply)

CTS는 auto apply 또는 manual apply가 구성된 원격 워크스페이스를 자동화할 수 있습니다. manual apply로 워크스페이스를 관리하는 것은 CTS 자동화에 승인 단계를 추가하는 데 유용합니다. 운영자는 CTS가 작업 실행 조건에 따라 대기시킨 실행을 수동으로 검사하고 승인 또는 폐기할 수 있습니다.

CTS가 이미 승인 대기 중인 실행이 있는 워크스페이스의 새 변경 사항을 감지하면, CTS는 오래된 실행을 폐기하고 최신 값으로 새 실행을 대기시킵니다. 새 실행은 plan을 거친 다음 다시 운영자의 승인을 기다립니다. 실행이 승인된 후에만 인프라가 최신 Consul 변경 사항으로 업데이트됩니다.

CTS가 관리하는 워크스페이스에 manual apply를 설정하는 방법은 워크스페이스가 생성되는 방식에 따라 두 가지가 있습니다.

  • CTS가 생성한 워크스페이스의 경우 HCP Terraform 웹 애플리케이션 또는 API를 통해 적용 방법을 auto에서 manual로 업데이트합니다.
  • 사전 구성된 워크스페이스의 경우 CTS 작업 자동화 전에 HCP Terraform 웹 애플리케이션 또는 API를 통해 워크스페이스를 생성합니다.
  • 원하는 작업과 동일한 이름의 워크스페이스를 생성합니다.
  • 워크스페이스를 API 기반 실행 워크플로 [/terraform/cloud-docs/run/api] 및 실행 모드 remote로 설정합니다.
  • 워크스페이스의 적용 방법이 manual apply로 설정되어 있는지 확인합니다.
  • 워크스페이스에 대한 작업을 구성하고 CTS를 실행합니다.

팁: manual apply가 설정된 워크스페이스에 실행 알림 [/terraform/cloud-docs/workspaces/settings/notifications#creating-a-notification-configuration]을 설정하여 CTS의 자동 실행을 놓치지 않도록 하세요. 변경 사항을 묶고 승인이 필요한 실행 수를 줄이려면 버퍼 기간(buffer period) [/consul/docs/nia/configuration#buffer_period-1]이나 일정 조건(schedule condition) [/consul/docs/nia/configuration#schedule-condition]을 설정하는 것도 고려하세요.

구성 버전 (Configuration Version)

"cts-example"이라는 작업의 예시 구성 버전은 HCP Terraform 드라이버로 실행하고 기본 작업 디렉터리를 사용할 때 아래와 같은 폴더 구조를 갖습니다.

$ tree sync-tasks/

sync-tasks/
└── cts-example/
    ├── main.tf
    └── variables.tf
  • [/consul/docs/automate/infrastructure/network-driver/hcp-terraform#main-tf]main.tf - 주요 파일에는 terraform 블록, provider 블록, 작업에 대해 구성된 모듈을 호출하는 module 블록이 포함됩니다.
  • [/consul/docs/automate/infrastructure/network-driver/hcp-terraform#terraform]terraform 블록 - 구성 파일에서 작업에 해당하는 provider 소스와 버전이 루트 모듈을 위해 이 블록에 배치됩니다.
  • [/consul/docs/automate/infrastructure/network-driver/hcp-terraform#provider]provider 블록 - 루트 모듈에서 생성된 provider 블록은 CTS 구성의 terraform_provider 블록과 유사합니다. 동일한 인자를 가지며, provider마다 생성된 중간 변수(intermediate variable)에서 설정됩니다.
  • [/consul/docs/automate/infrastructure/network-driver/hcp-terraform#module]module 블록 - module 블록은 작업의 모듈이 하위 모듈 [/terraform/language/modules#calling-a-child-module]로 호출되는 곳입니다. 하위 모듈에는 자동화의 핵심 로직이 포함됩니다. 필수 및 선택 입력 변수는 모듈에 인자로 전달됩니다.
  • [/consul/docs/automate/infrastructure/network-driver/hcp-terraform#variables-tf]variables.tf - 이 파일은 세 가지 유형의 변수 선언을 포함합니다:
  • [/consul/docs/automate/infrastructure/network-driver/hcp-terraform#services]services 입력 변수(필수)는 모듈이 Consul-Terraform-Sync와 호환되는지 결정합니다 (호환되는 Terraform 모듈에 대한 자세한 내용은 [/consul/docs/automate/infrastructure/module]).
  • 모듈이 사용할 수 있는 CTS가 제공하는 추가 선택적 입력 변수 [/consul/docs/nia/terraform-modules#optional-input-variables].
  • provider를 구성하는 데 사용되는 다양한 중간 변수. 중간 provider 변수는 CTS 구성에 구성된 provider 블록과 인자에서 보간(interpolate)됩니다.
  • [/consul/docs/automate/infrastructure/network-driver/hcp-terraform#variables-module-tf]variables.module.tf - 이 파일은 작업 [/consul/docs/nia/configuration#variable_files]에 대해 구성된 변수가 있는 경우 생성되며, 구성의 변수와 일치하는 보간된 변수 선언을 포함합니다. 그런 다음 이들을 module 블록의 명시적 할당을 통해 모듈로 프록시하는 데 사용됩니다.

변수 (Variables)

CTS는 Terraform 입력 변수를 사용하여 최신 Consul 서비스 정보를 반영합니다. 이 변수는 Terraform 모듈의 파라미터로 사용됩니다. 입력 변수는 동적이며 CTS 실행 시간 동안 드라이버에 의해 업데이트됩니다.

Terraform UI에서 해당 워크스페이스로 이동하여 워크스페이스 내비게이션에서 "Variables" 탭을 클릭하면 최신 서비스 정보를 볼 수 있습니다.

주의: CTS가 유지 관리하는 동적 변수는 자동화용으로 형식이 지정되어 있습니다. 이러한 변수에 예상치 못한 수동 변경을 가하면 자동화 오류가 발생할 수 있습니다.

HCP Terraform 드라이버 설정 (Setting Up HCP Terraform Driver)

배포 (Deployment)

CTS 인스턴스는 하나의 드라이버로만 구성할 수 있으므로, 한 인스턴스는 Terraform 드라이버 또는 HCP Terraform 드라이버 중 하나와만 연결할 수 있습니다. 두 유형의 드라이버를 모두 실행해야 하는 경우 사용자는 각 드라이버 유형에 대해 별도의 CTS 인스턴스를 배포해야 합니다. 마찬가지로 여러 HCP Terraform 조직에서 CTS를 실행해야 하는 경우 사용자는 각 조직에 대해 별도의 인스턴스를 배포해야 합니다.

필수 설정 (Required Setup)

이 섹션은 CTS를 HCP Terraform [https://cloud.hashicorp.com/products/terraform] 솔루션과 통합하도록 설정하기 위한 요구 사항을 설명합니다.

  • HCP Terraform(셀프 호스팅 배포판)의 호스트 이름(hostname)
  • 조직(organization) 이름
  • HCP Terraform과의 인증에 사용되는 팀 API 토큰 [/terraform/cloud-docs/users-teams-organizations/api-tokens]

HCP Terraform 드라이버로 CTS를 실행하기 전에 계정과 조직을 설정하고 전용 토큰이 필요합니다. Manage Workspaces [/terraform/cloud-docs/users-teams-organizations/teams#managing-workspace-access] 수준 권한으로 제한된 팀 토큰을 사용하는 것이 좋습니다. 다음은 권장 설정 단계입니다.

첫 번째 단계는 HCP Terraform 서비스로 계정을 만드는 것입니다. 계정을 만든 후 새 조직 [/terraform/cloud-docs/users-teams-organizations/organizations#creating-organizations]을 만들거나 기존 조직을 선택합니다. HCP Terraform 서비스의 주소는 hostname [/consul/docs/nia/configuration#hostname]을 구성하는 데 사용되며, 조직 이름은 HCP Terraform 드라이버에서 organization [/consul/docs/nia/configuration#organization]을 구성하는 데 사용됩니다.

계정과 조직이 생기면 다음 단계는 팀 [/terraform/cloud-docs/users-teams-organizations/teams]을 만드는 것입니다. CTS를 실행하고 인증하기 위해 전용 팀과 팀 토큰을 사용하는 것이 좋습니다. 팀 토큰을 사용하면 조직 권한을 제한할 수 있고, CTS 자동화 작업을 개인이 아닌 팀과 연결할 수 있는 이점이 있습니다.

전용 팀을 만든 후 팀 권한을 "Manage Workspaces" 조직 액세스 수준으로 업데이트합니다. CTS의 주요 작업은 워크스페이스 생성 및 관리에 관한 것입니다. 따라서 전용 팀의 권한을 Manage Workspaces 수준으로 제한하는 것으로 충분하며 보안 위험을 줄여줍니다.

팀 권한을 설정한 후 마지막 설정 단계는 관련 팀 토큰 [/terraform/cloud-docs/users-teams-organizations/api-tokens]을 생성하는 것입니다. 이는 동일한 팀 관리 페이지에서 수행할 수 있습니다. 이 토큰은 CTS의 API 인증에 사용되며 HCP Terraform 드라이버의 token [/consul/docs/nia/configuration#token]을 구성하는 데 사용됩니다.

권장 사항 (Recommendations)

Terraform 웹 애플리케이션을 통해 CTS가 관리하는 워크스페이스에 실행 알림 [/terraform/cloud-docs/workspaces/settings/notifications]을 구성하는 것이 좋습니다. 실행 알림은 실행(run) 진행 상황에 대해 외부 시스템에 알리고, 특히 오류가 발생한 실행과 같은 CTS 이벤트를 사용자에게 알리는 데 도움이 될 수 있습니다.

실행 알림을 구성하려면 사용자가 CTS가 자동화하는 워크스페이스에 알림 구성 [/terraform/cloud-docs/workspaces/settings/notifications#creating-a-notification-configuration]을 수동으로 만들 수 있습니다. 워크스페이스 이름이 구성된 작업의 name [/consul/docs/nia/configuration#name-2]과 동일한 경우 해당 작업에 대한 워크스페이스가 이미 존재할 수 있습니다. 이는 CTS가 이미 실행되어 작업용 워크스페이스를 생성한 경우 발생할 수 있습니다. 또한 CTS가 실행되기 전에 작업용 워크스페이스를 수동으로 생성한 경우에도 발생할 수 있습니다.

더 알아보기 (Learn more)