Google Cloud에 리소스를 배포했으므로 이제 Terraform으로 코드형 인프라(IaC)를 관리해야 합니다. Google에서는 프로젝트, 폴더 또는 조직의 리소스에 대해 Terraform 코드를 생성하는 데 사용할 수 있는 도구를 제공합니다.
역할
애셋을 Terraform으로 내보내는 데 필요한 권한을 얻으려면 관리자에게 조직, 폴더 또는 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
- 
  
  
    
      서비스 사용량 소비자(roles/serviceusage.serviceUsageConsumer)
- 
            기존 버킷(--storage-path=BUCKET)에 상태를 쓰는 경우:- 
  
  
    
      스토리지 객체 생성자(roles/storage.objectCreator)
- 
  
  
    
      스토리지 객체 뷰어(roles/storage.objectViewer)
 
- 
  
  
    
      스토리지 객체 생성자(
- 
            새 버킷에 상태를 쓰는 경우: 스토리지 객체 뷰어(roles/storage.objectViewer)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
시작하기 전에
- 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가 사용 설정되어 있는지 확인하세요.'
시작하기 전에 섹션의 안내를 따랐는지 확인합니다.