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 상태로 모듈 가져오기
초기화합니다.
terraform init
스크립트를 실행합니다.
./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.