Creare ambienti con Terraform

Cloud Composer 1 | Cloud Composer 2

Questa pagina è un'integrazione alla pagina principale sulla creazione di ambienti. Dimostra 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, per poi aggiungere altri parametri di configurazione per il tuo ambiente in base alle necessità.

Prima di iniziare

  • Questa guida presuppone che tu abbia un progetto Google Cloud con 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 eseguire l'autenticazione con Google Cloud, esegui:

gcloud auth application-default login

Per maggiori 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. L'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
}

Crea un account di servizio personalizzato nel progetto

Per impostazione predefinita, gli ambienti Cloud Composer utilizzano l'account Compute Engine predefinito. Questa guida illustra un altro approccio, ovvero la creazione di un nuovo account di servizio provvisto di tutte le autorizzazioni necessarie per eseguire un ambiente Cloud Composer.

Definisci un account di servizio personalizzato con i ruoli e le autorizzazioni seguenti. Per ulteriori informazioni sulle autorizzazioni per gli account di servizio dell'ambiente, consulta Controllo dell'accesso 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"
}

Concedi le autorizzazioni necessarie all'account di servizio di Cloud Composer

Aggiungi una nuova associazione di ruoli all'account di servizio del tuo ambiente Criteri di autorizzazione.

Aggiungi l'account agente di servizio Cloud Composer come nuova entità all'account di servizio dell'ambiente e concedigli il ruolo 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 invece 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

Creare l'ambiente utilizzando Terraform.

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

Per ulteriori informazioni 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.5.1-airflow-2.6.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Script Terraform completo (parametri predefiniti)

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.5.1-airflow-2.6.3"
    }

  }
}

Script Terraform completo (account di servizio personalizzato)

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.5.1-airflow-2.6.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Passaggi successivi

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