Google Cloud에 리소스를 배포했으므로 이제 Terraform으로 코드형 인프라(IaC)를 관리해야 합니다. Google에서는 프로젝트, 폴더 또는 조직의 리소스에 대해 Terraform 코드를 생성하는 데 사용할 수 있는 도구를 제공합니다.
시작하기 전에
Cloud Shell을 준비합니다.
Cloud Shell을 실행하고 배포된 리소스의 Terraform 코드를 생성할 기본 Google Cloud 프로젝트를 설정합니다.
이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서나 실행할 수 있습니다.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.
Cloud Shell에서 구성 커넥터의 명령줄 인터페이스(CLI)를 설치합니다.
gcloud components install config-connector
구성 커넥터를 사용하면 Google Cloud의 Terraform 일괄 내보내기 도구를 사용할 수 있습니다.
ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation
이 표시되면 대신 다음 명령어를 실행합니다.sudo apt-get install google-cloud-sdk-config-connector
Cloud Asset API를 사용 설정합니다.
gcloud services enable cloudasset.googleapis.com
이 내보내기에 사용할 서비스 계정을 만듭니다.
gcloud beta services identity create --service=cloudasset.googleapis.com
Cloud 애셋 서비스 에이전트(
gcp-sa-cloudasset.iam.gserviceaccount.com
)에roles/servicenetworking.serviceAgent
역할이 있는지 확인합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/servicenetworking.serviceAgent
Cloud 애셋 서비스 에이전트(
gcp-sa-cloudasset.iam.gserviceaccount.com
)에roles/storage.objectAdmin
역할이 있는지 확인합니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \ --role=roles/storage.objectAdmin
제한사항
Terraform Google 제공업체에서 지원되더라도 일부 리소스 유형은 Terraform 형식으로 내보내기가 지원되지 않습니다. Terraform 형식으로 내보내기에 지원되는 리소스 유형 목록을 보려면 gcloud beta resource-config list-resource-types
명령어를 실행합니다.
Terraform HCL 코드로 전체 프로젝트 구성 내보내기
gcloud beta resource-config bulk-export --resource-format=terraform
명령어는 프로젝트, 폴더 또는 조직에 구성된 리소스를 내보내고 HCL 코드 형식으로 화면에 출력합니다.
gcloud beta resource-config bulk-export \ --project=PROJECT_ID \ --resource-format=terraform
디렉터리 구조에 출력 쓰기
아직 프로젝트 구성을 출력할 디렉터리를 만들지 않았으면 다음과 같이 디렉터리를 만듭니다.
mkdir OUTPUT_DIRECTORY
프로젝트 전체 구성을 디렉터리로 내보냅니다.
gcloud beta resource-config bulk-export \ --path=OUTPUT_DIRECTORY \ --project=PROJECT_ID \ --resource-format=terraform
--path
플래그는 HCL 코드를 출력할 위치를 지정합니다.
명령어를 실행하면 각 리소스의 HCL 코드가 다음 디렉터리 구조의 별도 .tf
파일로 출력됩니다.
OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE
단일 파일에 출력 쓰기
출력을 화면에 출력하거나 별도의 .tf
파일을 만들지 않으려면 다음 예시와 같이 모든 출력을 단일 파일에 작성합니다.
gcloud beta resource-config bulk-export \ --resource-format=terraform \ --project=PROJECT_ID \ >> gcp_resources.tf
출력 필터링
리소스 유형을 지정하여 일괄 내보내기 명령어의 출력을 필터링합니다.
필터링할 지원되는 리소스 유형 나열
Terraform 형식으로 내보내기에 지원되는 리소스 유형 목록을 보려면 gcloud beta resource-config list-resource-types
명령어를 실행합니다.
gcloud beta resource-config list-resource-types
원하는 경우, 파일에 출력을 작성합니다.
gcloud beta resource-config list-resource-types >> strings.txt
출력에서 Compute Engine VM의 리소스 유형은 다음과 같이 나열됩니다.
KRM KIND: ComputeInstance
KRM KIND:
프리픽스는 무시해도 됩니다.
단일 리소스 유형 내보내기
ComputeInstance
와 같은 문자열을 사용하여 프로젝트의 특정 리소스 유형을 HCL 코드 형식으로 내보냅니다.
gcloud beta resource-config bulk-export \ --resource-types=RESOURCE_TYPE \ --project=PROJECT_ID \ --resource-format=terraform
--resource-types
플래그는 출력할 리소스 유형을 지정합니다.
여러 리소스 유형 내보내기
VM 인스턴스 및 방화벽 규칙을 HCL 코드 형식으로 내보냅니다.
gcloud beta resource-config bulk-export \ --resource-types=ComputeFirewall,ComputeInstance \ --project=PROJECT_ID \ --resource-format=terraform
파일을 사용하여 내보낼 리소스 유형 지정
tf-output
디렉터리를 만듭니다.cd && mkdir tf-output && cd tf-output
types.txt
라는 파일을 만들고 리소스 유형 목록을 추가합니다. 예를 들면 다음과 같습니다.ComputeBackendBucket ComputeBackendService ComputeForwardingRule
--resource-types-file
플래그와 함께gcloud beta resource-config bulk-export
명령어를 실행합니다.gcloud beta resource-config bulk-export \ --resource-types-file=types.txt \ --path=tf-output \ --project=PROJECT_ID \ --resource-format=terraform
프로젝트에 특정 리소스 유형이 없으면 명령어는 성공하지만 아무 리소스 유형도 출력되지 않습니다.
문제 해결
다음 오류가 표시되는 경우:
'내보내기 중에 권한이 거부되었습니다. Cloud 애셋 인벤토리 API가 사용 설정되어 있는지 확인하세요.'
시작하기 전에 섹션의 안내를 따랐는지 확인합니다.