Criar ambientes do Cloud Composer

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Esta página explica como criar um ambiente do Cloud Composer.

Antes de começar

Etapa 1. Criar ou escolher uma conta de serviço do ambiente

Ao criar um ambiente, você especifica uma conta de serviço. Essa conta de serviço é chamada de conta de serviço do ambiente. Seu ambiente usa essa conta de serviço para realizar a maioria das operações.

A conta de serviço do ambiente não é uma conta de usuário. Uma conta de serviço é um tipo especial de conta usada por um aplicativo ou uma instância de máquina virtual (VM), não uma pessoa.

Não é possível mudar a conta de serviço do ambiente depois.

Se você ainda não tiver uma conta de serviço para ambientes do Cloud Composer no seu projeto, crie uma.

Consulte Criar ambientes (Terraform) para conferir um exemplo detalhado de como criar uma conta de serviço para seu ambiente no Terraform.

Para criar uma nova conta de serviço para seu ambiente:

  1. Crie uma nova conta de serviço conforme descrito na documentação do Identity and Access Management.

  2. Conceda um papel a ele, conforme descrito na documentação do Identity and Access Management. O papel necessário é Worker do Composer (composer.worker).

  3. Se o ambiente usar restrições de local do recurso, ou instalar pacotes PyPI de um repositório do Artifact Registry ou de um repositório particular, conceda o papel Usuário da conta de serviço (iam.serviceAccountUser) à conta de serviço gerenciada pelo usuário que executa o ambiente em si mesmo. (O principal e o recurso são a mesma conta de serviço).

  4. Para acessar outros recursos no projeto Google Cloud , conceda permissões extras para acessar esses recursos a essa conta de serviço. O papel Worker do Composer (composer.worker) fornece esse conjunto de permissões necessárias na maioria dos casos. Adicione permissões extras a essa conta de serviço somente quando for necessário para a operação dos DAGs.

Etapa 2. Configuração básica

Nesta etapa, você cria um ambiente do Cloud Composer com parâmetros padrão no local especificado.

Console

  1. No console do Google Cloud, acesse a página Criar ambiente.

    Acessar "Criar ambiente"

  2. No campo Nome, digite um nome para o ambiente.

    O nome precisa começar com uma letra minúscula seguida por até 62 letras minúsculas, números ou hifens. Ele não pode terminar com um hífen. O nome do ambiente é usado para criar subcomponentes para o ambiente. Você precisa fornecer um nome que também seja válido como um nome de bucket do Cloud Storage. Para ver uma lista de restrições, consulte Diretrizes de nomenclatura de bucket.

  3. Na lista suspensa Local, escolha um local para o ambiente.

    Um local é a região em que o ambiente está localizado.

  4. Na lista suspensa Versão da imagem, selecione uma imagem do Cloud Composer com a versão necessária do Airflow.

  5. Na lista suspensa Conta de serviço, selecione uma conta de serviço para seu ambiente.

    Se você ainda não tiver uma conta de serviço para seu ambiente, consulte Criar ou escolher a conta de serviço de um ambiente.

gcloud

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version IMAGE_VERSION \
    --service-account "SERVICE_ACCOUNT"

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente;

    O nome precisa começar com uma letra minúscula seguida por até 62 letras minúsculas, números ou hifens. Ele não pode terminar com um hífen. O nome do ambiente é usado para criar subcomponentes para o ambiente. Você precisa fornecer um nome que também seja válido como um nome de bucket do Cloud Storage. Para ver uma lista de restrições, consulte Diretrizes de nomenclatura de bucket.

  • LOCATION pela região do ambiente.

    Um local é a região em que o ambiente está localizado.

  • SERVICE_ACCOUNT pela conta de serviço do seu ambiente.

  • IMAGE_VERSION pelo nome de uma imagem do Cloud Composer.

Exemplo:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
"

API

Crie uma solicitação de API environments.create. Especifique a configuração no recurso Environment.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "softwareConfig": {
      "imageVersion": "IMAGE_VERSION"
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • PROJECT_ID pelo ID do projeto;

  • LOCATION pela região do ambiente.

    Um local é a região em que o ambiente está localizado.

  • ENVIRONMENT_NAME pelo nome do ambiente.

    O nome precisa começar com uma letra minúscula seguida por até 62 letras minúsculas, números ou hifens. Ele não pode terminar com um hífen. O nome do ambiente é usado para criar subcomponentes para o ambiente. Você precisa fornecer um nome que também seja válido como um nome de bucket do Cloud Storage. Para ver uma lista de restrições, consulte Diretrizes de nomenclatura de bucket.

  • IMAGE_VERSION pelo nome de uma imagem do Cloud Composer.

  • SERVICE_ACCOUNT pela conta de serviço do seu ambiente.

Exemplo:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "softwareConfig": {
      "imageVersion": "composer-2.11.1-airflow-2.10.2"
    },
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

Para criar um ambiente com parâmetros padrão como um local especificado, adicione o seguinte bloco de recursos à configuração do Terraform e execute terraform apply.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    software_config {
      image_version = "IMAGE_VERSION"
    }
    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente;

    O nome precisa começar com uma letra minúscula seguida por até 62 letras minúsculas, números ou hifens. Ele não pode terminar com um hífen. O nome do ambiente é usado para criar subcomponentes para o ambiente. Você precisa fornecer um nome que também seja válido como um nome de bucket do Cloud Storage. Para ver uma lista de restrições, consulte Diretrizes de nomenclatura de bucket.

  • LOCATION pela região do ambiente.

    Um local é a região em que o ambiente está localizado.

  • IMAGE_VERSION pelo nome de uma imagem do Cloud Composer.

  • SERVICE_ACCOUNT pela conta de serviço do seu ambiente.

Exemplo:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    software_config {
      image_version = "composer-2.11.1-airflow-2.10.2"
    }
    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

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

Quando você ativa a API Cloud Composer no projeto, a conta do Agente de serviço do Composer é criada no projeto. O Cloud Composer usa essa conta para realizar operações no seu projetoGoogle Cloud .

O papel Extensão do agente de serviço da API Cloud Composer v2 oferece permissões adicionais à conta do agente de serviço do Cloud Composer. Esse papel não é concedido automaticamente. É necessário conceder manualmente.

Console

Quando você cria um ambiente no projeto, se o agente de serviço do Cloud Composer não tiver as permissões necessárias na conta de serviço do ambiente, a seção Conceder permissões necessárias à conta de serviço do Cloud Composer vai aparecer.

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.

Confirme que você usa a conta de serviço pretendida para seu ambiente e clique em Conceder.

gcloud

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.

gcloud iam service-accounts add-iam-policy-binding \
    SERVICE_ACCOUNT \
    --member serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com \
    --role roles/composer.ServiceAgentV2Ext

Substitua:

  • SERVICE_ACCOUNT pela conta de serviço do seu ambiente.
  • PROJECT_NUMBER pelo número do projeto.

Exemplo:

gcloud iam service-accounts add-iam-policy-binding \
    example-account@example-project.iam.gserviceaccount.com \
    --member serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com \
    --role roles/composer.ServiceAgentV2Ext

API

Para conceder o papel, você precisa modificar a política de permissão atual usando o padrão de leitura-modificação-gravação:

  1. Leia a política de permissão atual para a conta de serviço do seu ambiente.
  2. Modifique-a para incluir o papel roles/composer.ServiceAgentV2Ext para o agente de serviço do Cloud Composer.
  3. Reescreva a política de permissão atual.

Para mais informações, consulte Como controlar o acesso de maneira programática.

{
  "role": "roles/composer.ServiceAgentV2Ext",
  "members": [
    "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
  ]
}

Substitua:

Exemplo:

{
  "role": "roles/composer.ServiceAgentV2Ext",
  "members": [
    "serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com"
  ]
}

Terraform

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ão da conta de serviço do ambiente, 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 = "SERVICE_ACCOUNT"
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com"
}

Substitua:

  • SERVICE_ACCOUNT pela conta de serviço do seu ambiente.
  • PROJECT_NUMBER pelo número do projeto.

Exemplo:

resource "google_service_account_iam_member" "custom_service_account" {
  provider = google-beta
  service_account_id = "example-account@example-project.iam.gserviceaccount.com"
  role = "roles/composer.ServiceAgentV2Ext"
  member = "serviceAccount:service-00000000000@cloudcomposer-accounts.iam.gserviceaccount.com"
}

Etapa 4. (Opcional) Configurar a escala do ambiente e os parâmetros de desempenho

Para especificar a configuração de escalonamento e desempenho do ambiente, selecione o tamanho do ambiente e a configuração de cargas de trabalho.

É possível mudar todos os parâmetros de desempenho e escala depois de criar um ambiente.

Os seguintes parâmetros controlam a escala e o desempenho:

  • Tamanho do ambiente. Controla os parâmetros de desempenho da infraestrutura gerenciada do Cloud Composer que inclui o banco de dados do Airflow. Selecione um tamanho maior de ambiente se você quiser executar um grande número de DAGs e tarefas com um desempenho de infraestrutura mais alto. Por exemplo, o tamanho de um ambiente maior aumenta a quantidade de entradas de registro de tarefas do Airflow que o ambiente pode processar com um atraso mínimo.

  • Configuração das cargas de trabalho. Controla a escala e o desempenho dos componentes do Airflow que são executados em um cluster do GKE do seu ambiente.

    • Programador do Airflow. Analisa arquivos de definição DAG, programa execuções de DAG com base no intervalo de programação e coloca em fila as tarefas a serem executadas pelos workers do Airflow.

      Seu ambiente pode executar mais de um programador do Airflow ao mesmo tempo. Use vários programadores para distribuir a carga entre várias instâncias do programador e tenha melhor desempenho e confiabilidade.

      Aumentar o número de programadores nem sempre melhora o desempenho do Airflow. Por exemplo, ter apenas um programador pode proporcionar um desempenho melhor do que com dois. Isso pode acontecer quando o programador extra não é utilizado e, portanto, consome recursos do seu ambiente sem contribuir com o desempenho geral. O desempenho real do programador depende do número de workers do Airflow, do número de DAGs e tarefas executados no ambiente e da configuração do Airflow e do ambiente.

      Recomendamos começar com dois programadores e depois monitorar o desempenho do ambiente. Se você alterar o número de programadores, será possível escalonar o ambiente novamente para o número original de programadores.

      Para mais informações sobre como configurar vários programadores, consulte a documentação do Airflow.

    • Airflow triggerer. Monitora de forma assíncrona todas as tarefas adiadas no seu ambiente. Se você tiver pelo menos uma instância de acionador no seu ambiente (ou pelo menos duas em ambientes altamente resilientes), poderá usar operadores adiáveis nos seus DAGs.

    • Servidor da Web do Airflow. Executa a interface da Web do Airflow em que você pode monitorar, gerenciar e visualizar os DAGs.

    • Workers do Airflow. Executar tarefas programadas pelos programadores do Airflow. Os números mínimo e máximo de workers no ambiente mudam dinamicamente dependendo do número de tarefas na fila.

Console

É possível selecionar uma predefinição para o ambiente. Quando você seleciona uma predefinição, os parâmetros de escala e desempenho dela são selecionados automaticamente. Você também tem a opção de selecionar uma predefinição personalizada e especificar todos os parâmetros de escala e desempenho para seu ambiente.

Para selecionar a configuração de escala e desempenho do ambiente, na página Criar ambiente:

  • Para usar valores predefinidos, na seção Recursos do ambiente, clique em Pequeno, Médio ou Grande.

  • Para especificar valores personalizados para os parâmetros de escala e desempenho, siga estas etapas:

    1. Na seção Recursos do ambiente, clique em Personalizado.

    2. Na seção Programador, defina o número de programadores que você quer usar e a alocação de recursos para CPU, memória e armazenamento.

    3. Na seção Acionador, use o campo Número de acionadores para inserir o número de acionadores no seu ambiente. É possível definir esse número como 0 se você não quiser usar operadores adiáveis nos DAGs.

      Se você definir pelo menos um acionador para o ambiente, use os campos CPU e Memória para configurar a alocação de recursos para os acionadores.

    4. Na seção Processador de DAG, especifique o número de processadores de DAG no ambiente e a quantidade de CPUs, memória e armazenamento para cada processador de DAG.

    5. Na seção Servidor da Web, especifique a quantidade de CPUs, memória e armazenamento para o servidor da Web.

    6. Na seção Worker, especifique:

      • O número mínimo e máximo de workers para limites de escalonamento automático no ambiente.
      • A alocação de CPU, memória e armazenamento para seus workers
    7. Na seção Infraestrutura principal, selecione o tamanho do ambiente na lista suspensa Tamanho do ambiente.

gcloud

Quando você cria um ambiente, os argumentos a seguir controlam os parâmetros de escala e desempenho do ambiente.

  • --environment-size especifica o tamanho do ambiente.
  • --scheduler-count especifica o número de programadores.
  • --scheduler-cpu especifica o número de CPUs para um programador do Airflow.
  • --scheduler-memory especifica a quantidade de memória para um programador do Airflow.
  • --scheduler-storage especifica a quantidade de espaço em disco para um programador do Airflow.

  • --triggerer-count especifica o número de acionadores do Airflow no seu ambiente. O valor padrão dessa flag é 0. Você precisa de acionadores se quiser usar operadores adiáveis nos seus DAGs.

    • Para ambientes de resiliência padrão, use um valor entre 0 e 10.
    • Para ambientes altamente resilientes, use 0 ou um valor entre 2 e 10.
  • --triggerer-cpu especifica o número de CPUs para um acionador do Airflow, em unidades de vCPU. Valores permitidos: 0.5, 0.75 e 1. O valor padrão é 0.5.

  • --triggerer-memory especifica a quantidade de memória para um gatilho do Airflow, em GB. O valor padrão é 0.5.

    A memória mínima necessária é igual ao número de CPUs alocadas para os acionadores. O valor máximo permitido é igual ao número de CPUs de gatilho multiplicado por 6,5.

    Por exemplo, se você definir a flag --triggerer-cpu como 1, o valor mínimo de --triggerer-memory será 1, e o valor máximo será 6.5.

  • --web-server-cpu especifica o número de CPUs para o servidor da Web do Airflow.

  • --web-server-memory especifica a quantidade de memória do servidor da Web do Airflow.

  • --web-server-storage especifica a quantidade de espaço em disco para o servidor da Web do Airflow.

  • --worker-cpu especifica o número de CPUs para um worker do Airflow.

  • --worker-memory especifica a quantidade de memória para um worker do Airflow.

  • --worker-storage especifica a quantidade de espaço em disco para um worker do Airflow.

  • --min-workers especifica o número mínimo de workers do Airflow. O cluster do ambiente é executado com pelo menos esse número de workers.

  • --max-workers especifica o número máximo de workers do Airflow. O cluster do ambiente é executado com no máximo esse número de workers.

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "SERVICE_ACCOUNT" \
    --environment-size ENVIRONMENT_SIZE \
    --scheduler-count SCHEDULER_COUNT \
    --scheduler-cpu SCHEDULER_CPU \
    --scheduler-memory SCHEDULER_MEMORY \
    --scheduler-storage SCHEDULER_STORAGE \
    --triggerer-count TRIGGERER_COUNT \
    --triggerer-cpu TRIGGERER_CPU \
    --triggerer-memory TRIGGERER_MEMORY \
    --web-server-cpu WEB_SERVER_CPU \
    --web-server-memory WEB_SERVER_MEMORY \
    --web-server-storage WEB_SERVER_STORAGE \
    --worker-cpu WORKER_CPU \
    --worker-memory WORKER_MEMORY \
    --worker-storage WORKER_STORAGE \
    --min-workers WORKERS_MIN \
    --max-workers WORKERS_MAX

Substitua:

  • ENVIRONMENT_SIZE por small, medium ou large.
  • SCHEDULER_COUNT pelo número de programadores.
  • SCHEDULER_CPU pelo número de CPUs de um programador, em unidades de vCPU.
  • SCHEDULER_MEMORY pela quantidade de memória de um programador.
  • SCHEDULER_STORAGE pelo tamanho do disco de um programador.
  • TRIGGERER_COUNT pelo número de acionadores.
  • TRIGGERER_CPU pelo número de CPUs de um acionador, em unidades de vCPU.
  • TRIGGERER_MEMORY pela quantidade de memória de um acionador, em GB.

  • WEB_SERVER_CPU pelo número de CPUs do servidor da Web, em unidades de vCPU.

  • WEB_SERVER_MEMORY pela quantidade de memória do servidor da Web.

  • WEB_SERVER_STORAGE pela quantidade de memória do servidor da Web.

  • WORKER_CPU pelo número de CPUs de um worker em unidades de vCPU.

  • WORKER_MEMORY pela quantidade de memória de um worker.

  • WORKER_STORAGE pelo tamanho do disco de um worker.

  • WORKERS_MIN pelo número mínimo de workers do Airflow que o ambiente pode executar. O número de workers no ambiente não ultrapassa esse número, mesmo que um número menor de workers possa processar a carga.

  • WORKERS_MAX pelo número máximo de workers do Airflow que o ambiente pode executar. O número de workers no ambiente não ultrapassa esse número, mesmo que seja necessário um número maior de workers para processar a carga.

Exemplo:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --environment-size small \
    --scheduler-count 1 \
    --scheduler-cpu 0.5 \
    --scheduler-memory 2.5GB \
    --scheduler-storage 2GB \
    --triggerer-count 1 \
    --triggerer-cpu 0.5 \
    --triggerer-memory 0.5GB \
    --web-server-cpu 1 \
    --web-server-memory 2.5GB \
    --web-server-storage 2GB \
    --worker-cpu 1 \
    --worker-memory 2GB \
    --worker-storage 2GB \
    --min-workers 2 \
    --max-workers 4

API

Ao criar um ambiente, no recurso Ambiente > EnvironmentConfig > WorkloadsConfig, especifique os parâmetros de escala e desempenho do ambiente.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "workloadsConfig": {
      "scheduler": {
        "cpu": SCHEDULER_CPU,
        "memoryGb": SCHEDULER_MEMORY,
        "storageGb": SCHEDULER_STORAGE,
        "count": SCHEDULER_COUNT
      },
      "triggerer": {
        "count": TRIGGERER_COUNT,
        "cpu": TRIGGERER_CPU,
        "memoryGb": TRIGGERER_MEMORY
      },
      "webServer": {
        "cpu": WEB_SERVER_CPU,
        "memoryGb": WEB_SERVER_MEMORY,
        "storageGb": WEB_SERVER_STORAGE
      },
      "worker": {
        "cpu": WORKER_CPU,
        "memoryGb": WORKER_MEMORY,
        "storageGb": WORKER_STORAGE,
        "minCount": WORKERS_MIN,
        "maxCount": WORKERS_MAX
      }
    },
    "environmentSize": "ENVIRONMENT_SIZE",
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • SCHEDULER_CPU pelo número de CPUs de um programador, em unidades de vCPU.
  • SCHEDULER_MEMORY pela quantidade de memória de um programador, em GB.
  • SCHEDULER_STORAGE pelo tamanho do disco de um programador, em GB.
  • SCHEDULER_COUNT pelo número de programadores.

  • TRIGGERER_COUNT pelo número de acionadores. O valor padrão é 0. Você precisa de acionadores se quiser usar operadores adiáveis nos seus DAGs.

    • Para ambientes de resiliência padrão, use um valor entre 0 e 10.
    • Para ambientes altamente resilientes, use 0 ou um valor entre 2 e 10.

    Se você usar pelo menos um acionador, também precisará especificar os parâmetros TRIGGERER_CPU e TRIGGERER_MEMORY:

  • TRIGGERER_CPU especifica o número de CPUs para um acionador, em unidades de vCPU. Valores permitidos: 0.5, 0.75 e 1.

  • TRIGGERER_MEMORY configura a quantidade de memória para um acionador. A memória mínima necessária é igual ao número de CPUs alocadas para os acionadores. O valor máximo permitido é igual ao número de CPUs de gatilho multiplicado por 6,5.

    Por exemplo, se você definir TRIGGERER_CPU como 1, o valor mínimo de TRIGGERER_MEMORY será 1, e o valor máximo será 6.5.

  • WEB_SERVER_CPU pelo número de CPUs do servidor da Web, em unidades de vCPU.

  • WEB_SERVER_MEMORY pela quantidade de memória do servidor da Web, em GB.

  • WEB_SERVER_STORAGE pelo tamanho do disco do servidor da Web, em GB.

  • WORKER_CPU pelo número de CPUs de um worker em unidades de vCPU.

  • WORKER_MEMORY pela quantidade de memória de um worker, em GB.

  • WORKER_STORAGE pelo tamanho do disco de um worker, em GB.

  • WORKERS_MIN pelo número mínimo de workers do Airflow que o ambiente pode executar. O número de workers no ambiente não ultrapassa esse número, mesmo que um número menor de workers possa processar a carga.

  • WORKERS_MAX pelo número máximo de workers do Airflow que o ambiente pode executar. O número de workers no ambiente não ultrapassa esse número, mesmo que seja necessário um número maior de workers para processar a carga.

  • ENVIRONMENT_SIZE pelo tamanho do ambiente, ENVIRONMENT_SIZE_SMALL, ENVIRONMENT_SIZE_MEDIUM ou ENVIRONMENT_SIZE_LARGE.

Exemplo:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "workloadsConfig": {
      "scheduler": {
        "cpu": 2.5,
        "memoryGb": 2.5,
        "storageGb": 2,
        "count": 1
      },
      "triggerer": {
        "cpu": 0.5,
        "memoryGb": 0.5,
        "count": 1
      },
      "webServer": {
        "cpu": 1,
        "memoryGb": 2.5,
        "storageGb": 2
      },
      "worker": {
        "cpu": 1,
        "memoryGb": 2,
        "storageGb": 2,
        "minCount": 2,
        "maxCount": 4
      }
    },
    "environmentSize": "ENVIRONMENT_SIZE_SMALL",
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

Quando você cria um ambiente, os argumentos a seguir controlam os parâmetros de escala e desempenho do seu ambiente.

  • No bloco config:

    • O campo environment_size controla o tamanho do ambiente.
  • No bloco workloads_config:

    • O campo scheduler.cpu especifica o número de CPUs para um programador do Airflow.
    • O campo scheduler.memory_gb especifica a quantidade de memória para um programador do Airflow.
    • O campo scheduler.storage_gb especifica a quantidade de espaço em disco para um programador.
    • O campo scheduler.count especifica o número de programadores no seu ambiente.
    • O campo triggerer.cpu especifica o número de CPUs para um acionador do Airflow.
    • O campo triggerer.memory_gb especifica a quantidade de memória para um acionador do Airflow.
    • O campo triggerer.count especifica o número de acionadores no seu ambiente.

    • O campo web_server.cpu especifica o número de CPUs para o servidor da Web do Airflow.

    • O campo web_server.memory_gb especifica a quantidade de memória do servidor da Web do Airflow.

    • O campo web_server.storage_gb especifica a quantidade de espaço em disco para o servidor da Web do Airflow.

    • O campo worker.cpu especifica o número de CPUs para um worker do Airflow.

    • O campo worker.memory_gb especifica a quantidade de memória para um worker do Airflow.

    • O campo worker.storage_gb especifica a quantidade de espaço em disco para um worker do Airflow.

    • O campo worker.min_count especifica o número mínimo de workers no ambiente.

    • O campo worker.max_count especifica o número máximo de workers no ambiente.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    workloads_config {

      scheduler {
        cpu = SCHEDULER_CPU
        memory_gb = SCHEDULER_MEMORY
        storage_gb = SCHEDULER_STORAGE
        count = SCHEDULER_COUNT
      }
      triggerer {
        count = TRIGGERER_COUNT
        cpu = TRIGGERER_CPU
        memory_gb = TRIGGERER_MEMORY
      }
      web_server {
        cpu = WEB_SERVER_CPU
        memory_gb = WEB_SERVER_MEMORY
        storage_gb = WEB_SERVER_STORAGE
      }
      worker {
        cpu = WORKER_CPU
        memory_gb = WORKER_MEMORY
        storage_gb = WORKER_STORAGE
        min_count = WORKERS_MIN
        max_count = WORKERS_MAX
      }
    }

    environment_size = "ENVIRONMENT_SIZE"

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • SERVICE_ACCOUNT pela conta de serviço do seu ambiente.
  • SCHEDULER_CPU pelo número de CPUs de um programador, em unidades de vCPU.
  • SCHEDULER_MEMORY pela quantidade de memória de um programador, em GB.
  • SCHEDULER_STORAGE pelo tamanho do disco de um programador, em GB.
  • SCHEDULER_COUNT pelo número de programadores.
  • TRIGGERER_COUNT pelo número de acionadores.
  • TRIGGERER_CPU pelo número de CPUs de um acionador, em unidades de vCPU.
  • TRIGGERER_MEMORY pela quantidade de memória de um acionador, em GB.
  • WEB_SERVER_CPU pelo número de CPUs do servidor da Web, em unidades de vCPU.
  • WEB_SERVER_MEMORY pela quantidade de memória do servidor da Web, em GB.
  • WEB_SERVER_STORAGE pelo tamanho do disco do servidor da Web, em GB.
  • WORKER_CPU pelo número de CPUs de um worker em unidades de vCPU.
  • WORKER_MEMORY pela quantidade de memória de um worker, em GB.
  • WORKER_STORAGE pelo tamanho do disco de um worker, em GB.
  • WORKERS_MIN pelo número mínimo de workers do Airflow que o ambiente pode executar. O número de workers no ambiente não ultrapassa esse número, mesmo que um número menor de workers possa processar a carga.
  • WORKERS_MAX pelo número máximo de workers do Airflow que o ambiente pode executar. O número de workers no ambiente não ultrapassa esse número, mesmo que seja necessário um número maior de workers para processar a carga.
  • ENVIRONMENT_SIZE pelo tamanho do ambiente, ENVIRONMENT_SIZE_SMALL, ENVIRONMENT_SIZE_MEDIUM ou ENVIRONMENT_SIZE_LARGE.

Exemplo:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    workloads_config {

      scheduler {
        cpu = 2.5
        memory_gb = 2.5
        storage_gb = 2
        count = 1
      }
      triggerer {
        count = 1
        cpu = 0.5
        memory_gb = 0.5
      }
      web_server {
        cpu = 1
        memory_gb = 2.5
        storage_gb = 2
      }
      worker {
        cpu = 1
        memory_gb = 2
        storage_gb = 2
        min_count = 2
        max_count = 4
      }
    }

    environment_size = "ENVIRONMENT_SIZE_SMALL"

    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }

  }
}

Etapa 5. (Opcional) Ativar o modo de alta resiliência

Os ambientes do Cloud Composer altamente resilientes usam mecanismos de failover e redundância integrados que reduzem a suscetibilidade do ambiente a falhas de zona e pontos únicos de falha.

Um ambiente altamente resiliente é executado em pelo menos duas zonas de uma região selecionada. Exatamente dois programadores do Airflow, dois servidores da Web e pelo menos dois acionadores (se o número de acionadores não estiver definido como 0) são executados em zonas separadas. O número mínimo de workers é definido como dois, e o cluster do ambiente distribui instâncias de workers entre as zonas. Em caso de interrupção temporária de zona, as instâncias de worker afetadas são reprogramadas em uma zona diferente. O banco de dados do Cloud SQL de um ambiente altamente resiliente é uma instância regional que tem uma instância principal e uma de reserva.

Console

Na página Criar ambiente:

  1. Na seção Modo de resiliência, selecione Alta resiliência.

  2. Na seção Recursos do ambiente, selecione parâmetros de escalonamento para um ambiente altamente resiliente. Ambientes altamente resilientes exigem exatamente dois programadores, zero ou entre dois e dez acionadores e pelo menos dois workers:

    1. Clique em Custom.

    2. Na lista suspensa Número de programadores, selecione 2.

    3. Na lista suspensa Número de acionadores, selecione 0 ou um valor entre 2 e 10. Configure a alocação de CPU e memória para os acionadores.

    4. Na lista suspensa Número mínimo de workers, selecione 2 ou mais, dependendo do número necessário de workers.

  3. Na seção Configuração de rede:

    1. Em Tipo de rede, selecione Ambiente de IP particular.

    2. Se necessário, especifique outros parâmetros de rede.

gcloud

Quando você cria um ambiente, o argumento --enable-high-resilience ativa o modo de alta resiliência.

Defina os seguintes argumentos:

  • --enable-high-resilience
  • --enable-private-environment e outros parâmetros de rede para um ambiente de IP particular, se necessário
  • --scheduler-count a 2
  • --triggerer-count a 0 ou um valor entre 2 e 10. Se você usar gatilhos, as flags --triggerer-cpu and--triggerer-memory também serão necessárias para a criação do ambiente.

    Para mais informações sobre as flags --triggerer-count, --triggerer-cpu e --triggerer-memory, consulte Configurar a escala do ambiente e os parâmetros de desempenho.

  • --min-workers a 2 ou mais

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "SERVICE_ACCOUNT" \
    --enable-high-resilience \
    --enable-private-environment \
    --scheduler-count 2 \
    --triggerer-count 2 \
    --triggerer-cpu 0.5 \
    --triggerer-memory 0.5 \
    --min-workers 2

API

Ao criar um ambiente, no recurso Ambiente > EnvironmentConfig, ative o modo de alta resiliência.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "resilience_mode": "HIGH_RESILIENCE",
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }

  }
}

Exemplo:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "resilience_mode": "HIGH_RESILIENCE",
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }

  }
}

Terraform

Ao criar um ambiente, o campo resilience_mode no bloco config ativa o modo de alta resiliência.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    resilience_mode = "HIGH_RESILIENCE"

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }

  }
}

Exemplo:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    resilience_mode = "HIGH_RESILIENCE"

    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Etapa 6. (Opcional) Especifique uma zona para o banco de dados do ambiente

É possível especificar uma zona preferencial do Cloud SQL ao criar um ambiente de resiliência padrão.

Console

Na página Criar ambiente:

  1. Na seção Configuração avançada, expanda o item Mostrar configuração avançada.

  2. Na lista Zona do banco de dados do Airflow, selecione uma zona do Cloud SQL.

gcloud

Quando você cria um ambiente, o argumento --cloud-sql-preferred-zone especifica uma zona preferencial do Cloud SQL.

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "SERVICE_ACCOUNT" \
    --cloud-sql-preferred-zone SQL_ZONE

Substitua:

  • SQL_ZONE: zona preferencial do Cloud SQL. Essa zona precisa estar localizada na região em que o ambiente está localizado.

Exemplo:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --cloud-sql-preferred-zone us-central1-a

API

Ao criar um ambiente, no recurso Ambiente > DatabaseConfig, especifique a zona preferencial do Cloud SQL.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "databaseConfig": {
      "zone": "SQL_ZONE"
    },
      "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • SQL_ZONE: zona preferencial do Cloud SQL. Essa zona precisa estar localizada na região em que o ambiente está localizado.

Exemplo:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "databaseConfig": {
      "zone": "us-central1-a"
    },
    "nodeConfig": {
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

Ao criar um ambiente, o campo zone no bloco database_config especifica a zona preferencial do Cloud SQL.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    database_config {
      zone = "SQL_ZONE"
    }

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • SQL_ZONE: zona preferencial do Cloud SQL. Essa zona precisa estar localizada na região em que o ambiente está localizado.

Etapa 7. (Opcional) Configurar a rede do ambiente

Os parâmetros de rede dependem do tipo de ambiente que você quer criar:

  • Ambiente de IP público. Use os parâmetros de rede padrão.

  • Ambiente de IP particular (com PSC). Nessa configuração, o ambiente usa o Private Service Connect para conectividade.

    Configure seu ambiente de IP particular:

    1. Configure a rede do projeto para ambientes de IP particular.
    2. Configure o Private Service Connect ao criar seu ambiente.
    3. Especifique outros parâmetros para seu ambiente de IP particular, conforme descrito mais detalhadamente nesta seção.

    Para um ambiente de IP particular com PSC, você precisa saber:

    • O ID da rede VPC
    • O ID da sub-rede VPC
    • Dois intervalos de IP secundários na sub-rede VPC:

      • Intervalo de IP secundário para pods
      • Intervalo de IP secundário para serviços
    • Intervalos de IP para os componentes do ambiente:

      • Intervalo de IP do plano de controle do GKE. Intervalo de IP para o plano de controle do GKE.
      • Sub-rede de conexão do Cloud Composer. Intervalo de IP para a sub-rede de conexão do Cloud Composer.
  • Ambiente de IP privado (peerings da VPC). Nessa configuração, o ambiente usa peerings de VPC para conectividade.

    Configure seu ambiente de IP particular:

    1. Configure a rede do projeto para ambientes de IP particular.
    2. Especifique outros parâmetros para o ambiente de IP particular, conforme descrito mais adiante nesta seção.

    Para um ambiente de IP particular com peerings de VPC, você precisa saber:

    • O ID da rede VPC
    • O ID da sub-rede VPC
    • Dois intervalos de IP secundários na sub-rede VPC:

      • Intervalo de IP secundário para pods
      • Intervalo de IP secundário para serviços
    • Intervalos de IP para os componentes do ambiente:

      • Intervalo de IP para o plano de controle do GKE.

      • Intervalo de IP do peering de VPC para exportar da rede interna do Cloud Composer para a rede selecionada. Os componentes da infraestrutura do Cloud Composer usam endereços IP desse intervalo.

      • Intervalo de IP para a instância do Cloud SQL.

  • Para um ambiente de VPC compartilhada, é preciso fazer mais configurações de rede para o projeto host e, em seguida, criar um ambiente de IP público ou particular em um projeto de serviço. Siga as instruções na página Como configurar a VPC compartilhada.

    Para um ambiente de VPC compartilhada, você precisa saber:

    • O ID da rede VPC do projeto host
    • O ID da sub-rede VPC do projeto host

    • Dois intervalos de IP secundários na sub-rede VPC do projeto host:

      • Intervalo de IP secundário para pods
      • Intervalo de IP secundário para serviços

    Ao criar um ambiente de VPC compartilhada de IP público, ainda é preciso especificar a rede VPC do projeto host, a sub-rede e os intervalos de IP secundários para pods e serviços.

  • Para criar um ambiente VPC SC, crie um perímetro de serviço e, em seguida, crie ambientes de IP particular nesse perímetro. Siga as instruções descritas em Como configurar o VPC Service Controls.

Outras opções de rede para ambientes são:

  • Endereços IP públicos de uso particular. Se você quiser usar mais endereços IP, seu ambiente poderá usar de maneira particular determinados intervalos de endereços IP públicos como intervalos de endereços IP de sub-rede internos para pods e serviços.
  • Redes autorizadas. Se você quiser acessar o plano de controle do seu ambiente de IP particular usando HTTPS, use redes autorizadas para especificar intervalos CIDR que podem fazer isso.
  • Agente de mascaramento de IP. Ao usar ambientes com o agente de mascaramento de IP, é possível usar conversões de endereço IP de muitos para um nas configurações de rede do ambiente. Para mais informações sobre a criação de ambientes com o agente de mascaramento de IP, consulte Ativar o agente de mascaramento de IP.

Console

Para criar um ambiente de IP particular:

  1. Verifique se a rede está configurada para o tipo de ambiente que você quer criar.

  2. Na seção Configuração de rede, expanda o item Mostrar configuração de rede.

  3. Na lista suspensa Rede, selecione o ID da rede VPC.

  4. Na lista suspensa Sub-rede, selecione o ID da sub-rede VPC.

  5. Na seção Intervalo de IP secundário para pods, selecione ou especifique o intervalo de IP secundário para os pods. É possível usar um intervalo secundário atual na sua rede VPC ou optar por usar um intervalo criado automaticamente.

  6. Na seção Intervalo de IP secundário para serviços, selecione ou especifique o intervalo de IP secundário para serviços. É possível usar um intervalo secundário atual na sua rede VPC ou optar por usar um intervalo criado automaticamente.

  7. Na seção Tipo de rede, selecione a opção Ambiente de IP particular para criar um ambiente de IP particular.

  8. Na seção Conectividade do Composer, selecione o tipo de rede para seu ambiente e especifique os intervalos de IP para os componentes do ambiente:

    Para um ambiente que usa o Private Service Connect:

    1. Selecione Private Service Connect para um ambiente que usa o Private Service Connect.

    2. Na seção Sub-rede de conexão do Composer, especifique um intervalo de IP para a sub-rede de conexão do Cloud Composer. O endereço do endpoint do PSC é selecionado nesse intervalo. Você pode especificar um intervalo personalizado ou optar por usar o padrão.

    Para um ambiente que usa peerings de VPC:

    1. Selecione Peerings de VPC para um ambiente que usa peerings de VPC.

    2. Na seção Intervalo de IP da rede de locatário do Composer, especifique um intervalo de IP para a rede de locatário do Cloud Composer. Essa rede hospeda o componente de proxy SQL do ambiente. Você pode especificar um intervalo personalizado ou optar por usar o padrão.

    3. Na seção Intervalo de IP para a rede do Cloud SQL, especifique um intervalo de IP para a instância do Cloud SQL. Você pode especificar um intervalo personalizado ou optar por usar o padrão.

  9. Na seção Intervalo de IP da rede do plano de controle do GKE, especifique um intervalo de IP para o plano de controle do GKE:

    • Para usar o intervalo de IP padrão na região em que o ambiente está localizado, selecione Intervalo de IP padrão.

    • Para especificar um intervalo de IP personalizado, selecione Intervalo de IP personalizado e digite um intervalo na notação CIDR no campo IP particular do mestre do cluster do GKE.

  10. Selecione o acesso de nível para o plano de controle do GKE. O plano de controle tem dois endpoints. Um endpoint é particular, para uso por nós de cluster e VMs. Outro endpoint é público. É possível especificar o nível de acesso ao endpoint público:

    • Para ativar o acesso ao endpoint público de redes autorizadas, marque a caixa de seleção Acessar o endpoint do plano de controle do cluster usando o endereço IP externo.

      Com essa opção, o nível de acesso do plano de controle é definido como "Acesso ao endpoint público ativado, redes autorizadas ativadas". Isso fornece acesso restrito ao plano de controle a partir de redes autorizadas. Por padrão, nenhum endereço IP de origem é especificado. É possível adicionar redes autorizadas ao cluster.

    • Para desativar o acesso ao endpoint público de redes autorizadas, desmarque a caixa de seleção Acessar o endpoint do plano de controle do cluster usando o endereço IP externo.

      Com essa opção, o nível de acesso do plano de controle é definido como "Acesso ao endpoint público desativado". Isso impede todo o acesso à Internet ao plano de controle.

gcloud

Verifique se a rede está configurada para o tipo de ambiente que você quer criar.

Quando você cria um ambiente, os argumentos a seguir controlam os parâmetros de rede. Se você omitir um parâmetro, o valor padrão será usado.

  • --enable-private-environment ativa um ambiente de IP particular.

  • --network especifica o ID da rede VPC.

  • --subnetwork especifica o ID da sub-rede VPC.

  • --cluster-secondary-range-name ou --cluster-ipv4-cidr configura o intervalo secundário para pods.

  • --services-secondary-range-name ou --services-ipv4-cidr para configurar o intervalo secundário para serviços.

  • --master-ipv4-cidr especifica um intervalo para o plano de controle do GKE.

  • (Ambientes com PSC) --connection-subnetwork especifica um intervalo para a sub-rede de conexão do Cloud Composer, que hospeda o endpoint do PSC.

  • (Ambientes com peerings de VPC) --composer-network-ipv4-cidr especifica um intervalo para a rede de locatário do Cloud Composer. Essa rede hospeda o componente de proxy SQL do ambiente.

  • (Ambientes com peerings de VPC) --cloud-sql-ipv4-cidr especifica um intervalo para a instância do Cloud SQL.

  • --enable-private-endpoint controla o acesso de nível do plano de controle do GKE. O plano de controle tem dois endpoints. Um endpoint é particular, para uso por nós de cluster e VMs. Outro endpoint é público. É possível especificar o nível de acesso ao endpoint público:

    • Para ativar o acesso ao endpoint público de redes autorizadas, omita o argumento --enable-private-endpoint.

      Com essa opção, o nível de acesso do plano de controle é definido como "Acesso ao endpoint público ativado, redes autorizadas ativadas". Isso fornece acesso restrito ao plano de controle a partir de redes autorizadas. Por padrão, nenhum endereço IP de origem é especificado. É possível adicionar redes autorizadas ao cluster.

    • Para desativar o acesso ao endpoint público de redes autorizadas, especifique o argumento --enable-private-endpoint.

      Com essa opção, o nível de acesso do plano de controle é definido como "Acesso ao endpoint público desativado". Isso impede todo o acesso à Internet ao plano de controle.

  • Os argumentos --enable-master-authorized-networks e --master-authorized-networks configuram redes autorizadas para seu ambiente.

  • --enable-privately-used-public-ips configura endereços IP públicos de uso particular para seu ambiente.

  • --enable-ip-masq-agent ativa o agente de mascaramento de IP.

Exemplo (ambiente de IP particular)

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "SERVICE_ACCOUNT" \
    --enable-private-environment \
    --network NETWORK_ID \
    --subnetwork SUBNETWORK_ID \
    --cluster-ipv4-cidr PODS_RANGE \
    --services-ipv4-cidr SERVICES_RANGE \
    --master-ipv4-cidr CONTROL_PLANE_RANGE \
    --connection-subnetwork COMPOSER_PSC_RANGE \

Substitua:

  • NETWORK_ID pelo ID de rede VPC.
  • SUBNETWORK_ID pelo ID de sub-rede VPC.

  • PODS_RANGE pelo intervalo secundário de pods.

  • SERVICES_RANGE pelo intervalo secundário de serviços.

  • CONTROL_PLANE_RANGE pelo intervalo secundário do plano de controle do GKE.

  • COMPOSER_PSC_RANGE pelo intervalo da sub-rede de conexão do Cloud Composer.

Etapa 8. (Opcional) Adicionar tags de rede

As tags de rede são aplicadas a todas as VMs de nó no cluster do seu ambiente. As tags são usadas para identificar origens ou destinos válidos em firewalls de rede. Cada tag na lista precisa estar em conformidade com o RFC 1035.

Por exemplo, você pode adicionar tags de rede se planeja restringir o tráfego de um ambiente de IP privado com regras de firewall.

Console

Na página Criar ambiente:

  1. Localize a seção Configuração de rede.
  2. No campo Tags de rede, insira as tags de rede do seu ambiente.

gcloud

Ao criar um ambiente, os seguintes argumentos controlam as tags de rede:

  • --tags especifica uma lista separada por vírgulas de tags de rede aplicadas a todas as VMs de nó.
gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "SERVICE_ACCOUNT" \
    --tags TAGS

Substitua:

  • TAGS com uma lista separada por vírgulas de tags de rede.

Exemplo:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --tags group1,production

API

Ao criar um ambiente, no recurso Ambiente > EnvironmentConfig, especifique tags de rede para seu ambiente.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "nodeConfig": {
      "tags": [
        "TAG"
      ],
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • TAG com uma tag de rede.

Exemplo:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "nodeConfig": {
      "tags": [
        "group1",
        "production"
      ],
      "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

Ao criar um ambiente, os campos a seguir definem tags de rede para ele:

  • O campo tags no bloco node_config especifica uma lista separada por vírgulas de tags de rede aplicadas a todas as VMs de nó.
resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    node_config {
      tags = ["TAGS"]
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • TAGS com uma lista separada por vírgulas de tags de rede.

Exemplo:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    node_config {
      tags = ["group1","production"]
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Etapa 9: (Opcional) Configurar o acesso à rede do servidor da Web

Os parâmetros de acesso do servidor da Web do Airflow não dependem do tipo de ambiente. Em vez disso, você pode configurar o acesso ao servidor da Web separadamente. Por exemplo, um ambiente de IP privado ainda pode ter a IU do Airflow acessível pela Internet.

Não é possível configurar os intervalos de IP permitidos usando endereços IP particulares.

Console

Na página Criar ambiente:

  1. Na seção Configuração de rede, expanda o item Mostrar configuração de rede.

  2. Na seção Controle de acesso à rede do servidor da Web:

    • Para conceder acesso ao servidor da Web do Airflow de todos os endereços IP, selecione Permitir acesso de todos os endereços IP.

    • Para restringir o acesso somente a intervalos de IP específicos, selecione Permitir acesso apenas de endereços IP específicos . No campo Intervalo de IP, especifique um intervalo de IP na notação CIDR. No campo Descrição, especifique uma descrição opcional para este intervalo. Se você quiser especificar mais de um intervalo, clique em Adicionar intervalo de IP.

    • Para proibir o acesso de todos os endereços IP, selecione Permitir acesso somente de endereços IP específicos e clique em Excluir item ao lado da entrada de intervalo vazia.

gcloud

Quando você cria um ambiente, os seguintes argumentos controlam o nível de acesso do servidor da Web:

  • --web-server-allow-all fornece acesso ao Airflow a partir de todos os endereços IP. Essa é a opção padrão.

  • --web-server-allow-ip restringe o acesso apenas a intervalos de IP de origem específicos. Para especificar vários intervalos de IP, use esse argumento várias vezes.

  • --web-server-deny-all proíbe o acesso a todos os endereços IP.

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION

Substitua:

  • WS_IP_RANGE pelo intervalo de IP, na notação CIDR, que pode acessar a IU do Airflow.
  • WS_RANGE_DESCRIPTION pela descrição do intervalo de IP;

Exemplo:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --web-server-allow-ip ip_range=192.0.2.0/24,description="office net 1" \
    --web-server-allow-ip ip_range=192.0.4.0/24,description="office net 3"

API

Ao criar um ambiente, no recurso Ambiente > EnvironmentConfig, especifique os parâmetros de acesso ao servidor da Web.

  • Para fornecer acesso ao servidor da Web do Airflow a partir de todos os endereços IP, omita webServerNetworkAccessControl.

  • Para restringir o acesso apenas a intervalos de IP específicos, especifique um ou mais intervalos em allowedIpRanges.

  • Para proibir o acesso de todos os endereços IP, adicione allowedIpRanges e transforme-o em uma lista vazia. Não especifique intervalos de IP nele.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "WS_IP_RANGE",
          "description": "WS_RANGE_DESCRIPTION"
        }
      ]
    },
      "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • WS_IP_RANGE pelo intervalo de IP, na notação CIDR, que pode acessar a IU do Airflow.
  • WS_RANGE_DESCRIPTION pela descrição do intervalo de IP;

Exemplo:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "192.0.2.0/24",
          "description": "office net 1"
        },
        {
          "value": "192.0.4.0/24",
          "description": "office net 3"
        }
      ]
    },
      "nodeConfig": {
        "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

Quando você cria um ambiente, o bloco allowed_ip_range no bloco web_server_network_access_control contém intervalos de IP que podem acessar o servidor da Web.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    web_server_network_access_control {

      allowed_ip_range {
        value = "WS_IP_RANGE"
        description = "WS_RANGE_DESCRIPTION"
      }
    }

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • WS_IP_RANGE pelo intervalo de IP, na notação CIDR, que pode acessar a IU do Airflow.
  • WS_RANGE_DESCRIPTION pela descrição do intervalo de IP;

Exemplo:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    web_server_network_access_control {
      allowed_ip_range {
        value = "192.0.2.0/24"
        description = "office net 1"
      },
      allowed_ip_range {
        value = "192.0.4.0/24"
        description = "office net 3"
      }
    }

    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }

}

Etapa 10: (Opcional) Especificar substituições de configuração e variáveis de ambiente do Airflow

É possível configurar substituições de configuração do Airflow e variáveis de ambiente ao criar um ambiente. Como alternativa, faça isso mais tarde, depois que seu ambiente for criado.

Algumas opções de configuração do Airflow são bloqueadas e não é possível substituí-las.

Para conferir a lista de opções de configuração do Airflow disponíveis, consulte a Referência de configuração do Airflow 2 e o Airflow 1.10.*.

Para especificar substituições de configuração e variáveis de ambiente do Airflow:

Console

Na página Criar ambiente:

  1. Na seção Variáveis de ambiente, clique em Adicionar variável de ambiente.

  2. Digite o Nome e o Valor da variável de ambiente.

  3. Na seção Substituições de configuração do Airflow, clique em Adicionar substituição da configuração do Airflow.

  4. Insira a Seção, a Chave e o Valor para substituir a opção de configuração.

    Exemplo:

    Seção Chave Valor
    webserver dag_orientation TB

gcloud

Quando você cria um ambiente, os argumentos a seguir controlam as variáveis de ambiente e as substituições de configuração do Airflow:

  • --env-variables especifica uma lista separada por vírgulas de variáveis de ambiente.

    Os nomes das variáveis podem conter letras maiúsculas e minúsculas, dígitos e sublinhados, mas não podem começar com um dígito.

  • --airflow-configs especifica uma lista de chaves e valores separada por vírgula para substituições de configuração do Airflow.

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "SERVICE_ACCOUNT" \
    --env-variables ENV_VARS \
    --airflow-configs CONFIG_OVERRIDES

Substitua:

  • ENV_VARS por uma lista de pares NAME=VALUE separados por vírgulas para variáveis de ambiente.
  • CONFIG_OVERRIDES por uma lista de pares SECTION-KEY=VALUE separados por vírgulas para substituições de configuração. Separe o nome da seção de configuração com um símbolo -, seguido pelo nome da chave. Por exemplo, core-dags_are_paused_at_creation.

Exemplo:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --env-variables SENDGRID_MAIL_FROM=user@example.com,SENDGRID_API_KEY=example-key \
    --airflow-configs core-dags_are_paused_at_creation=True,webserver-dag_orientation=TB

API

Ao criar um ambiente, no recurso Ambiente > EnvironmentConfig, especifique variáveis de ambiente e substituições de configuração do Airflow.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "softwareConfig": {
      "airflowConfigOverrides": {
        "SECTION-KEY": "OVERRIDE_VALUE"
      },
      "envVariables": {
        "VAR_NAME": "VAR_VALUE",
      }
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • SECTION pela seção no arquivo de configuração em que a opção de configuração do Airflow está localizada;
  • KEY pelo nome da opção de configuração do Airflow;
  • OVERRIDE_VALUE por um valor da opção de configuração do Airflow;
  • VAR_NAME pelo nome da variável de ambiente;
  • VAR_VALUE pelo valor da variável de ambiente.

Exemplo:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "softwareConfig": {
      "airflowConfigOverrides": {
        "core-dags_are_paused_at_creation": "True",
        "webserver-dag_orientation": "TB"
      },
      "envVariables": {
        "SENDGRID_MAIL_FROM": "user@example.com",
        "SENDGRID_API_KEY": "example-key"
      }
    },
    "nodeConfig": {
        "serviceAccount": "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Terraform

Quando você cria um ambiente, os seguintes blocos controlam as variáveis de ambiente e as substituições de configuração do Airflow:

  • O bloco env_variables no bloco software_config especifica as variáveis de ambiente.

    Os nomes das variáveis podem conter letras maiúsculas e minúsculas, dígitos e sublinhados, mas não podem começar com um dígito.

  • O bloco airflow_config_overrides no bloco software_config especifica substituições de configuração do Airflow.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    software_config {

      airflow_config_overrides = {
        SECTION-KEY = "OVERRIDE_VALUE"
      }

      env_variables = {
        VAR_NAME = "VAR_VALUE"
      }
    }

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }

  }
}

Substitua:

  • SECTION pela seção no arquivo de configuração em que a opção de configuração do Airflow está localizada;
  • KEY pelo nome da opção de configuração do Airflow;
  • OVERRIDE_VALUE por um valor da opção de configuração do Airflow;
  • VAR_NAME pelo nome da variável de ambiente;
  • VAR_VALUE pelo valor da variável de ambiente.

Exemplo:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    software_config {

      airflow_config_overrides = {
        core-dags_are_paused_at_creation = "True"
        webserver-dag_orientation = "TB"
      }

      env_variables = {
        SENDGRID_MAIL_FROM = "user@example.com"
        SENDGRID_API_KEY = "example-key"
      }
    }

    node_config {
      service_account = "
example-account@example-project.iam.gserviceaccount.com
"
    }
  }
}

Etapa 11: (Opcional) Especificar janelas de manutenção

As janelas de manutenção padrão no Cloud Composer 2 vão de 00:00:00 a 04:00:00 (GMT) nas sextas-feiras, sábados e domingos de todas as semanas.

Para especificar janelas de manutenção personalizadas para seu ambiente:

Console

Na página Criar ambiente

  1. Localize a seção Janelas de manutenção.

  2. Na lista suspensa Fuso horário, escolha um fuso horário para janelas de manutenção.

  3. Defina Horário de início, Dias e Duração para que o horário combinado da programação especificada seja de pelo menos 12 horas em uma janela de 7 dias. Por exemplo, um período de quatro horas toda segunda, quarta e sexta-feira fornece o tempo necessário.

gcloud

Os argumentos a seguir definem os parâmetros das janelas de manutenção:

  • --maintenance-window-start define o horário de início de uma janela de manutenção.
  • --maintenance-window-end define o horário de término de uma janela de manutenção.
  • --maintenance-window-recurrence define a recorrência da janela de manutenção.
gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "SERVICE_ACCOUNT" \
    --maintenance-window-start 'DATETIME_START' \
    --maintenance-window-end 'DATETIME_END' \
    --maintenance-window-recurrence 'MAINTENANCE_RECURRENCE'

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente;
  • DATETIME_START pela data e hora de início no formato de entrada de data/hora. Somente a hora especificada do dia é usada, a data especificada é ignorada.
  • DATETIME_END pela data e hora de término no formato de entrada de data/hora. Somente a hora especificada do dia é usada, a data especificada é ignorada. A data e hora especificadas precisam ser posteriores à data de início.
  • MAINTENANCE_RECURRENCE por um RFC 5545 RRULE para recorrência de janelas de manutenção. O Cloud Composer é compatível com dois formatos:

  • O formato FREQ=DAILY especifica uma recorrência diária.

  • O formato FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA especifica uma recorrência nos dias da semana selecionados.

O exemplo a seguir especifica uma janela de manutenção de seis horas entre 01:00 e 07:00 (UTC) às quartas-feiras, sábados e domingos. A data de 1º de janeiro de 2023 é ignorada.

gcloud composer environments create example-environment \
  --location us-central1 \
  --image-version composer-2.11.1-airflow-2.10.2 \
  --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
  --maintenance-window-start '2023-01-01T01:00:00Z' \
  --maintenance-window-end '2023-01-01T07:00:00Z' \
  --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=SU,WE,SA'

API

Ao criar um ambiente, no recurso Ambiente > EnvironmentConfig, especifique os parâmetros das janelas de manutenção:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "config": {
    "maintenanceWindow": {
        "startTime": "DATETIME_START",
        "endTime": "DATETIME_END",
        "recurrence": "MAINTENANCE_RECURRENCE"
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • DATETIME_START pela data e hora de início no formato de entrada de data/hora. Somente a hora especificada do dia é usada, a data especificada é ignorada.
  • DATETIME_END pela data e hora de término no formato de entrada de data/hora. Somente a hora especificada do dia é usada, a data especificada é ignorada. A data e a hora especificadas precisam ser posteriores à data de início.
  • MAINTENANCE_RECURRENCE por um RFC 5545 RRULE para a recorrência de janelas de manutenção. O Cloud Composer é compatível com dois formatos:

  • O formato FREQ=DAILY especifica uma recorrência diária.

  • O formato FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA especifica uma recorrência nos dias da semana selecionados.

O exemplo a seguir especifica uma janela de manutenção de seis horas entre 01:00 e 07:00 (UTC) às quartas-feiras, sábados e domingos. A data de 1º de janeiro de 2023 é ignorada.

Exemplo:

// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "config": {
    "maintenanceWindow": {
        "startTime": "2023-01-01T01:00:00Z",
        "endTime": "2023-01-01T07:00:00Z",
        "recurrence": "FREQ=WEEKLY;BYDAY=SU,WE,SA"
    },
    "nodeConfig": {
      "serviceAccount": "SERVICE_ACCOUNT"
    }
  }
}

Terraform

O bloco maintenance_window especifica as janelas de manutenção para seu ambiente:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    maintenance_window {
      start_time = "DATETIME_START"
      end_time = "DATETIME_END"
      recurrence = "MAINTENANCE_RECURRENCE"
    }

    node_config {
      service_account = "SERVICE_ACCOUNT"
    }
  }
}

Substitua:

  • DATETIME_START pela data e hora de início no formato de entrada de data/hora. Somente a hora especificada do dia é usada, a data especificada é ignorada.
  • DATETIME_END pela data e hora de término no formato de entrada de data/hora. Somente a hora especificada do dia é usada, a data especificada é ignorada. A data e a hora especificadas precisam ser posteriores à data de início.
  • MAINTENANCE_RECURRENCE por um RFC 5545 RRULE para a recorrência de janelas de manutenção. O Cloud Composer é compatível com dois formatos:

    • O formato FREQ=DAILY especifica uma recorrência diária.
    • O formato FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA especifica uma recorrência nos dias da semana selecionados.

O exemplo a seguir especifica uma janela de manutenção de seis horas entre 01:00 e 07:00 (UTC) às quartas-feiras, sábados e domingos. A data de 1º de janeiro de 2023 é ignorada.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    maintenance_window {
      start_time = "2023-01-01T01:00:00Z"
      end_time = "2023-01-01T07:00:00Z"
      recurrence = "FREQ=WEEKLY;BYDAY=SU,WE,SA"
    }
  }
}

Etapa 12: (Opcional) Integração da linhagem de dados

A linhagem de dados é um recurso do Dataplex que permite acompanhar o movimento dos dados.

A integração da linhagem de dados está disponível nas versões 2.1.2 e mais recentes do Cloud Composer 2 com as versões 2.2.5 e mais recentes do Airflow.

A integração da linhagem de dados é ativada automaticamente em um novo ambiente do Cloud Composer se as seguintes condições forem atendidas:

  • a API Data Lineage esteja ativada no projeto; Para mais informações, consulte Como ativar a API Data Lineage na documentação do Dataplex.

  • Um back-end de linhagem personalizado não é configurado no Airflow.

É possível desativar a integração de linhagem de dados ao criar um ambiente. Por exemplo, se você quiser substituir o comportamento automático ou escolher ativar a linhagem de dados mais tarde, depois que o ambiente for criado.

Console

Para desativar a integração de linhagem de dados, na página Criar ambiente:

  1. Na seção Configuração avançada, expanda o item Mostrar configuração avançada.

  2. Na seção Integração da linhagem de dados do Dataplex, selecione Desativar a integração com a linhagem de dados do Dataplex.

gcloud

Quando você cria um ambiente, o argumento --disable-cloud-data-lineage-integration desativa a integração de linhagem de dados.

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "SERVICE_ACCOUNT" \
    --disable-cloud-data-lineage-integration

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;

Exemplo:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --disable-cloud-data-lineage-integration

Etapa 13. (Opcional) Configurar criptografia de dados (CMEK)

Por padrão, os dados do seu ambiente são criptografados com uma chave fornecida pelo Google.

Para usar chaves de criptografia gerenciadas pelo cliente (CMEK) para criptografar dados no ambiente, siga as instruções descritas em Como usar chaves de criptografia gerenciadas pelo cliente.

Etapa 14. (Opcional) Usar um bucket de ambiente personalizado

Quando você cria um ambiente, o Cloud Composer cria um bucket para ele automaticamente.

Como alternativa, é possível especificar um bucket personalizado do Cloud Storage no seu projeto. Seu ambiente usa esse bucket da mesma forma que o bucket criado automaticamente.

Para usar um bucket de ambiente personalizado, siga as instruções descritas em Usar um bucket de ambiente personalizado.

Etapa 15. (Opcional) Especificar identificadores de ambiente

É possível atribuir identificadores aos ambientes para dividir os custos de faturamento com base nesses identificadores.

Console

Na página Criar ambiente, na seção Identificadores:

  1. Clique em Adicionar rótulo.

  2. Nos campos Chave e Valor, especifique os pares de chave e valor para os identificadores de ambiente.

gcloud

Quando você cria um ambiente, o argumento --labels especifica uma lista de chaves e valores separada por vírgulas com identificadores de ambiente.

gcloud composer environments create ENVIRONMENT_NAME \
    --location LOCATION \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "SERVICE_ACCOUNT" \
    --labels LABELS

Substitua:

  • LABELS por uma lista de pares KEY=VALUE separados por vírgulas para identificadores de ambiente.

Exemplo:

gcloud composer environments create example-environment \
    --location us-central1 \
    --image-version composer-2.11.1-airflow-2.10.2 \
    --service-account "
example-account@example-project.iam.gserviceaccount.com
" \
    --labels owner=engineering-team,env=production

API

Ao criar um ambiente, no recurso Ambiente, especifique identificadores para o ambiente.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/environments/ENVIRONMENT_NAME",
  "labels": {
    "LABEL_KEY": "LABEL_VALUE"
  }
}

Substitua:

  • LABEL_KEY por uma chave do identificador do ambiente.
  • LABEL_VALUE por um valor do identificador de ambiente.

Exemplo:


// POST https://composer.googleapis.com/v1/{parent=projects/*/locations/*}/environments

{
  "name": "projects/example-project/locations/us-central1/environments/example-environment",
  "labels": {
    "owner": "engineering-team",
    "env": "production"
  }
}

Terraform

Ao criar um ambiente, especifique identificadores no bloco labels (fora do bloco config).

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  labels = {
    LABEL_KEY = "LABEL_VALUE"
  }

}

Substitua:

  • LABEL_KEY por uma chave do identificador do ambiente.
  • LABEL_VALUE por um valor do identificador de ambiente.

Exemplo:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  labels = {
    owner = "engineering-team"
    env = "production"
  }

}

A seguir