Trusted Cloud by S3NS 리소스를 Terraform 형식으로 내보내기

Trusted Cloud에 리소스를 배포했으므로 이제 Terraform으로 코드형 인프라(IaC)를 관리해야 합니다. Google에서는 프로젝트, 폴더 또는 조직의 리소스에 대해 Terraform 코드를 생성하는 데 사용할 수 있는 도구를 제공합니다.

역할

애셋을 Terraform으로 내보내는 데 필요한 권한을 얻으려면 관리자에게 조직, 폴더 또는 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

시작하기 전에

  • Cloud Shell을 준비합니다.

    Cloud Shell을 실행하고 배포된 리소스의 Terraform 코드를 생성하려는 기본 Trusted Cloud 프로젝트를 설정합니다.

    이 명령어는 프로젝트당 한 번만 실행하면 되며 어떤 디렉터리에서나 실행할 수 있습니다.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 구성 파일에서 명시적 값을 설정하면 환경 변수가 재정의됩니다.

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

    gcloud components install config-connector
    

    구성 커넥터를 사용하면 Trusted 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.s3ns-system.iam.gserviceaccount.com)에 roles/servicenetworking.serviceAgent 역할이 있는지 확인합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.s3ns-system.iam.gserviceaccount.com \
      --role=roles/servicenetworking.serviceAgent
    
  • Cloud 애셋 서비스 에이전트(gcp-sa-cloudasset.s3ns-system.iam.gserviceaccount.com)에 roles/storage.objectAdmin 역할이 있는지 확인합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.s3ns-system.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

디렉터리 구조에 출력 쓰기

  1. 아직 프로젝트 구성을 출력할 디렉터리를 만들지 않았으면 다음과 같이 디렉터리를 만듭니다.

    mkdir OUTPUT_DIRECTORY
    
  2. 프로젝트 전체 구성을 디렉터리로 내보냅니다.

    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

파일을 사용하여 내보낼 리소스 유형 지정

  1. tf-output 디렉터리를 만듭니다.

    cd && mkdir tf-output && cd tf-output
    
  2. types.txt라는 파일을 만들고 리소스 유형 목록을 추가합니다. 예를 들면 다음과 같습니다.

    ComputeBackendBucket
    ComputeBackendService
    ComputeForwardingRule
    
  3. --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가 사용 설정되어 있는지 확인하세요.'

시작하기 전에 섹션의 안내를 따랐는지 확인합니다.

다음 단계