Gerenciar conexões do Airflow

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Esta página descreve como gerenciar Conexões do Airflow na sua e acessá-los pelos DAGs.

Sobre as conexões do Airflow

As conexões Aiflow armazenam credenciais e outras informações de conexão, como nomes de usuário, strings de conexão e senhas. Os DAGs usam conexões para comunicar e acessar recursos no Google Cloud e em outros serviços dos DAGs.

Os operadores do Airflow nos DAGs usam uma conexão padrão para o ou um nome de conexão personalizado.

Sobre a segurança da conexão

A maioria dos operadores do Airflow não aceita credenciais diretamente. Em vez disso, eles usam Conexões do Airflow.

Quando você cria um novo ambiente, o Cloud Composer gera uma chave fernet exclusiva e permanente para o ambiente e protege os extras de conexão por padrão. Você pode ver o fernet_key na página Configuração em IU do Airflow.

Para mais informações sobre como conexões e senhas são protegidas em do Airflow, consulte Como proteger as conexões e Mascaramento de dados sensíveis.

Sobre os tipos de conexão

O Airflow usa conexões de tipos diferentes para se conectar a serviços específicos. Por exemplo, o Tipo de conexão do Google Cloud e se conecta a outros serviços no Google Cloud. Como outro exemplo, a conexão S3 se conecta a um bucket do Amazon S3.

Para adicionar um tipo de conexão ao Airflow, instalar um pacote PyPI com esse tipo de conexão. Alguns pacotes estão pré-instalados no seu ambiente. Para exemplo, é possível usar a conexão do apache-airflow-providers-google sem instalar pacotes PyPI personalizados.

Conexões pré-configuradas

O Cloud Composer configura as conexões padrão a seguir no seu de nuvem. É possível usar essas conexões para acessar recursos no seu projeto sem precisar configurá-los.

  • google_cloud_default
  • bigquery_default
  • google_cloud_datastore_default
  • google_cloud_storage_default

Adicionar uma conexão ao Secret Manager

É possível armazenar uma conexão no Secret Manager sem adicionar para o Airflow. Recomendamos usar essa abordagem ao armazenar credenciais e outras informações sensíveis.

Para adicionar uma conexão no Secret Manager:

  1. Configure o Secret Manager para o ambiente.

  2. Adicione um secret com o nome corresponde ao padrão das conexões.

    Por exemplo, airflow-connections-example_connection. Nos DAGs, use o nome da conexão sem o prefixo: example_connection.

  3. Adicione parâmetros para a conexão:

    Formato JSON

    Adicione a representação JSON da sua conexão como o valor do parâmetro segredo. Exemplo:

    {
      "conn_type": "mysql",
      "host": "example.com",
      "login": "login",
      "password": "password",
      "port": "9000"
    }
    

    Para mais informações sobre o formato de conexão JSON, consulte Documentação do Airflow.

    Formato do URI

    Adicione a representação de URI da sua conexão como o valor do atributo segredo:

    • O secret precisa armazenar um Representação do URI de a conexão. Por exemplo, mysql://login:password@example.com:9000.

    • O URI precisa ser codificado para uso em URL. Para exemplo, uma senha contendo um símbolo de espaço deve ser codificada para URL da seguinte forma: mysql://login:secret%20password@example.com:9000:

    O Airflow tem método de conveniência para gerar URIs de conexão. Exemplo de como codificar um URL complexo com extras JSON está disponível no Documentação do Airflow.

  4. Verifique se todos os parâmetros de conexão estão lidas corretamente no Secret Manager.

Adicionar uma conexão no Airflow

Como alternativa ao armazenamento das conexões no Secret Manager, é possível armazená-los no Airflow.

Para adicionar uma conexão no Airflow:

CLI do Airflow

Execute o CLI do connections add Airflow pela Google Cloud CLI. Exemplo:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-type "mysql" \
    --conn-host "example.com" \
    --conn-port "9000" \
    --conn-login "login" \
    --conn-password "password" \
    example_connection

Também é possível usar o argumento --conn-uri:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-uri "mysql://login:password@example.com:9000" \
    example_connection

Substitua:

  • ENVIRONMENT_NAME: o nome do ambiente;
  • LOCATION: a região em que o ambiente está localizado.

IU do Airflow

Siga a documentação do Airflow sobre como criar conexões.

Verificar se o Airflow lê corretamente uma conexão

É possível executar o comando connections get da CLI do Airflow pelas a Google Cloud CLI para verificar se uma conexão é lida corretamente. Por exemplo, se você armazenar uma conexão com o Secret Manager, ele permite verificar se todos Os parâmetros de uma conexão são lidos pelo Airflow em um secret.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    connections get \
    -- CONNECTION_NAME

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • CONNECTION_NAME pelo nome da conexão. Se sua conexão for armazenadas no Secret Manager, use o nome da conexão sem o prefixo da conexão. Por exemplo, especifique example_connection em vez de airflow-connections-example_connection_json.

Exemplo:

gcloud composer environments run example-environment \
    --location us-central1 \
    connections get \
    -- example_connection -o json

Usar conexões do Airflow nos DAGs

Nesta seção, mostramos como acessar sua conexão de um DAG.

Usar uma conexão do Secret Manager

Use o nome da conexão sem o prefixo. Por exemplo, se o secret tem o nome airflow-connections-aws_s3, especifique aws_s3.

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

Se você armazenar uma conexão padrão no Secret Manager, poderá omitir o nome da conexão. Consulte a documentação do Airflow de um operador específico para receber o nome de conexão padrão usado por um operador. Por exemplo, o O operador S3ToGCSOperator do Airflow usa a conexão aws_default ao padrão. É possível armazenar essa conexão padrão em um secret chamado airflow-connections-aws_default:

Usar uma conexão armazenada no Airflow

Use o nome da conexão, conforme definido no Airflow:

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

Para usar a conexão padrão com um operador, omita o nome da conexão. Consulte Documentação do Airflow de um operador específico para receber a conexão padrão usado por um operador. Por exemplo, o operador S3ToGCSOperator do Airflow usa a conexão aws_default por padrão.

Solução de problemas

Se o ambiente não conseguir acessar o secret armazenado no Secret Manager:

  1. Verifique se o Secret Manager está configurado no de nuvem.

  2. Verifique se o nome da conexão no Secret Manager corresponde à conexão usada pelo Airflow. Por exemplo, para uma conexão chamada example_connection, o nome do secret é airflow-connections-example_connection.

  3. Verifique se o Airflow lê uma conexão corretamente.

A seguir