Criar ambientes com o Terraform

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Esta página é complementar à página principal sobre como criar ambientes. Ele demonstra como configurar um ambiente do Cloud Composer e uma conta de serviço gerenciada pelo usuário para esse ambiente em um projeto Google Cloud com o Terraform. Use esta página como ponto de partida e adicione mais parâmetros de configuração ao seu ambiente, conforme necessário.

Antes de começar

  • Este guia pressupõe que você tenha um projeto Google Cloud com faturamento configurado:

    • Você pode usar um projeto atual.
    • É possível criar um novo projeto usando o console do Google Cloud, a CLI do Google Cloud, a API ou uma biblioteca de cliente Python.
    • É possível criar e gerenciar seu projeto usando o Terraform. Para mais informações, consulte a documentação do Terraform para o recurso google_project.
  • Instale a CLI gcloud.

Autenticar com Google Cloud

Para fazer a autenticação com Google Cloud, execute:

gcloud auth application-default login

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

Configurar o provedor do Google no Terraform

Especifique o ID do projeto e uma região padrão para os recursos. Seu ambiente do Cloud Composer usa essa região.

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

Ativar a API do Cloud Composer

Ative a API Cloud Composer no 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
}

Criar uma conta de serviço de ambiente no projeto

Este guia mostra como criar uma conta de serviço de ambiente com todas as permissões necessárias para executar um ambiente do Cloud Composer.

É altamente recomendável configurar uma conta de serviço gerenciada pelo usuário para os ambientes do Cloud Composer que têm apenas permissões necessárias para executar o ambiente e as operações nos DAGs, conforme descrito neste guia.

Embora não recomendemos essa abordagem, se você não especificar a conta de serviço de um ambiente, o ambiente do Cloud Composer usará a conta de serviço padrão do Compute Engine.

A conta de serviço do seu ambiente pode precisar de outras permissões para acessar outros recursos no projeto. Por exemplo, se os DAGs transferirem dados para o BigQuery, essa conta poderá precisar de permissões ou funções específicas para o BigQuery.

Defina uma conta de serviço personalizada com os seguintes papéis e permissõ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"
}

Conceder as permissões necessárias à conta de serviço do Cloud Composer

Adicione uma nova vinculação de função à política de permissão da conta de serviço do seu ambiente.

Você adiciona a conta de agente de serviço do Cloud Composer como um novo principal na conta de serviço do seu ambiente e concede a ela o papel de extensão do agente de serviço da API Cloud Composer v2.

Se você não estiver usando o Terraform para definir a política de permissões do projeto, não use o exemplo abaixo. Em vez disso, adicione essa vinculação usando outros 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"
}

Criar um ambiente

Crie seu ambiente usando o Terraform.

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

Para mais informações sobre outros parâmetros, consulte Criar ambientes.

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

  config {

    software_config {
      image_version = "composer-2.11.2-airflow-2.10.2"
    }

    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_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.11.2-airflow-2.10.2"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

A seguir

Consulte outras páginas da documentação para saber como configurar seu ambiente com o Terraform. Exemplo: