Como gerenciar conexões do Airflow

Nesta página, descrevemos como usar as conexões do Airflow.

As conexões do Airflow permitem acessar recursos nos projetos do Google Cloud a partir de um ambiente do Cloud Composer. Você cria IDs de conexão do Airflow para armazenar informações, como logins e nomes de host, e seus fluxos de trabalho referenciam os IDs de conexão. As conexões do Airflow são a maneira recomendada de armazenar secrets e credenciais usados em fluxos de trabalho.

As conexões do Airflow permitem armazenar as informações de conexão necessárias para que um ambiente do Cloud Composer se comunique com outras APIs, como projetos do Google Cloud, outros provedores de nuvem ou serviços de terceiros.

Uma conexão do Airflow pode armazenar detalhes, por exemplo, credenciais, nomes de host ou parâmetros de API adicionais. Cada conexão tem um ID associado que é possível usar em tarefas de fluxo de trabalho para referenciar os detalhes predefinidos. Recomendamos o uso de conexões do Airflow para armazenar secrets e credenciais para tarefas de fluxo de trabalho.

O tipo de conexão do Google Cloud ativa as Integrações do Google Cloud.

Chave da Fernet e conexões seguras

Quando você cria um novo ambiente, o Cloud Composer gera uma chave fernet permanente e exclusiva para o ambiente. Por padrão, protege os extras de conexão. É possível ver fernet_key na configuração do Airflow. Para informações sobre como as conexões são protegidas, consulte Como proteger conexões.

Como usar as conexões padrão

Por padrão, o Cloud Composer configura as seguintes conexões do Airflow para o Google Cloud Platform:

  • bigquery_default
  • google_cloud_default
  • google_cloud_datastore_default
  • google_cloud_storage_default

É possível usar essas conexões dos seus DAGs usando o ID de conexão padrão. No exemplo a seguir, o BigQueryOperator é usado com a conexão padrão.

Ver no GitHub (em inglês) Feedback
task_default = bigquery_operator.BigQueryOperator(
    task_id='task_default_connection',
    bql='SELECT 1', use_legacy_sql=False)

Também é possível especificar o ID de conexão explicitamente ao criar o operador.

Ver no GitHub (em inglês) Feedback
task_explicit = bigquery_operator.BigQueryOperator(
    task_id='task_explicit_connection',
    bql='SELECT 1', use_legacy_sql=False,
    # Composer creates a 'google_cloud_default' connection by default.
    bigquery_conn_id='google_cloud_default')

Como acessar recursos em outro projeto

A maneira recomendada de permitir que o ambiente do Cloud Composer acesse recursos nos projetos do Google Cloud é usar as conexões padrão e atribuir as permissões de gerenciamento de identidade e acesso apropriadas à conta de serviço associada ao ambiente.

Nas seções a seguir, você verá exemplos de como permitir leituras e gravações em buckets do Cloud Storage em your-storage-project para um ambiente do Cloud Composer implantado no ID do projeto your-composer-project.

Como determinar a conta de serviço associada ao ambiente

Console

  1. No Console do Cloud, abra a página Ambientes.

    Abrir a página "Ambientes"

  2. Na coluna Nome, clique no nome do ambiente para abrir a página de detalhes do ambiente.
  3. Anote a Conta de serviço. Esse valor é um endereço de e-mail, como service-account-name@your-composer-project.iam.gserviceaccount.com.

gcloud

Digite o comando a seguir e substitua VARIABLES pelos valores apropriados:

gcloud composer environments describe ENVIRONMENT_NAME \
    --location LOCATION \
    --format="get(config.nodeConfig.serviceAccount)" 

A saída mostra um endereço, como service-account-name@your-composer-project.iam.gserviceaccount.com.

Como conceder as permissões apropriadas do IAM à conta de serviço

Para permitir leituras e gravações em buckets do Cloud Storage em your-storage-project, conceda o papel roles/storage.objectAdmin à conta de serviço associada ao ambiente do Cloud Composer.

Console

  1. Na página IAM e administrador do projeto de armazenamento.

    Abrir a página IAM e Admin

  2. Clique em Adicionar membros.

  3. Na caixa de diálogo Adicionar membros, especifique o endereço de e-mail completo da conta de serviço associada ao ambiente do Cloud Composer.

  4. Na lista suspensa Selecionar papel, escolha as permissões apropriadas. Para este exemplo, selecione o papel Armazenamento > Administrador de objeto.

  5. Clique em Add.

gcloud

Use o comando gcloud projects add-iam-policy-binding para adicionar permissões do IAM no nível do projeto. Substitua VARIABLES pelos valores apropriados:

gcloud projects add-iam-policy-binding YOUR_STORAGE_PROJECT \
    --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --role=roles/storage.objectAdmin 

Depois que as permissões apropriadas forem concedidas, será possível acessar os recursos no projeto your-storage-project com as mesmas conexões padrão do Airflow que você usa para acessar os recursos no projeto your-composer-project.

Como criar novas conexões do Airflow

Antes de começar

Conceda as permissões de IAM apropriadas à conta de serviço associada ao ambiente do Cloud Composer e use as conexões padrão nas definições do DAG. Se você não conseguir fazer isso, siga as etapas desta seção.

Como criar uma conexão com outro projeto

Nas etapas a seguir, você verá exemplos de como permitir leituras e gravações em buckets do Cloud Storage em your-storage-project para um ambiente do Cloud Composer implantado no ID do projeto your-composer-project.

  1. Crie uma conta de serviço em your-storage-project e faça o download de uma chave JSON:

    1. No Console do Cloud, abra a página Contas de serviço.

      Abrir a página "Contas de serviço"

    2. Clique em Selecionar um projeto.

    3. Selecione o projeto e clique em Abrir.

    4. Clique em Criar conta de serviço.

    5. Digite um nome de conta de serviço, selecione um papel que você queira atribuir a ela, como Armazenamento > Administrador de objetos.

    6. Marque Fornecer uma nova chave privada e clique em Salvar.

    7. Abra o arquivo JSON em um editor de texto simples. O conteúdo deve ter esta aparência:

      { "type": "service_account", "project_id": "your-storage-project", ... }

  2. Criar uma nova conexão:

    IU do Airflow

    1. Acesse a interface da Web do Airflow para seu ambiente do Cloud Composer.

    2. Na interface da Web do Airflow, abra a página Administrador > Conexões.

      Captura de tela
do Airflow. Abra o menu Administrador das conexões.

    3. Para abrir o formulário da nova conexão, clique na guia Criar.

      Captura de tela
do Airflow. Clique na guia

    4. Criar uma nova conexão:

      1. Para escolher um ID de conexão, preencha o campo ID de conexão, como my_gcp_connection. Use esse ID nos arquivos de definição do DAG.
      2. No campo Tipo de conexão, selecione a opção Google Cloud Platform.
      3. Insira um valor de ID do projeto que corresponda ao projeto a que sua conta de serviço pertence.
      4. Siga uma das seguintes ações:

        1. Copie o arquivo de chave JSON da conta de serviço que você salvou para o diretório data/ do bucket do Cloud Storage do ambiente. Em Caminho do arquivo de chave, digite o caminho do arquivo local no worker do Airflow para o local do arquivo-chave JSON, como /home/airflow/gcs/data/keyfile.json.
        2. Em JSON , copie o conteúdo do arquivo de chave JSON da conta de serviço que você fez o download.

        Os usuários com acesso às conexões do Airflow por meio da CLI ou da IU da Web podem ler as credenciais armazenadas em keyfile_dict. Para proteger essas credenciais, recomendamos usar o Caminho do arquivo de chave e uma ACL do Cloud Storage para restringir o acesso ao arquivo de chave.

      5. Insira um valor no campo Escopos. Recomenda-se usar https://www.googleapis.com/auth/cloud-platform como o escopo e usar permissões de IAM na conta de serviço para limitar o acesso aos recursos do Google Cloud.

      6. Para criar a conexão, clique em Salvar.

        Captura de tela
do Airflow. Clique na guia

    gcloud

    Digite o seguinte comando:

    gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION connections -- --add \
    --conn_id=CONNECTION_ID --conn_type=google_cloud_platform \
    --conn_extra '{"extra\__google\_cloud\_platform\__CMD_ARGS": "...",
    "extra\__google\_cloud\_platform\__CMD_ARGS": "...", ...}'
    

    em que:

    • ENVIRONMENT_NAME é o nome do ambiente;
    • LOCATION é a região do Compute Engine em que o ambiente está localizado.
    • CONNECTION_ID é o identificador da conexão. Use caracteres em letras minúsculas e separe as palavras com sublinhados.
    • CMD_ARGS são o seguinte:
      • project é um ID do projeto. Apenas extra__google_cloud_platform__project é obrigatório.
      • key_path é um caminho de arquivo local no worker do Airflow para um arquivo de chave JSON, como /home/airflow/gcs/data/keyfile.json. Se fornecido, também requer scope. Use key_path ou keyfile_dict, mas não ambos.
      • keyfile_dict é um objeto JSON que especifica o conteúdo do arquivo de chave JSON que você fez download. Se fornecido, também requer scope. Use keyfile_dict ou key_path, mas não ambos. Os usuários com acesso às conexões do Airflow por meio da CLI ou da IU da Web podem ler as credenciais armazenadas em keyfile_dict. Para proteger essas credenciais, recomendamos que você use key_path e aplique uma ACL do Cloud Storage para restringir o acesso ao arquivo de chave.
      • scope é uma lista separada por vírgulas de escopos do OAuth.

    Exemplo:

    gcloud composer environments run test-environment \
     --location us-central1 connections -- --add \
     --conn_id=my_gcp_connection --conn_type=google_cloud_platform \
     --conn_extra '{"extra\__google\_cloud\_platform\__project": "your-storage-project",
     "extra\__google\_cloud\_platform\__key_path": "/home/airflow/gcs/data/keyfile.json",
     "extra\__google\_cloud\_platform\__scope": "https://www.googleapis.com/auth/cloud-platform"}'

Como usar uma nova conexão do Airflow

Para usar a conexão criada, defina-a como o argumento do ID da conexão correspondente quando criar um operador do Google Cloud Airflow.

Ver no GitHub (em inglês) Feedback
task_custom = bigquery_operator.BigQueryOperator(
    task_id='task_custom_connection',
    bql='SELECT 1', use_legacy_sql=False,
    # Set a connection ID to use a connection that you have created.
    bigquery_conn_id='my_gcp_connection')

Como configurar uma conexão com um banco de dados externo

O Cloud Composer fornece o proxy padrão do Cloud SQL no seu ambiente para autorizar remotamente o acesso ao banco de dados do Cloud SQL a partir de um aplicativo, cliente ou outro serviço do Google Cloud.

Para conectar o Cloud Composer a um banco de dados externo, como um banco de dados SQL ou instância de IP privado do Cloud SQL, é preciso implantar um novo Pod de proxy SQL (yaml) no cluster do GKE do ambiente.

Depois de implantar o novo serviço de proxy SQL, a conexão com seu banco de dados externo será originada do cluster do GKE do ambiente. Para que o servidor da Web do Airflow acesse o banco de dados externo, na forma de uma conexão do Airflow, por exemplo, o serviço de proxy SQL deve ser acessível pelo servidor da Web. Para isso, as seguintes opções estão disponíveis:

  • Crie um serviço LoadBalancer para expor esse serviço de proxy SQL adicional. Talvez você também queira restringir o acesso a esse serviço LoadBalancer. Outra opção é implantar um servidor da Web autogerenciado do Airflow.
  • Criar um ambiente de IP particular do Cloud Composer e expor o serviço de proxy SQL usando o serviço ClusterIP. Quando o modo de IP privado está ativado no Cloud Composer, o servidor da Web tem acesso direto aos serviços do Kubernetes.