Creare ambienti con Terraform

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Questa pagina è complementare alla pagina principale sulla creazione di ambienti. Mostra come configurare un ambiente Cloud Composer 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 il tuo ambiente, in base alle esigenze.

Prima di iniziare

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

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

Autenticazione con Google Cloud

Per autenticarti con Google Cloud, esegui:

gcloud auth application-default login

Per ulteriori informazioni su questo comando, consulta gcloud auth application-default.

Configura il provider Google in Terraform

Specifica l'ID progetto esistente e una regione predefinita per le risorse. Il tuo ambiente Cloud Composer utilizza questa regione.

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

Abilita l'API Cloud Composer

Abilita l'API Cloud 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
}

Creare l'account di servizio di un ambiente nel progetto

Questa guida mostra come creare un account di servizio di un ambiente con tutte le autorizzazioni necessarie per eseguire un ambiente Cloud Composer.

Ti consigliamo vivamente di configurare un account di servizio gestito dall'utente per i tuoi ambienti Cloud Composer che abbia solo autorizzazioni necessarie per eseguire l'ambiente e le operazioni nei DAG, come descritto in questa guida.

Sebbene sconsigliamo di utilizzare questo approccio, se non specifichi l'account di servizio di un ambiente, l'ambiente Cloud Composer utilizzerà l'account di servizio Compute Engine predefinito.

L'account di servizio del tuo ambiente potrebbe richiedere autorizzazioni aggiuntive per accedere ad altre risorse del progetto. Ad esempio, se i tuoi 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 service account di Cloud Composer

Aggiungi una nuova associazione di ruolo al criterio di autorizzazione dell'account di servizio del tuo ambiente.

Aggiungi l'account agente di servizio Cloud Composer come nuovo principale all'account di servizio del tuo ambiente e assegnagli il ruolo L'estensione agente di servizio API Cloud Composer v2.

Se non utilizzi Terraform per definire il criterio di autorizzazione del progetto, non utilizzare l'esempio seguente. Aggiungi questa associazione 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"
}

Creazione di un ambiente

Crea il tuo 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 del tuo ambiente, ad esempio 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.9.11-airflow-2.9.3"
    }

    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.9.11-airflow-2.9.3"
    }

    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: