Solução de problemas: DAGs, operadores, conexões e outros problemas no Apache Airflow v2 - Amazon Managed Workflows for Apache Airflow

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Solução de problemas: DAGs, operadores, conexões e outros problemas no Apache Airflow v2

Os tópicos desta página descrevem resoluções para dependências do Apache Airflow v2 Python, plug-ins personalizados, DAGs, operadores, conexões, tarefas e problemas do servidor Web que você pode encontrar em um ambiente Amazon Managed Workflows for Apache Airflow.

Conexões

O tópico a seguir descreve os erros que você pode receber ao usar uma conexão Apache Airflow ou ao usar outro banco de dados AWS.

Não consigo me conectar ao Secrets Manager

Recomendamos as seguintes etapas:

  1. Aprenda a criar chaves secretas para sua conexão e variáveis do Apache Airflow em Configurando uma conexão Apache Airflow usando um segredo AWS Secrets Manager.

  2. Saiba como usar a chave secreta para uma variável do Apache Airflow (test-variable) em Como usar uma chave secreta em AWS Secrets Manager para uma variável do Apache Airflow.

  3. Saiba como usar a chave secreta para uma conexão Apache Airflow (myconn) em Como usar uma chave secreta em AWS Secrets Manager para uma conexão do Apache Airflow.

Como configuro as condições do gerenciador de segredos secretsmanager:ResourceTag/<tag-key> ou uma restrição de recursos na minha política de perfil de execução?

nota

Aplica-se ao Apache Airflow versão 2.0 e anterior.

Atualmente, você não pode limitar o acesso aos segredos do Secrets Manager usando chaves de condição ou outras restrições de recursos no perfil de execução do seu ambiente, devido a um problema conhecido no Apache Airflow.

Não consigo me conectar ao Snowflake

Recomendamos as seguintes etapas:

  1. Teste seus DAGs, plug-ins personalizados e dependências do Python localmente usando aws-mwaa-local-runner no GitHub.

  2. Adicione as seguintes entradas ao requirements.txt para seu ambiente.

    apache-airflow-providers-snowflake==1.3.0
  3. Adicione as seguintes importações ao seu DAG:

    from airflow.providers.snowflake.operators.snowflake import SnowflakeOperator

Certifique-se de que o objeto de conexão Apache Airflow inclui os seguintes pares de chave-valor:

  1. ID de conexão: snowflake_conn

  2. Tipo de conexão: Snowflake

  3. Host: <my account>.<my region if not us-west-2>.snowflakecomputing.com

  4. Esquema: <my schema>

  5. Login: <my user name>

  6. Senha: ********

  7. Porta: <port, if any>

  8. Extra:

    { "account": "<my account>", "warehouse": "<my warehouse>", "database": "<my database>", "region": "<my region if not using us-west-2 otherwise omit this line>" }

Por exemplo:

>>> import json >>> from airflow.models.connection import Connection >>> myconn = Connection( ... conn_id='snowflake_conn', ... conn_type='Snowflake', ... host='YOUR_ACCOUNT.YOUR_REGION.snowflakecomputing.com', ... schema='YOUR_SCHEMA' ... login='YOUR_USERNAME', ... password='YOUR_PASSWORD', ... port='YOUR_PORT' ... extra=json.dumps(dict(account='YOUR_ACCOUNT', warehouse='YOUR_WAREHOUSE', database='YOUR_DB_OPTION', region='YOUR_REGION')), ... )

Não consigo ver minha conexão na IU do Airflow

O Apache Airflow fornece modelos de conexão na IU do Apache Airflow. Isto é usado para gerar a string do URI de conexão, independentemente do tipo de conexão. Se um modelo de conexão não estiver disponível na IU do Apache Airflow, um modelo de conexão alternativo poderá ser usado para gerar uma string de URI de conexão, como o uso do modelo de conexão HTTP.

Recomendamos as seguintes etapas:

  1. Veja os tipos de conexão que o Amazon MWAA fornece na IU do Apache Airflow em Pacotes do provedor Apache Airflow instalados em ambientes Amazon MWAA.

  2. Veja os comandos para criar uma conexão Apache Airflow na CLI em Referência de comandos da CLI do Apache Airflow.

  3. Aprenda a usar modelos de conexão na IU do Apache Airflow de forma intercambiável para tipos de conexão que não estão disponíveis na IU do Apache Airflow no Amazon MWAA em Visão geral dos tipos de conexão.

Servidor web

O tópico a seguir descreve os erros que você pode receber do seu servidor Web Apache Airflow no Amazon MWAA.

Eu vejo um erro 5xx ao acessar o servidor web

Recomendamos as seguintes etapas:

  1. Verifique as opções de configuração do Apache Airflow. Verifique se os pares de chave-valor que você especificou como uma opção de configuração do Apache Airflow, como AWS Secrets Manager, foram configurados corretamente. Para saber mais, consulte Não consigo me conectar ao Secrets Manager.

  2. Verifique requirements.txt. Verifique se o pacote “extras” do Airflow e outras bibliotecas listadas no seu requirements.txt são compatíveis com sua versão do Apache Airflow.

  3. Para explorar formas de especificar dependências do Python em um arquivo requirements.txt, consulte Como gerenciar dependências do Python em requirements.txt.

Eu vejo um erro “O agendador não parece estar em execução”

Se o programador não parecer estar em execução ou se o último “batimento” tiver sido recebido muitas horas antes, seus DAGs podem não aparecer no Apache Airflow e novas tarefas não serão programadas.

Recomendamos as seguintes etapas:

  1. Confirme se seu grupo de segurança da VPC permite acesso de entrada à porta 5432. Essa porta é necessária para se conectar ao banco de dados de metadados PostgreSQL do Amazon Aurora para seu ambiente. Depois que essa regra for adicionada, aguarde alguns minutos para o Amazon MWAA e o erro deverá desaparecer. Para saber mais, consulte Segurança em sua VPC no Amazon MWAA.

    nota
    • O banco de dados Aurora PostgreSQL faz parte da arquitetura de serviços do Amazon MWAA e não está visível em seu Conta da AWS.

    • Os erros relacionados ao banco de dados geralmente são um sintoma de falha do programador e não a causa raiz.

  2. Se o programador não estiver em execução, pode ser devido a vários fatores, como falhas na instalação de dependências ou um programador sobrecarregado. Confirme se seus DAGs, plug-ins e requisitos estão funcionando corretamente ao visualizar os grupos de log correspondentes no CloudWatch Logs. Para saber mais, consulte Monitoramento e métricas para o Amazon Managed Workflows for Apache Airflow.

Tarefas

O tópico a seguir descreve os erros que você pode receber nas tarefas do Apache Airflow em um ambiente.

Vejo minhas tarefas travadas ou não concluídas

Se suas tarefas do Apache Airflow estiverem “travadas” ou não estiverem sendo concluídas, recomendamos as seguintes etapas:

  1. Pode haver um grande número de DAGs definidos. Reduza o número de DAGs e realize uma atualização do ambiente (como alterar um nível de log) para forçar uma reinicialização.

    1. O Airflow analisa os DAGs, estejam eles habilitados ou não. Se você estiver usando mais de 50% da capacidade do seu ambiente, você pode começar a sobrecarregar o programador do Apache Airflow. Isso leva a um grande tempo total de análise no CloudWatch Metrics ou a longos tempos de processamento do DAG no CloudWatch Logs. Há outras maneiras de otimizar as configurações do Apache Airflow que estão fora do escopo deste guia.

    2. Para saber mais sobre as práticas recomendadas para ajustar o desempenho do seu ambiente, consulte Ajuste de desempenho para o Apache Airflow no Amazon MWAA.

  2. Pode haver um grande número de tarefas na fila. Isso geralmente aparece como um grande (e crescente) número de tarefas no estado “Nenhum” ou como um grande número em Tarefas na fila e/ou Tarefas pendentes no CloudWatch. Este erro pode ocorrer pelos seguintes motivos:

    1. Se houver mais tarefas a serem executadas do que o ambiente tem a capacidade de executar e/ou um grande número de tarefas que foram colocadas em fila antes do ajuste de escala automático, você terá tempo para detectar as tarefas e implantar mais operadores.

    2. Se houver mais tarefas para executar do que um ambiente tem a capacidade de executar, recomendamos reduzir o número de tarefas que seus DAGs executam simultaneamente e/ou aumentar o número mínimo de operadores no Apache Airflow.

    3. Se houver um grande número de tarefas que foram colocadas em fila antes que o ajuste de escala automático tivesse tempo de detectar e implantar operadores adicionais, recomendamos intercalar a implantação de tarefas e/ou aumentar o número mínimo de operadores no Apache Airflow.

    4. Você pode usar o comando update-environment no AWS Command Line Interface (AWS CLI) para alterar o número mínimo ou máximo de Operadores que são executados em seu ambiente.

      aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 10
    5. Para saber mais sobre as práticas recomendadas para ajustar o desempenho do seu ambiente, consulte Ajuste de desempenho para o Apache Airflow no Amazon MWAA.

  3. Pode haver tarefas sendo excluídas no meio da execução que aparecem como logs de tarefas que param sem nenhuma indicação adicional no Apache Airflow. Este erro pode ocorrer pelos seguintes motivos:

    1. Se houver um breve momento em que 1) as tarefas atuais excedam a capacidade atual do ambiente, seguido por 2) alguns minutos sem nenhuma tarefa em execução ou na fila e 3) novas tarefas sendo colocadas na fila.

    2. O escalonamento automático do Amazon MWAA reage ao primeiro cenário adicionando mais operadores. No segundo cenário, ele remove os operadores adicionais. Algumas das tarefas que estão sendo colocadas na fila podem resultar na remoção dos operadores e terminarão quando o contêiner for excluído.

    3. Recomendamos aumentar o número mínimo de operadores em seu ambiente. Outra opção é ajustar o tempo de seus DAGs e tarefas para garantir que esses cenários não ocorram.

    4. Você também pode definir o mínimo de operadores igual ao máximo de operadores em seu ambiente, desativando de maneira eficaz o ajuste de escala automático. Use o comando update-environment no AWS Command Line Interface (AWS CLI) para desabilitar o escalonamento automático definindo o número mínimo e máximo de operadores como sendo o mesmo.

      aws mwaa update-environment --name MyEnvironmentName --min-workers 5 --max-workers 5
    5. Para saber mais sobre as práticas recomendadas para ajustar o desempenho do seu ambiente, consulte Ajuste de desempenho para o Apache Airflow no Amazon MWAA.

  4. Se suas tarefas estiverem travadas no estado “em execução”, você também poderá limpá-las ou marcá-las como bem-sucedidas ou malsucedidas. Isso permite que o componente de ajuste de escala automático do seu ambiente reduza a escala verticalmente do número de operadores em execução no seu ambiente. A imagem a seguir mostra um exemplo de uma tarefa perdida.

    Esta é uma imagem com uma tarefa perdida.
    1. Escolha o círculo para a tarefa perdida e selecione Limpar (conforme mostrado). Isso permite ao Amazon MWAA reduzir a escala verticalmente dos operadores; caso contrário, o Amazon MWAA não poderá determinar quais DAGs estão ativados ou desativados e não poderá reduzir a escala verticalmente se ainda houver tarefas na fila.

      Ações do Apache Airflow
  5. Saiba mais sobre o ciclo de vida das tarefas do Apache Airflow em Conceitos no guia de referência do Apache Airflow.

CLI

O tópico a seguir descreve os erros que você pode receber ao executar comandos da CLI do Airflow no AWS Command Line Interface.

Eu vejo um erro “503” ao acionar um DAG na CLI

A CLI do Airflow é executada no servidor Web do Apache Airflow, que tem simultaneidade limitada. Normalmente, no máximo 4 comandos da CLI podem ser executados simultaneamente.

Por que o comando da CLI dags backfill do Apache Airflow falha? Existe uma solução alternativa?

nota

O seguinte se aplica somente aos ambientes Apache Airflow v2.0.2.

O comando backfill, como outros comandos da CLI do Apache Airflow, analisa todos os DAGs localmente antes que qualquer DAG seja processado, independentemente do DAG ao qual a operação da CLI se aplica. Em ambientes Amazon MWAA usando o Apache Airflow v2.0.2, como os plug-ins e os requisitos ainda não estão instalados no servidor web no momento em que o comando CLI é executado, a operação de análise falha e a operação backfill não é invocada. Se você não tivesse nenhum requisito nem plug-ins em seu ambiente, a operação backfill seria bem-sucedida.

Para poder executar o comando da CLI backfill, recomendamos invocá-lo em um operador bash. Em um operador bash, backfill é iniciado pelo operador, permitindo que os DAGs sejam analisados com sucesso, pois todos os requisitos e plug-ins necessários estão disponíveis e instalados. O exemplo a seguir mostra como criar um DAG com BashOperator para executar backfill.

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago with DAG(dag_id="backfill_dag", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="airflow dags backfill my_dag_id" )

Operadores

O tópico a seguir descreve os erros que você pode receber ao usar Operadores.

Recebi um erro PermissionError: [Errno 13] Permission denied ao usar o operador S3Transform

Recomendamos as etapas a seguir se você estiver tentando executar um script de shell com o operador S3Transform e estiver recebendo um erro PermissionError: [Errno 13] Permission denied. As etapas a seguir pressupõem que você tenha um arquivo plugins.zip existente. Se você estiver criando um novo plugins.zip, consulte Instalando plug-ins personalizados.

  1. Teste seus DAGs, plug-ins personalizados e dependências do Python localmente usando aws-mwaa-local-runner no GitHub.

  2. Crie seu script de “transform” (transformação).

    #!/bin/bash cp $1 $2
  3. (opcional) os usuários do macOS e do Linux podem precisar executar o comando a seguir para garantir que o script seja executável.

    chmod 777 transform_test.sh
  4. Adicione o script ao seu arquivo plugins.zip.

    zip plugins.zip transform_test.sh
  5. Siga as etapas em Carregar o plugins.zip para o Amazon S3.

  6. Siga as etapas em Especificação da versão do plugins.zip no console do Amazon MWAA.

  7. Crie o seguinte DAG.

    from airflow import DAG from airflow.providers.amazon.aws.operators.s3_file_transform import S3FileTransformOperator from airflow.utils.dates import days_ago import os DAG_ID = os.path.basename(__file__).replace(".py", "") with DAG (dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: file_transform = S3FileTransformOperator( task_id='file_transform', transform_script='/usr/local/airflow/plugins/transform_test.sh', source_s3_key='s3://YOUR_S3_BUCKET/files/input.txt', dest_s3_key='s3://YOUR_S3_BUCKET/files/output.txt' )
  8. Siga as etapas em Como fazer upload do código DAG para o Amazon S3.