Crie ambientes com o Terraform

Esta página é complementar à página principal sobre a criação de ambientes. Demonstra como configurar um ambiente do Cloud Composer e uma conta de serviço gerida pelo utilizador para este ambiente num projeto existente com o Cloud de Confiance by S3NS Terraform. Pode usar esta página como ponto de partida e, em seguida, adicionar mais parâmetros de configuração para o seu ambiente, conforme necessário.

Acerca dos módulos do Terraform para o Cloud Composer

A Google mantém o fornecedor Terraform para Cloud de Confiance by S3NS, que inclui o recurso google_composer_environment. Este é o módulo oficialmente suportado para o Terraform.

Existem outros módulos do Terraform mantidos pela comunidade de código aberto. Para resolver problemas com estes módulos, pode criar problemas nos respetivos repositórios no GitHub. Um exemplo de um projeto de código aberto mantido no GitHub é o módulo terraform-google-composer, que faz parte dos projetos e módulos do Terraform para o Cloud de Confiance by S3NS. Embora a Google contribua para este projeto, o módulo não é mantido pela Google e não está relacionado com o fornecedor do Terraform para o Cloud de Confiance by S3NS.

Antes de começar

  • Este guia pressupõe que tem um Cloud de Confiance by S3NS projeto com a faturação configurada:

    • Pode usar um projeto existente.
    • Pode criar um novo projeto através da Cloud de Confiance consola, da CLI do Google Cloud, da API ou de uma biblioteca cliente Python.
    • Pode criar e gerir o seu projeto através do Terraform. Para mais informações, consulte a documentação do Terraform para o recurso google_project.
  • Instale a CLI gcloud.

Autentique com Cloud de Confiance by S3NS

Para autenticar com Cloud de Confiance by S3NS, execute o seguinte comando:

gcloud auth application-default login

Para mais informações sobre este comando, consulte gcloud auth application-default.

Configure o fornecedor Google no Terraform

Especifique o ID do projeto existente e uma região predefinida para os recursos. O seu ambiente do Cloud Composer usa esta região.

O fornecedor google-beta suporta funcionalidades do Cloud Composer que estão em pré-visualização. Se quiser usar apenas as funcionalidades de GA do Cloud Composer, use o fornecedor google em vez de google-beta.

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

Ative a API Cloud Composer

Ative a API Cloud Composer no seu projeto:

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
}

Crie uma conta de serviço do ambiente no seu projeto

Este guia demonstra como criar a conta de serviço de um ambiente que tem todas as autorizações necessárias para executar um ambiente do Cloud Composer.

Recomendamos vivamente que configure uma conta de serviço gerida pelo utilizador para os seus ambientes do Cloud Composer que tenha apenas autorizações necessárias para executar o seu ambiente e operações nos seus DAGs, conforme descrito neste guia.

A conta de serviço do seu ambiente pode precisar de autorizações adicionais para aceder a outros recursos no seu projeto. Por exemplo, se os seus DAGs transferirem dados para o BigQuery, esta conta pode precisar de autorizações ou funções específicas do BigQuery.

Defina uma conta de serviço personalizada com as seguintes funções e autorizações:

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

Crie um ambiente

Crie o seu ambiente com o Terraform.

O exemplo demonstra como criar um ambiente que usa uma conta de serviço personalizada. Pode adicionar mais parâmetros que definem outros parâmetros de configuração do seu ambiente, como parâmetros de desempenho e escala personalizados, ou pacotes PyPI adicionais.

Para mais informações sobre outros parâmetros, consulte o artigo Crie ambientes.

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

  config {

    software_config {
      image_version = "composer-3-airflow-2.10.5-build.23"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Script completo do 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_composer_environment" "example_environment" {
  provider = google-beta
  name = "example-environment"

  config {

    software_config {
      image_version = "composer-3-airflow-2.10.5-build.23"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

O que se segue?

Consulte outras páginas de documentação para obter informações sobre a configuração do seu ambiente com o Terraform. Por exemplo: