DM Convert 사용 권장사항

Terraform으로 변환하기 위한 권장사항

상태

상태 파일은 Terraform에서 관리하는 리소스에 대한 정보를 저장합니다. 기본적으로 Terraform은 상태를 디스크에 로컬로 저장합니다. 원격으로 상태를 저장하면 분산형 공동작업을 허용하고 민감한 정보를 보호하며 지속적 통합(CI)에서 Terraform을 실행할 수 있습니다.

Deployment Manager 템플릿을 Terraform으로 변환하고 선택적으로 리소스를 가져오기한 후에는 Cloud Storage에 원격으로 상태 저장하는 단계를 수행하는 것이 좋습니다.

모듈

복잡성을 줄이고 일관성을 높이며 구성의 가능성을 높이기 위해서는 Terraform 모듈을 사용하여 리소스 컬렉션을 캡슐화하면 됩니다.

모듈을 사용하려면 다음 중 하나를 수행합니다.

대부분의 사용 사례에서 게시된 모듈을 사용하는 것이 좋습니다.

커스텀 모듈 만들기

  1. 구성을 변환한 후에는 모듈로 옮길 리소스를 식별합니다.

  2. 식별한 리소스의 구성을 모듈 디렉터리로 이동하고 필요한 변수를 매개변수로 변환합니다.

    다음 예시에서 google_bigquery_datasetgoogle_bigquery_table을 모듈로 이동하는 방법을 살펴볼 수 있습니다.

    # bq-module/main.tf
    resource "google_bigquery_dataset" "bigquerydataset" {
      provider = google-beta
    
      default_table_expiration_ms = 36000000
      location = "us-west1"
      dataset_id = var.dataset_id
      project = var.project_id
    }
    
    resource "google_bigquery_table" "bigquerytable" {
      provider = google-beta
    
      labels = {
        data-source = "external"
        schema-type = "auto-junk"
      }
      dataset_id = var.dataset_id
      project = var.project_id
      table_id = var.table_id
    
      depends_on = [
        google_bigquery_dataset.bigquerydataset
      ]
    }
    
    # bq-module/variables.tf
    variable "project_id" {
      description = "Project ID"
      type = string
    }
    
    variable "dataset_id" {
      description = "Dataset ID"
      type = string
    }
    
    variable "table_id" {
      description = "Table ID"
      type = string
    }
    
  3. 내보내기한 main.tf 파일에서 원래의 구성을 사용자가 만든 모듈로 교체합니다.

    다음 예시에서는 이전 단계의 예시에서 만든 모듈을 사용해 이같이 교체하는 방법을 보여줍니다.

    # main.tf
    module "bq" {
      source = "./bq-module"
    
      project_id = "PROJECT_ID"
      dataset_id = "bigquerydataset"
      table_id   = "bigquerytable"
    }
    
  4. 로컬 모듈을 초기화하려면 다음 명령어를 실행합니다.

    terraform init
    
  5. 리소스와 연결된 Terraform 상태를 모듈 인스턴스로 이동합니다.

    이전 단계의 예시에서 만든 모듈을 이동하려면 다음 명령어를 실행합니다.

    terraform state mv google_bigquery_dataset.bigquerydataset module.bq.google_bigquery_dataset.bigquerydataset
    terraform state mv google_bigquery_table.bigquerytable module.bq.google_bigquery_table.bigquerytable
    

    이 예시에서 이동 시 출력은 다음과 같습니다.

    Move "google_bigquery_dataset.bigquerydataset" to "module.bq.google_bigquery_dataset.bigquerydataset"
    Successfully moved 1 object(s).
    Move "google_bigquery_table.bigquerytable" to "module.bq.google_bigquery_table.bigquerytable"
    Successfully moved 1 object(s).
    
  6. 다음 명령어를 실행하여 리소스가 변경되지 않았는지 확인합니다.

    terraform plan
    

    다음은 명령어 실행 시 수신하게 되는 출력의 예시입니다.

    No changes. Your infrastructure matches the configuration.
    

게시된 모듈 사용하기

  1. 구성을 변환한 후에는 게시된 모듈 및 게시된 모듈로 이동할 리소스를 식별합니다.

  2. 모듈 문서를 참조하여 모듈의 구성 옵션을 식별합니다.

  3. 현재 리소스 구성에 설정한 모듈의 인스턴스를 만듭니다.

    예를 들어 google_bigquery_datasetgoogle_bigquery_table을 공식 BigQuery 모듈로 이동하려는 경우 모듈은 다음 예시와 같이 표시됩니다.

    module "bq" {
      source  = "terraform-google-modules/bigquery/google"
      version = "~> 5.0"
    
      project_id          = "PROJECT_ID"
      dataset_id          = "bigquerydataset"
      location            = "us-west1"
      deletion_protection = true
    
      tables = [
        {
          table_id           = "bigquerytable",
          friendly_name      = "bigquerytable"
          time_partitioning  = null,
          range_partitioning = null,
          expiration_time    = null,
          clustering         = [],
          schema             = null,
          labels = {
            data-source = "external"
            schema-type = "auto-junk"
          },
        }
      ]
    }
    
  4. 로컬 모듈을 초기화하려면 다음 명령어를 실행합니다.

    terraform init
    
  5. 모듈 소스 코드를 읽고 업스트림 모듈 내에서 리소스 주소를 식별하고 이동 명령어를 구성합니다.

    terraform state mv google_bigquery_dataset.bigquerydataset  module.bq.google_bigquery_dataset.main
    terraform state mv google_bigquery_table.bigquerytable 'module.bq.google_bigquery_table.main["bigquerytable"]'
    
  6. 구성 변경사항을 보려면 다음 명령어를 실행합니다.

    terraform plan
    

사용자가 선택한 게시된 모듈의 기본 설정이 다르거나 사용자의 구성과 다르게 구성된 경우 명령어 실행 시 출력에 차이점이 강조 표시될 수 있습니다.

작동

Cloud Build, Jenkins, GitHub Actions와 같은 지속적 통합(CI) 시스템을 사용하여 규모에 맞게 Terraform 실행을 자동화하는 것이 좋습니다. 자세한 내용은 Terraform, Cloud Build, GitOps를 사용하여 코드형 인프라 관리를 참조하세요.

트리거 생성을 부트스트랩하고 인증을 간소화하려면 Cloud Build 작업공간 청사진을 사용하면 됩니다.

구조

DM Convert에서 변환된 각 구성은 단일 상태 파일에 매핑된 단일 루트 구성입니다. 단일 상태 파일에 많은 수의 리소스가 포함되도록 설정하지 않는 것이 좋습니다. 구성을 변환한 후에는 새 구성이 루트 모듈 권장사항을 따르는지 확인하는 것이 좋습니다.