Crea entornos con Terraform

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Esta página es complementaria de la página principal sobre cómo crear entornos. En él, se muestra cómo configurar un entorno de Cloud Composer y una cuenta de servicio administrada por el usuario para este entorno en un proyecto de Google Cloud existente con Terraform. Puedes usar esta página para comenzar y, luego, agregar otras parámetros de configuración para tu entorno, según sea necesario.

Antes de comenzar

  • En esta guía, se supone que tienes un proyecto de Google Cloud con facturación configurada:

    • Puedes usar un proyecto existente.
    • Puedes crear un proyecto nuevo. con la consola de Google Cloud, Google Cloud CLI, una API o una biblioteca cliente de Python.
    • Puedes crear y administrar tu proyecto con Terraform. Para ver más consulta la documentación de Terraform para obtener Recurso google_project.
  • Instala la CLI de gcloud.

Autentica con Google Cloud

Para autenticarte con Google Cloud, ejecuta lo siguiente:

gcloud auth application-default login

Para obtener más información sobre este comando, consulta gcloud auth application-default.

Configura el proveedor de Google en Terraform

Especifica tu ID del proyecto existente. y una región predeterminada para los recursos. Tu Cloud Composer entorno usa esta región.

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

Habilita la API de Cloud Composer

Habilita la API de Cloud Composer en tu proyecto:

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
}

Crea una cuenta de servicio personalizada en tu proyecto

De forma predeterminada, los entornos de Cloud Composer usan de Compute Engine. En esta guía, se muestra otro enfoque, ya que crear una nueva cuenta de servicio que tenga todos los permisos necesarios para ejecutar un entorno de Cloud Composer.

Define una cuenta de servicio personalizada con los siguientes roles y permisos. Para obtener más información sobre los permisos de las cuentas de servicio del entorno, consulta Control de acceso con IAM.

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"
}

Crear un entorno

Crear tu entorno con Terraform

En el ejemplo, se muestra cómo crear un entorno que use una red cuenta de servicio. Puedes agregar más parámetros que definan otros parámetros de configuración de tu entorno, como parámetros de escala y rendimiento personalizados, o paquetes de PyPI adicionales.

Para obtener más información sobre otros parámetros, consulta Crea entornos.

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

  config {

    software_config {
      image_version = "composer-3-airflow-2.9.1-build.8"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Secuencia de comandos de Terraform completa (parámetros predeterminados)

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_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    // Add your environment configuration here

    software_config {
      image_version = "composer-3-airflow-2.9.1-build.8"
    }

  }
}

Secuencia de comandos de Terraform completa (cuenta de servicio personalizada)

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_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-3-airflow-2.9.1-build.8"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

¿Qué sigue?

Consulta otras páginas de la documentación para obtener información sobre cómo configurar tu ambiente con Terraform. Por ejemplo: