배포된 리소스를 Infrastructure Manager로 가져오기


이 튜토리얼에서는 리소스를 Google Cloud Infrastructure Manager 배포로 가져오는 방법을 보여줍니다. Terraform을 사용하여 프로비저닝된 리소스만 가져올 수 있습니다.

Terraform 구성이 있고 아직Google Cloud에 배포하지 않은 경우 Infrastructure Manager를 사용하여 인프라 배포를 참고하세요.

이 튜토리얼은 Terraform CLI를 사용하여Google Cloud 에 Virtual Private Cloud (VPC)를 배포하는 것으로 시작합니다. 그런 다음 이 튜토리얼에서는 이러한 배포된 리소스를 Infrastructure Manager로 가져와서 리소스를 Infrastructure Manager 배포로 관리하는 방법을 보여줍니다.

이 튜토리얼의 예시를 사용하여 다른Google Cloud 리소스를 Infra Manager로 가져오는 방법을 이해할 수 있습니다. 배포를 Infra Manager로 가져오려면 리소스를 프로비저닝하는 데 사용된 Terraform 구성이 제약 조건을 준수해야 하며 리소스가 지원되는 Terraform 버전을 사용하여 프로비저닝되어야 합니다.

비용

이 튜토리얼에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud구성요소를 사용합니다.

시작하기 전에

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Install the Google Cloud CLI.

  3. 외부 ID 공급업체 (IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  4. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  5. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Infrastructure Manager API:

    gcloud services enable config.googleapis.com
  8. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant the roles/config.agent IAM role to the service account:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
  9. Install the Google Cloud CLI.

  10. 외부 ID 공급업체 (IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

  11. gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.

    gcloud init
  12. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  13. Verify that billing is enabled for your Google Cloud project.

  14. Enable the Infrastructure Manager API:

    gcloud services enable config.googleapis.com
  15. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant the roles/config.agent IAM role to the service account:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
  16. Terraform지원되는 버전을 설치합니다.
  17. Google Cloud에 리소스 배포

    이 튜토리얼에서 배포하는 Google Cloud 리소스는 VPC입니다. 이 섹션에서는 배포된 리소스를 Infra Manager로 가져오는 예로 사용할 리소스를 배포하는 방법을 보여줍니다.

    이 튜토리얼에서는 us-central1 리전을 사용합니다. 다른 리전을 사용하려면 Infra Manager가 실행되는 위치를 사용하면 됩니다. 유효한 위치 목록은 인프라 관리자 위치를 참고하세요.

    구성에서 리소스에 대한 권한 부여

    인프라 관리자를 실행하는 데 필요한 권한을 부여했지만 배포하는 구성에 설명된 리소스에 특정한 권한도 부여해야 합니다.

    Terraform 구성에 정의된 리소스인 VPC 네트워크를 만들 수 있는 권한을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/compute.networkAdmin
    

    다음을 바꿉니다.

    • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름입니다.
    • PROJECT_ID: 프로젝트 ID입니다.

    Terraform CLI를 사용하여 리소스 배포

    1. 다음 Terraform 구성을 사용하여 VPC 네트워크를 만듭니다. 이렇게 하려면 다음 명령어를 실행하세요.

      mkdir vpc_to_import
      cd vpc_to_import
      cat <<EOF > main.tf
      variable "project_id" {
        type = string
      }
      
      resource "google_compute_network" "vpc_network" {
        name = "my-custom-mode-network"
        project = var.project_id
      }
      EOF
      
    2. 다음 명령어를 사용하여 Terraform CLI를 통해 구성을 배포합니다.

      terraform init
      echo "**************  TERRAFORM APPLY  ******************"
      terraform apply -var="project_id=PROJECT_ID" -auto-approve
      cd ..
      

    VPC가 프로비저닝되면 Creation complete 텍스트로 시작하는 출력이 표시됩니다.

    Terraform 구성에 정의된 VPC가 이제 Google Cloud에 배포됩니다. Terraform은 상태 파일을 만들고 이 파일은 main.tf 파일 옆의 파일 시스템에 있습니다.

    인프라 관리자에서 자리표시자 배포 만들기

    Infra Manager로 리소스를 가져오려면 Infra Manager에 기존 배포가 있어야 합니다.

    이 튜토리얼에서는 스토리지 버킷을 사용하여 Terraform 구성을 저장합니다. 이 튜토리얼을 사용하여 다른 배포를 Infra Manager로 가져오는 방법을 이해하는 경우 스토리지 버킷, 공개 Git 저장소 또는 로컬 머신에 Terraform 구성을 저장하면 됩니다.

    1. 빈 Terraform 구성을 스토리지 버킷에 추가합니다.

      gcloud storage buckets create gs://import-deployment-configuration --project=PROJECT_ID
      
      mkdir placeholder_deployment
      cd placeholder_deployment
      cat <<EOF > main.tf
      EOF
      
      gcloud storage cp main.tf gs://import-deployment-configuration
      cd ..
      
    2. Infra Manager를 사용하여 배포를 만듭니다.

      gcloud infra-manager deployments apply projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
      --gcs-source gs://import-deployment-configuration \
      --input-values project_id=PROJECT_ID \
      --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT
      

      배포가 완료되면 다음이 표시됩니다.

      Creating the deployment...done
      

    이제 인프라 관리자 배포가 있습니다. 그런 다음 이 배포가 VPC를 관리하도록 상태 파일과 Terraform 구성을 이 배포에 추가해야 합니다.

    상태 파일 및 Terraform 구성 가져오기

    Infra Manager를 사용하여 배포된 리소스 (VPC)를 관리하려면 상태 파일과 Terraform 구성을 Infra Manager에 추가해야 합니다.

    배포 잠금

    상태를 변경할 수 있도록 인프라 관리자 배포를 잠급니다.

    LOCK_ID=$(gcloud infra-manager deployments lock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --format="get(lockId)")
    

    Terraform 상태 파일을 Infra Manager로 가져오기

    배포된 리소스의 상태 파일을 가져옵니다. 이 상태 파일은 Terraform CLI를 사용하여 VPC를 배포할 때 Terraform에 의해 생성되었습니다.

    Terraform 상태 파일을 Infra Manager 배포에 업로드합니다.

    SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --lock-id ${LOCK_ID} --format="get(signedUri)")
    cd vpc_to_import
    curl -s -X PUT --upload-file terraform.tfstate $SIGNED_STATE_UPLOAD_URL
    

    Cloud Storage 버킷에 Terraform 구성 업로드

    Terraform 상태 파일을 업로드했으므로 VPC 네트워크를 만드는 데 사용한 Terraform 구성도 업로드해야 합니다. Infra Manager 미리보기를 실행할 때 리소스의 변경사항이 발견되지 않도록 Infra Manager에 Terraform 상태 파일이 필요합니다.

    다음 명령어를 사용하여 Terraform 구성을 Cloud Storage에 업로드합니다.

    gcloud storage cp main.tf gs://import-deployment-configuration
    

    배포 잠금 해제

    이 튜토리얼을 사용하여 리소스를 Infra Manager로 가져오는 방법을 이해하는 경우 상태 파일과 Terraform 구성에 차이가 없는지 확인하세요. 상태 파일과 Terraform 구성 간에 차이가 있는 경우 상태 파일이 배포하려는 리소스를 설명하는지 확인합니다. 배포를 잠금 해제할 때 상태 파일과 Terraform 구성 간에 차이가 있으면 배포를 잠금 해제할 때 Infra Manager가 상태 파일과 일치하도록 리소스를 생성하거나 삭제합니다.

    Infra Manager를 사용하여 리소스를 관리하려면 배포를 잠금 해제해야 합니다. 이 튜토리얼에서는 상태 파일과 Terraform 구성이 동일한 구성을 설명하므로 Infra Manager가 리소스를 생성하거나 삭제하지 않습니다.

    다음을 실행하여 배포에서 잠금을 해제합니다.

    gcloud infra-manager deployments unlock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
    --project PROJECT_ID \
    --location us-central1 \
    --lock-id ${LOCK_ID}
    

    이제 상태 파일과 Terraform 구성이 인프라 관리자 배포에 추가되었으므로 배포된 리소스 가져오기가 완료되었습니다. 배포된 VPC는 이제 인프라 관리자가 관리합니다.

    리소스 변경사항 미리보기

    배포에서 미리보기를 실행하여 Terraform 상태와 Google Cloud 에 배포된 리소스가 동기화되었는지 확인합니다.

    1. 다음 명령어를 사용하여 미리보기를 만듭니다.

      gcloud infra-manager previews create projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview \
      --gcs-source gs://import-deployment-configuration \
      --input-values project_id=PROJECT_ID \
      --deployment projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
      --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
      
    2. 미리보기 세부정보를 가져와 미리보기가 완료되었는지 확인합니다.

      gcloud infra-manager previews describe projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview
      
    3. 변경사항을 검토하기 위해 미리보기를 내보냅니다.

      SIGNED_BIN_PLAN_URL=$(gcloud infra-manager previews export projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview --format "get(result.binarySignedUri)")
      curl -X GET --output tfplan.out $SIGNED_BIN_PLAN_URL
      
    4. 구성이 로컬에 있고 다음 명령어로 초기화되었는지 확인합니다.

      terraform init
      
    5. Terraform show를 실행하여 Infrastructure Manager 배포 상태와 구성 간의 변경사항을 검토합니다.

      terraform show tfplan.out
      

    Google Cloud 의 VPC 리소스와 상태 파일이 동기화되면 terraform show에서 다음을 출력하여 인프라 관리자가 배포 상태와 구성 간에 변경사항을 확인하지 않음을 확인합니다. 다음과 비슷한 출력이 표시됩니다.

    No changes. Your infrastructure matches the configuration.
    
    Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
    

    이제 배포된 리소스를 가져와 Infra Manager에서 관리할 수 있습니다. 예를 들어 이제 Infra Manager를 사용하여 배포를 업데이트할 수 있습니다.

    배포를 업데이트하여 배포가 Infra Manager로 성공적으로 가져왔는지 확인할 수도 있습니다.

    삭제

    이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

    프로젝트 삭제

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    개별 리소스 삭제

    VPC와 배포에 관한 메타데이터를 삭제합니다.

    gcloud infra-manager deployments delete projects/PROJECT_ID/locations/us-central1/deployments/quickstart-deployment
    

    다음 단계