Criar ambientes com o Terraform

Cloud Composer 1 | Cloud Composer 2

Esta página é um complemento da página principal sobre como criar ambientes. Você verá como configurar um ambiente do Cloud Composer e uma conta de serviço gerenciado pelo usuário para esse ambiente em um projeto atual do Google Cloud com o Terraform. Use esta página como ponto de partida e adicione mais parâmetros de configuração para seu ambiente, conforme necessário.

Antes de começar

  • Neste guia, pressupomos que você tenha um projeto do Google Cloud com faturamento configurado:

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

Autenticar com o Google Cloud

Para autenticar com o 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 atual 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 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
}

Criar uma conta de serviço personalizada no seu projeto

Por padrão, os ambientes do Cloud Composer usam a conta padrão do Compute Engine. Neste guia, você verá outra abordagem: crie uma nova conta de serviço com todas as permissões necessárias para executar um ambiente do Cloud Composer.

Defina uma conta de serviço personalizada com os papéis e permissões a seguir. Para mais informações sobre permissões para contas de serviço do ambiente, consulte Controle de acesso com o 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"
}

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

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

Adicione a conta do agente de serviço do Cloud Composer como uma nova conta principal na conta de serviço do seu ambiente e conceda a ela o papel 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ão do projeto, não use o exemplo a seguir. 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

Criar seu ambiente usando o Terraform.

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

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.8.0-airflow-2.7.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

Script do Terraform completo (parâmetros padrão)

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.8.0-airflow-2.7.3"
    }

  }
}

Script completo do Terraform (conta de serviço personalizada)

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.8.0-airflow-2.7.3"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

A seguir

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