Creare ambienti con Terraform

Airflow gestito (terza generazione) | Airflow gestito (seconda generazione) | Airflow gestito (prima generazione legacy)

Questa pagina è complementare alla pagina principale sulla creazione di ambienti. Mostra come configurare un ambiente Airflow gestito e un account di servizio gestito dall'utente per questo ambiente in un progetto Google Cloud esistente con Terraform. Puoi utilizzare questa pagina come punto di partenza, quindi aggiungere altri parametri di configurazione per l'ambiente, se necessario.

Informazioni sui moduli Terraform per Managed Airflow

Google gestisce il provider Terraform per Google Cloud, che include la google_composer_environment. Questo è il modulo supportato ufficialmente per Terraform.

Esistono altri moduli Terraform gestiti dalla community open source. Per risolvere i problemi con questi moduli, puoi creare problemi nei relativi repository su GitHub. Un esempio di progetto open source gestito su GitHub è il modulo terraform-google-composer, che fa parte dei blueprint e dei moduli Terraform per Google Cloud. Sebbene Google contribuisca a questo progetto, il modulo non è gestito da Google e non è correlato al provider Terraform per Google Cloud.

Prima di iniziare

  • Questa guida presuppone che tu abbia un Google Cloud progetto con la fatturazione configurata:

    • Puoi utilizzare un progetto esistente.
    • Puoi creare un nuovo progetto utilizzando Google Cloud laconsole, Google Cloud CLI, l'API o una libreria client Python.
    • Puoi creare e gestire il progetto utilizzando Terraform. Per saperne di più, consulta la documentazione di Terraform per la risorsa google_project.
  • Installa gcloud CLI.

Autentica con Google Cloud

Per autenticare con Google Cloud, esegui:

gcloud auth application-default login

Per saperne di più su questo comando, consulta gcloud auth application-default.

Configura il provider Google in Terraform

Specifica l'ID del progetto esistente e una regione predefinita per le risorse. L'ambiente Airflow gestito utilizza questa regione.

Il provider google-beta supporta le funzionalità di Managed Airflow in anteprima. Se vuoi utilizzare solo le funzionalità GA di Managed Airflow, utilizza il provider google anziché google-beta.

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

Abilita l'API Composer

Abilita l'API Composer nel tuo progetto:

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 il account di servizio di un ambiente nel tuo progetto

Questa guida mostra come creare il account di servizio di un ambiente con tutte le autorizzazioni necessarie per eseguire un ambiente Airflow gestito.

Ti consigliamo vivamente di configurare un service account gestito dall'utente per gli ambienti Managed Airflow che disponga solo delle autorizzazioni necessarie per eseguire l'ambiente e le operazioni nei DAG, come descritto in questa guida.

Il account di servizio del tuo ambiente potrebbe richiedere autorizzazioni aggiuntive per accedere ad altre risorse nel tuo progetto. Ad esempio, se i DAG trasferiscono dati in BigQuery, questo account potrebbe richiedere autorizzazioni o ruoli specifici per BigQuery.

Definisci un account di servizio personalizzato con i seguenti ruoli e autorizzazioni:

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

Concedi le autorizzazioni necessarie al account di servizio Managed Airflow

Aggiungi un nuovo binding di ruolo al criterio di autorizzazione del account di servizio del tuo ambiente allow policy.

Aggiungi l'account service agent di Managed Airflow come nuova entità al account di servizio del tuo ambiente e concedigli il ruolo Estensione service agent API Cloud Composer v2.

Se non utilizzi Terraform per definire il criterio di autorizzazione del tuo progetto, non utilizzare l'esempio seguente. Aggiungi invece questo binding utilizzando altri metodi.

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

Crea un ambiente

Crea l'ambiente utilizzando Terraform.

L'esempio mostra come creare un ambiente che utilizza un account di servizio personalizzato. Puoi aggiungere altri parametri che definiscono altri parametri di configurazione dell'ambiente, come parametri di scalabilità e prestazioni personalizzati o pacchetti PyPI aggiuntivi.

Per saperne di più sugli altri parametri, consulta Creare ambienti.

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

  config {

    software_config {
      image_version = "composer-2.17.0-airflow-2.11.1"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Script Terraform completo

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.0-airflow-2.11.1"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Passaggi successivi

Consulta le altre pagine della documentazione per informazioni sulla configurazione dell'ambiente con Terraform. Ad esempio: