Terraform으로 환경 만들기

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

이 페이지는 환경 만들기에 대한 기본 페이지와 함께 제공됩니다. Terraform을 사용하여 기존 Google Cloud 프로젝트에서 Cloud Composer 환경 및 이 환경의 사용자 관리형 서비스 계정을 설정하는 방법을 보여줍니다. 이 페이지를 처음에 사용한 다음 필요에 따라 환경의 구성 매개변수를 더 추가할 수 있습니다.

시작하기 전에

  • 이 가이드에서는 결제가 구성된 Google Cloud 프로젝트가 있다고 가정합니다.

    • 기존 프로젝트를 사용할 수 있습니다.
    • Google Cloud 콘솔, Google Cloud CLI, API, Python 클라이언트 라이브러리를 사용하여 새 프로젝트를 만들 수 있습니다.
    • Terraform을 사용하여 프로젝트를 만들고 관리할 수 있습니다. 자세한 내용은 google_project 리소스에 대한 Terraform 문서를 참조하세요.
  • gcloud CLI를 설치합니다.

Google Cloud로 인증

Google Cloud로 인증하려면 다음을 실행합니다.

gcloud auth application-default login

이 명령어에 대한 자세한 내용은 gcloud auth application-default 항목을 참조하세요.

Terraform에서 Google 제공업체 구성

기존 프로젝트 ID와 리소스의 기본 리전을 지정합니다. Cloud Composer 환경은 이 리전을 사용합니다.

provider "google-beta" {
  project = "example-project"
  region  = "us-central1"
}

Cloud Composer API 사용 설정

프로젝트에서 Cloud Composer API를 사용 설정합니다.

resource "google_project_service" "composer_api" {
  provider = google-beta
  project = "example-project"
  service = "composer.googleapis.com"
  // Disabling Cloud Composer API might irreversibly break all other
  // environments in your project.
  // This parameter prevents automatic disabling
  // of the API when the resource is destroyed.
  // We recommend to disable the API only after all environments are deleted.
  disable_on_destroy = false
  // this flag is introduced in 5.39.0 version of Terraform. If set to true it will
  //prevent you from disabling composer_api through Terraform if any environment was
  //there in the last 30 days
  check_if_service_has_usage_on_destroy = true
}

프로젝트에서 환경의 서비스 계정 만들기

이 가이드에서는 Cloud Composer 환경을 실행하는 데 필요한 모든 권한이 있는 환경의 서비스 계정을 만드는 방법을 보여줍니다.

이 가이드에 설명된 대로 DAG에서 환경과 작업을 실행하는 데 필요한 권한만 있는 Cloud Composer 환경에 사용자 관리형 서비스 계정을 설정하는 것이 좋습니다.

이 접근 방식을 사용하지 않는 것이 좋지만 환경의 서비스 계정을 지정하지 않으면 Cloud Composer 환경에서 기본 Compute Engine 서비스 계정을 사용합니다.

환경의 서비스 계정에는 프로젝트의 다른 리소스에 액세스할 수 있는 추가 권한이 필요할 수 있습니다. 예를 들어 DAG가 BigQuery로 데이터를 전송하는 경우 이 계정에는 BigQuery와 관련된 권한이나 역할이 필요할 수 있습니다.

다음 역할 및 권한으로 커스텀 서비스 계정을 정의합니다.

resource "google_service_account" "custom_service_account" {
  provider = google-beta
  account_id   = "custom-service-account"
  display_name = "Example Custom Service Account"
}

resource "google_project_iam_member" "custom_service_account" {
  provider = google-beta
  project  = "example-project"
  member   = format("serviceAccount:%s", google_service_account.custom_service_account.email)
  // Role for Public IP environments
  role     = "roles/composer.worker"
}

Cloud Composer 서비스 계정에 필요한 권한 부여

환경 서비스 계정 허용 정책에 새 역할 바인딩을 추가합니다.

Cloud Composer 서비스 에이전트 계정을 환경 서비스 계정의 새 주 구성원으로 추가하고 Cloud Composer v2 API 서비스 에이전트 확장 역할을 부여합니다.

Terraform을 사용하여 프로젝트의 허용 정책을 정의하지 않는 경우 다음 예시를 사용하지 마세요. 대신 다른 메서드를 사용하여 이 바인딩을 추가합니다.

resource "google_service_account_iam_member" "custom_service_account" {
  provider = google-beta
  service_account_id = google_service_account.custom_service_account.name
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
}

환경 만들기

Terraform을 사용하여 환경을 만듭니다.

이 예시에서는 커스텀 서비스 계정을 사용하는 환경을 만드는 방법을 보여줍니다. 환경의 다른 구성 매개변수를 정의하는 매개변수(예: 커스텀 확장 및 성능 매개변수)나 추가 PyPI 패키지를 더 추가할 수 있습니다.

다른 매개변수에 대한 자세한 내용은 환경 만들기를 참조하세요.

resource "google_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-2.9.11-airflow-2.9.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

전체 Terraform 스크립트

provider "google-beta" {
  project = "example-project"
  region  = "us-central1"
}

resource "google_project_service" "composer_api" {
  provider = google-beta
  project = "example-project"
  service = "composer.googleapis.com"
  // Disabling Cloud Composer API might irreversibly break all other
  // environments in your project.
  disable_on_destroy = false
  // this flag is introduced in 5.39.0 version of Terraform. If set to true it will
  //prevent you from disabling composer_api through Terraform if any environment was
  //there in the last 30 days
  check_if_service_has_usage_on_destroy = true
}

resource "google_service_account" "custom_service_account" {
  provider = google-beta
  account_id   = "custom-service-account"
  display_name = "Example Custom Service Account"
}

resource "google_project_iam_member" "custom_service_account" {
  provider = google-beta
  project  = "example-project"
  member   = format("serviceAccount:%s", google_service_account.custom_service_account.email)
  // Role for Public IP environments
  role     = "roles/composer.worker"
}

resource "google_service_account_iam_member" "custom_service_account" {
  provider = google-beta
  service_account_id = google_service_account.custom_service_account.name
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
}

resource "google_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-2.9.11-airflow-2.9.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

다음 단계

Terraform을 사용한 환경 구성에 대한 자세한 내용은 다른 문서 페이지를 참조하세요. 예를 들면 다음과 같습니다.