Executar um ambiente local do Airflow com a ferramenta de CLI de desenvolvimento local do Composer

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Nesta seção, descrevemos como criar, configurar e executar um ambiente local do Airflow usando a ferramenta CLI de desenvolvimento local do Composer.

Sobre a ferramenta CLI de desenvolvimento local do Composer

A ferramenta de CLI de desenvolvimento local do Composer simplifica o desenvolvimento de DAGs no Apache Airflow para o Cloud Composer executando um ambiente do Airflow localmente. Isso O ambiente local do Airflow usa uma imagem de um determinado Cloud Composer para a versão anterior.

É possível criar um ambiente local do Airflow com base em um ambiente do Cloud Composer. Nesse caso, o fluxo de trabalho local ambiente pega a lista de pacotes PyPI instalados e a variável de ambiente do ambiente do Cloud Composer.

Use esse ambiente local do Airflow para testes e desenvolvimento fins, como testar novos códigos DAG, pacotes PyPI ou configurações do Airflow .

Antes de começar

  • A ferramenta de CLI de desenvolvimento local do Composer cria ambientes locais do Airflow em uma em que você executa o comando composer-dev create. Para acessar sua ambiente local do Airflow mais tarde, execute os comandos da ferramenta no caminho você criou inicialmente o ambiente local. Todos os dados do O ambiente local é armazenado em um subdiretório no caminho em que você criou o ambiente local: ./composer/<local_environment_name>.

  • Seu computador precisa ter espaço em disco suficiente para armazenar o Cloud Composer. de imagens de contêiner. A ferramenta CLI de desenvolvimento local do Composer armazena um arquivo de imagem para cada Versão do Cloud Composer. Por exemplo, se você tiver duas instâncias ambientes do Airflow com diferentes versões do Cloud Composer, A ferramenta CLI de desenvolvimento local do Composer armazena dois objetos de imagens de contêiner.

  • A ferramenta de CLI de desenvolvimento local do Composer usa saída colorida. É possível desativar saída colorida com a variável NO_COLOR=1: NO_COLOR=1 composer-dev <other commands>.

  • Se você tiver apenas um ambiente local, poderá omitir as de todos os comandos composer-dev, exceto run-airflow-cmd.

  • Instale as dependências da ferramenta CLI de desenvolvimento local do Composer:

  • Instale o Docker. O Docker precisa ser instalado e executado no sistema local. Para verificar se o Docker foi em execução, execute qualquer comando da CLI do Docker, como docker ps.

Configurar credenciais

Caso ainda não tenha feito isso, Receba novas credenciais de usuário para usar no Application Default Credentials:

gcloud auth application-default login

Faça login na CLI gcloud usando sua Conta do Google:

gcloud auth login

Todas as chamadas de API feitas pelos DAGs e pela ferramenta CLI de desenvolvimento local do Composer são da conta usada na CLI gcloud. Para exemplo, se um DAG no seu ambiente local do Airflow ler o conteúdo de um bucket do Cloud Storage, essa conta deve ter permissões para para acessar o bucket. Ele é diferente do Cloud Composer ambientes em que uma conta de serviço do ambiente faz as chamadas.

Instalar a ferramenta CLI de desenvolvimento local do Composer

Clone o repositório da CLI de desenvolvimento local do Composer:

git clone https://github.com/GoogleCloudPlatform/composer-local-dev.git

No diretório de nível superior do repositório clonado, execute:

pip install .

Dependendo da configuração do pip, o caminho em que a ferramenta está instalada pode não estar na variável PATH. Se esse for o caso, pip exibirá um aviso. mensagem. É possível usar as informações dessa mensagem de aviso para adicionar diretório para a variável PATH no sistema operacional.

Criar um ambiente local do Airflow com uma versão específica do Cloud Composer

Para listar as versões disponíveis do Cloud Composer, execute:

composer-dev list-available-versions --include-past-releases --limit 10

Para criar um ambiente local do Airflow com parâmetros padrão, execute:

composer-dev create \
  --from-image-version IMAGE_VERSION \
  LOCAL_ENVIRONMENT_NAME

Outros parâmetros:

composer-dev create \
  --from-image-version IMAGE_VERSION \
  --project PROJECT_ID \
  --port WEB_SERVER_PORT \
  --dags-path LOCAL_DAGS_PATH \
  LOCAL_ENVIRONMENT_NAME

Substitua:

  • IMAGE_VERSION pelo nome da imagem do Cloud Composer.
  • PROJECT_ID pelo ID do projeto;
  • WEB_SERVER_PORT pela porta em que o servidor da Web do Airflow precisa detectar.
  • LOCAL_DAGS_PATH pelo caminho para um diretório local em que os arquivos DAG estão localizado.
  • LOCAL_ENVIRONMENT_NAME pelo nome deste ambiente local do Airflow.

Exemplo:

composer-dev create \
  --from-image-version composer-2.8.5-airflow-2.7.3 \
  example-local-environment

Criar um ambiente local do Airflow a partir de um ambiente do Cloud Composer

