Criar ambientes com o Terraform

Airflow gerenciado (Geração 3) | Airflow gerenciado (Geração 2) | Airflow gerenciado (Geração 1 legada)

Esta página é complementar à página principal sobre como criar ambientes. Ela demonstra como configurar um ambiente do Airflow gerenciado e uma conta de serviço gerenciado pelo usuário para esse ambiente em um projeto atual com o Terraform. Google Cloud Você pode usar esta página como ponto de partida e adicionar mais parâmetros de configuração ao ambiente, conforme necessário.

Sobre os módulos do Terraform para o Airflow gerenciado

O Google mantém o provedor do Terraform para Google Cloud, que inclui o google_composer_environment. Esse é o módulo oficialmente compatível com o Terraform.

Há outros módulos do Terraform mantidos pela comunidade de código aberto. Para resolver problemas com esses módulos, crie problemas nos repositórios deles no GitHub. Um exemplo de projeto de código aberto mantido no GitHub é o módulo terraform-google-composer, que faz parte dos blueprints e módulos do Terraform para Google Cloud. Embora o Google contribua com esse projeto, o módulo não é mantido pelo Google e não está relacionado ao provedor do Terraform para o Google Cloud.

Antes de começar

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

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

Autenticar com Google Cloud

Para autenticar com o Airflow gerenciado 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. O ambiente do Airflow gerenciado usa essa região.

O provedor google-beta oferece suporte aos recursos do Airflow gerenciado que estão em pré-lançamento. Se você quiser usar apenas os recursos de GA do Airflow gerenciado, use o google provedor em vez de google-beta.

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

Ativar a API Cloud Composer

Ative a API 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 demonstra como criar uma conta de serviço de ambiente que tenha todas as permissões necessárias para executar um ambiente do Airflow gerenciado.

Recomendamos configurar uma conta de serviço gerenciado pelo usuário para os ambientes do Airflow gerenciado que tenha apenas permissões necessárias para executar o ambiente e as operações nos DAGs, conforme descrito neste guia.

A conta de serviço do ambiente pode precisar de permissões adicionais para acessar outros recursos no projeto. Por exemplo, se os DAGs transferirem dados para o BigQuery, essa conta poderá precisar de permissões ou papéis específicos do 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 Airflow gerenciado

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

Adicione a conta do agente de serviço do Airflow Gerenciado como um novo principal na conta de serviço do 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

Crie seu ambiente usando o Terraform.

O exemplo demonstra como criar um ambiente que usa uma conta de serviço personalizada. Você pode adicionar mais parâmetros que definem outros parâmetros de configuração do ambiente, como parâmetros de escalonamento 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.17.0-airflow-2.11.1"
    }

    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.17.0-airflow-2.11.1"
    }

    node_config {
      service_account = google_service_account.custom_service_account.email
    }

  }
}

A seguir

Consulte outras páginas de documentação para informações sobre como configurar o ambiente com o Terraform. Por exemplo: