Terraform 상태로 Google Cloud 리소스 가져오기

Terraform은 기존 인프라를 가져올 수 있습니다. 이렇게 하면 다른 방법으로 만든 리소스를 가져와서 Terraform 관리에 사용할 수 있습니다. Google은 Terraform에서 배포를 관리할 수 있도록 Google Cloud 리소스를 Terraform 상태로 가져오는 데 사용할 수 있는 도구를 제공합니다.

프로젝트, 폴더 또는 조직의 상태를 가져올 수 있습니다.

시작하기 전에

구성 커넥터에 명령줄 인터페이스(CLI)를 설치합니다.

gcloud components install config-connector

Config Connector를 사용하면 Google Cloud의 Terraform 가져오기 도구를 사용할 수 있습니다.

리소스에 대한 Terraform 코드 생성

gcloud beta resource-config bulk-export 명령어를 실행하여 프로젝트의 전체 구성을 entire-tf-output 경로에 출력합니다.

gcloud beta resource-config bulk-export \
  --path=entire-tf-output \
  --project=PROJECT_ID \
  --resource-format=terraform

생성된 코드에서 Terraform 모듈 만들기

출력 디렉터리의 콘텐츠를 가리키는 gcloud beta resource-config terraform generate-import 명령어를 실행합니다.

gcloud beta resource-config terraform generate-import entire-tf-output

이 명령어는 Terraform 모듈과 가져오기 스크립트를 생성합니다.

  • gcloud-export-modules.tf 파일. 이 파일은 하위 리소스의 모든 모듈을 가리킵니다. 이 파일의 내용은 다음과 같습니다.

    provider "google" {
    project = "PROJECT_ID"
    }
    
    module "entire-tf-output-projects-PROJECT_ID-ComputeFirewall" {
    source = "./entire-tf-output/projects/PROJECT_ID/ComputeFirewall"
    }
    
    module "entire-tf-output-projects-PROJECT_ID-ComputeBackendService-global" {
    source = "./entire-tf-output/projects/PROJECT_ID/ComputeBackendService/global"
    }
    
    ...and so on
    
  • terraform_import_20220331-19-12-33.sh와 같은 실행 가능한 셸 스크립트 셸 스크립트에는 terraform import 명령어 목록이 포함됩니다.

    #!/bin/sh
    # Terraform Import Script generated by gcloud cli
    
    terraform import module.entire-tf-output-projects-PROJECT_ID-ComputeFirewall.google_compute_firewall.allow_ssh projects/PROJECT_ID/global/firewalls/allow-ssh
    
    ...and so on
    

    terraform import 명령어는 generate-import 명령어로 생성된 모듈을 Terraform 상태로 가져오기 위한 것입니다.

Terraform 상태로 모듈 가져오기

  1. 초기화합니다.

    terraform init
    
  2. 스크립트를 실행합니다.

    ./terraform_import_20220331-19-12-33.sh
    

    출력:

    module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1:
    Importing from ID
    "projects/PROJECT_ID/zones/us-central1-a/instances/instance-1"...
    module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1:
    Import prepared!
     Prepared google_compute_instance for import
    module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1:
    Refreshing state...
    [id=projects/PROJECT_ID/zones/us-central1-a/instances/instance-1]
    
    Import successful!
    
    The resources that were imported are shown above. These resources are now in
    your Terraform state and will henceforth be managed by Terraform.
    

다음 단계