Somente as informações a seguir são extraídas de um diretório do Cloud Composer de nuvem:

Outras informações e parâmetros de configuração do ambiente, como Arquivos DAG, histórico de execuções do DAG, variáveis do Airflow e conexões não são copiados do ambiente do Cloud Composer.

Para criar um ambiente local do Airflow a partir de um Ambiente do Cloud Composer:

composer-dev create LOCAL_ENVIRONMENT_NAME \
    --from-source-environment ENVIRONMENT_NAME \
    --location LOCATION \
    --project PROJECT_ID \
    --port WEB_SERVER_PORT \
    --dags-path LOCAL_DAGS_PATH

Substitua:

  • LOCAL_ENVIRONMENT_NAME por um nome para o ambiente local do Airflow.
  • ENVIRONMENT_NAME pelo nome do ambiente do Cloud Composer.
  • LOCATION pela região em que o ambiente do Cloud Composer está localizado.
  • PROJECT_ID pelo ID do projeto;
  • WEB_SERVER_PORT por uma porta para o servidor da Web local do Airflow.
  • LOCAL_DAGS_PATH por um caminho para um diretório local em que os DAGs estão localizado.

Exemplo:

composer-dev create example-local-environment \
  --from-source-environment example-environment \
  --location us-central1 \
  --project example-project \
  --port 8081 \
  --dags-path example_directory/dags

Iniciar um ambiente local do Airflow

Para iniciar um ambiente local do Airflow, execute:

composer-dev start LOCAL_ENVIRONMENT_NAME

Substitua:

  • LOCAL_ENVIRONMENT_NAME pelo nome de um ambiente local do Airflow.

Interromper ou reiniciar um ambiente local do Airflow

Quando você reinicia um ambiente local do Airflow, a CLI de desenvolvimento local do Composer reinicia o contêiner do Docker em que o ambiente é executado. Todo o Airflow são interrompidos e iniciados novamente. Assim, todas as execuções de DAGs feitas executados durante uma reinicialização são marcados como com falha .

Para reiniciar ou iniciar um ambiente local do Airflow que foi interrompido, execute:

composer-dev restart LOCAL_ENVIRONMENT_NAME

Substitua:

  • LOCAL_ENVIRONMENT_NAME pelo nome de um ambiente local do Airflow.

Para interromper um ambiente local do Airflow, execute:

composer-dev stop LOCAL_ENVIRONMENT_NAME

Adicionar e atualizar DAGs

Os DAgs são armazenados no diretório especificado em --dags-path ao criar o ambiente local do Airflow. Por padrão, diretório é ./composer/<local_environment_name>/dags. Você pode receber usado pelo seu ambiente com o comando describe.

Para adicionar e atualizar DAGs, altere os arquivos neste diretório. Você não precisa reinicie o ambiente local do Airflow.

Conferir os registros locais do ambiente do Airflow

É possível visualizar registros recentes de um contêiner do Docker que executa o Airflow local de nuvem. Dessa forma, é possível monitorar eventos relacionados ao contêiner e verificar Registros do Airflow para erros, como conflitos de dependência causados por pacotes PyPI e instalação.

Para acessar registros de um contêiner do Docker que executa seu ambiente local do Airflow, executar:

composer-dev logs LOCAL_ENVIRONMENT_NAME --max-lines 10

Para acompanhar o fluxo de registros, omita o argumento --max-lines:

composer-dev logs LOCAL_ENVIRONMENT_NAME

executar um comando da CLI do Airflow

É possível executar comandos da CLI do Airflow em ambiente do Airflow.

Para executar um comando da CLI do Airflow:

composer-dev run-airflow-cmd LOCAL_ENVIRONMENT_NAME \
  SUBCOMMAND SUBCOMMAND_ARGUMENTS

Exemplo:

composer-dev run-airflow-cmd example-local-environment dags list -o table

configurar ambientes locais do Airflow

A ferramenta CLI de desenvolvimento local do Composer armazena parâmetros de configuração para um Ambiente do Airflow, como variáveis de ambiente e pacote PyPI necessários no diretório do ambiente local, (./composer/<local_environment_name>).

A configuração é aplicada quando um ambiente local do Airflow é iniciado. Para Por exemplo, se você adicionar requisitos de pacote PyPI conflitantes, o Composer Local A ferramenta CLI de desenvolvimento relata erros quando você inicia o ambiente local.

As conexões do Airflow são armazenadas no banco de dados do Airflow de nuvem. Para configurá-los, execute uma CLI do Airflow. ou armazenando os parâmetros de conexão em variáveis de ambiente. Para mais informações sobre formas de criar e configurar conexões, consulte Como gerenciar conexões na documentação do Airflow.

Acessar uma lista e o status dos ambientes locais do Airflow

Para listar todos os ambientes locais disponíveis do Airflow e exibir o status deles:

composer-dev list

Para descrever um ambiente específico e acessar detalhes como a versão da imagem, o caminho dos DAGs e o URL do servidor da Web de um ambiente:

composer-dev describe LOCAL_ENVIRONMENT_NAME

Substitua:

  • LOCAL_ENVIRONMENT_NAME pelo nome do ambiente local do Airflow.

Listar imagens usadas por ambientes locais do Airflow

Para listar todas as imagens usadas pela ferramenta de CLI de desenvolvimento local do Composer, execute:

docker images --filter=reference='*/cloud-airflow-releaser/*/*'

Instalar plug-ins e alterar dados

Os plug-ins e os dados de um ambiente local do Airflow são recebidos diretório do ambiente local: ./composer/<local_environment_name>/data e ./composer/<local_environment_name>/plugins).

Para mudar o conteúdo dos diretórios /data e /plugins, adicione ou remova arquivos nesses diretórios. O Docker propaga automaticamente as alterações de arquivo para o ambiente local do Airflow.

A ferramenta CLI de desenvolvimento local do Composer não oferece suporte à especificação de uma para dados e plug-ins.

Configure as variáveis de ambiente

Para configurar as variáveis de ambiente, edite o variables.env no diretório do ambiente: ./composer/<local_environment_name>/variables.env.

O arquivo variables.env precisa conter definições de chave-valor, uma linha para cada variável de ambiente. Para mudar as opções de configuração do Airflow, use o AIRFLOW__SECTION__KEY. Para mais informações sobre os variáveis de ambiente, consulte Referência de configuração do Airflow.

EXAMPLE_VARIABLE=True
ANOTHER_VARIABLE=test
AIRFLOW__WEBSERVER__DAG_DEFAULT_VIEW=graph

Para aplicar as mudanças, reinicie o ambiente local do Airflow.

Instalar ou remover pacotes PyPI

Para instalar ou remover pacotes PyPI, modifique o arquivo requirements.txt no diretório do ambiente: ./composer/<local_environment_name>/requirements.txt.

Os requisitos devem seguir o formato especificado em PEP-508, em que cada requisito é especificado em letras minúsculas e consiste no nome do pacote com extras opcionais e especificadores de versão.

Para aplicar as mudanças, reinicie o ambiente local do Airflow.

Alternar para uma imagem diferente do Cloud Composer

É possível usar qualquer imagem do Cloud Composer com o desenvolvimento local do Composer CLI e alternar entre as imagens. Essa abordagem é diferente fazer upgrade do ambiente do Cloud Composer, já que os parâmetros de configuração do seu ambiente local do Airflow são aplicados quando começa.

Por exemplo, depois que uma nova versão do Cloud Composer é for lançado, é possível mudar seu ambiente para usar a nova versão e manter configuração atual do ambiente local do Airflow. Como outro exemplo, é possível alternar entre diferentes versões do Airflow em um Versão do Cloud Composer.

Para alterar a imagem do ambiente usada pelo ambiente local do Airflow:

  1. Edite o arquivo de configuração do ambiente local: ./composer/<local_environment_name>/config.json:

  2. Mude o valor do parâmetro composer_image_version. Para exibir os valores disponíveis, você pode listar as versões disponíveis do Cloud Composer.

  3. Para aplicar as mudanças, reinicie o ambiente local do Airflow.

Excluir um ambiente local do Airflow

Cuidado:salve todos os dados necessários do ambiente. como registros e configurações.

Para excluir um ambiente local do Airflow, execute o seguinte comando:

composer-dev remove LOCAL_ENVIRONMENT_NAME

Se o ambiente estiver em execução, adicione a sinalização --force para forçar a remoção.

Excluir imagens do Docker

Para excluir todas as imagens transferidas por download pela ferramenta de CLI de desenvolvimento local do Composer, execute:

docker rmi $(docker images --filter=reference='*/cloud-airflow-releaser/*/*' -q)

Solução de problemas

Esta seção fornece soluções para problemas comuns.

Não foi possível iniciar um ambiente local no MacOS

Se você instalou o pacote composer-dev em um diretório em que o Docker não pode acessá-lo, o ambiente local pode não ser iniciado.

Por exemplo, se o Python estiver instalado no diretório /opt, como quando você fazer a instalação com a configuração padrão do Homebrew no MacOS, O pacote composer-dev também está instalado no diretório /opt. Devido ao o Docker obedece às regras de sandbox da Apple, o diretório /opt não disponíveis por padrão. Além disso, não é possível adicioná-lo pela UI (Configurações) &gt; Recursos &gt; Compartilhamento de arquivos).

Nesse caso, a ferramenta de CLI de desenvolvimento local do Composer gera uma mensagem de erro. semelhante a este exemplo:

Failed to create container with an error: 400 Client Error for ...
Bad Request ("invalid mount config for type "bind": bind source path does not exist:
/opt/homebrew/lib/python3.9/site-packages/composer_local_dev/docker_files/entrypoint.sh

Possible reason is that composer-dev was installed in the path that is
not available to Docker. See...")

É possível usar uma das seguintes soluções:

  • Instale o Python ou o pacote composer-dev em um diretório diferente. Portanto, para que o Docker possa acessar o pacote.
  • Edite manualmente o ~/Library/Group\ Containers/group.com.docker/settings.json e adicionar /opt a filesharingDirectories.

A seguir