Crea entornos con Terraform

Airflow administrado (3ª gen.) | Airflow administrado (2ª gen.) | Airflow administrado (1ª gen. heredada)

Esta página complementa la página principal sobre la creación de entornos. En ella, se muestra cómo configurar un entorno de Airflow administrado y una cuenta de servicio administrada por el usuario para este entorno en un proyecto Google Cloud existente 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.

Acerca de los módulos de Terraform para Airflow administrado

Google mantiene el proveedor de Terraform para Google Cloud, que incluye el google_composer_environment. Este es el módulo compatible oficialmente con Terraform.

La comunidad de código abierto mantiene otros módulos de Terraform. Para resolver problemas con esos módulos, puedes crear problemas en sus repositorios en GitHub. Un ejemplo de un proyecto de código abierto que se mantiene en GitHub es el módulo terraform-google-composer, que forma parte de los planos y módulos de Terraform para Google Cloud. Si bien Google contribuye a este proyecto, Google no mantiene el módulo y no está relacionado con el proveedor de Terraform para Google Cloud.

Antes de comenzar

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

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

Autenticar 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 el ID del proyecto existente y una región predeterminada para los recursos. Tu entorno de Airflow administrado usa esta región.

El proveedor google-beta admite las funciones de Airflow administrado que están en versión preliminar. Si deseas usar solo las funciones de DG de Airflow administrado, usa el proveedor google en lugar de google-beta.

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 del entorno en tu proyecto

En esta guía, se muestra cómo crear una cuenta de servicio del entorno que tenga todos los permisos necesarios para ejecutar un entorno de Airflow administrado.

Te recomendamos que configures una cuenta de servicio administrada por el usuario para tus entornos de Airflow administrado que solo tenga los permisos necesarios para ejecutar tu entorno y las operaciones en tus DAG, como se describe en esta guía.

Es posible que la cuenta de servicio de tu entorno necesite permisos adicionales para acceder a otros recursos de tu proyecto. Por ejemplo, si tus DAG transfieren datos a BigQuery, es posible que esta cuenta necesite permisos o roles específicos de BigQuery.

Define una cuenta de servicio personalizada con los siguientes roles y permisos:

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 Managed Airflow

Agrega una nueva vinculación de roles a la política de permisos de la cuenta de servicio de tu entorno allow policy.

Agrega la cuenta de agente de servicio de Managed Airflow como una nueva entidad en la cuenta de servicio de tu entorno y otórgale el rol Extensión de 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

Crea tu entorno con Terraform.

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

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Secuencia de comandos completa de 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.17.2-airflow-2.11.1"
    }

    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 cómo configurar tu entorno con Terraform. Por ejemplo: