Crear entornos con Terraform

Cloud Composer 1 | Cloud Composer 2

Esta página complementa la página principal sobre cómo crear entornos. Demuestra cómo configurar un entorno de Cloud Composer y una cuenta de servicio administrada por el usuario para este entorno en un proyecto existente de Google Cloud con Terraform. Puedes usar esta página como punto de partida y, luego, agregar más 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 la 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. Si quieres obtener más información, consulta la documentación de Terraform para el recurso google_project.
  • Instala gcloud CLI.

Autentica con Google Cloud

Para autenticar 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 entorno de Cloud Composer 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
}

Crea una cuenta de servicio personalizada en tu proyecto

De forma predeterminada, los entornos de Cloud Composer usan la cuenta predeterminada de Compute Engine. En esta guía, se demuestra otro enfoque mediante la creación de una cuenta de servicio nueva, que tiene todos los permisos necesarios para ejecutar un entorno de Cloud Composer.

Define una cuenta de servicio personalizada con los siguientes roles y permisos. Si quieres obtener más información sobre los permisos para las cuentas de servicio del entorno, consulta Control de acceso con la 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"
}

Otorga los permisos necesarios a la cuenta de servicio de Cloud Composer

Agrega una vinculación de función nueva a la política de permiso de la cuenta de servicio de tu entorno.

Agrega la cuenta de agente de servicio de Cloud Composer como una cuenta principal nueva a la cuenta de servicio de tu entorno y le otorgas el rol Extensión del agente de servicio de la API de Cloud Composer v2.

Si no usas Terraform para definir la política de permisos de tu proyecto, no uses el siguiente ejemplo. En su lugar, agrega esta vinculación con otros métodos.

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

Crear un entorno

Crear tu entorno con Terraform

En este ejemplo, se muestra cómo crear un entorno en el que se use la cuenta de servicio personalizada. Puedes agregar más parámetros que definan otros parámetros de configuración de tu entorno, como parámetros personalizados de escala y rendimiento, 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-2.8.0-airflow-2.7.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Secuencia de comandos completa de Terraform (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
}

resource "google_project_iam_member" "service_agent_role" {
  provider = google-beta
  project  = "example-project"
  member   = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
  role     = "roles/composer.ServiceAgentV2Ext"
}

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

  config {

    // Add your environment configuration here
    software_config {
      image_version = "composer-2.8.0-airflow-2.7.3"
    }

  }
}

Secuencia de comandos completa de Terraform (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
}

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.8.0-airflow-2.7.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

¿Qué sigue?

Consulta otras páginas de documentación para obtener información sobre la configuración de tu entorno con Terraform. Por ejemplo: