Como gerenciar dependências do Python em requirements.txt - 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á.

Como gerenciar dependências do Python em requirements.txt

Esta página descreve as práticas recomendadas para instalar e gerenciar dependências do Python em um arquivo requirements.txt para um ambiente Amazon Managed Workflows for Apache Airflow.

Testando DAGs usando o MWAA CLI utilitário Amazon

  • O utilitário de interface de linha de comando (CLI) replica localmente um ambiente Amazon Managed Workflows para Apache Airflow.

  • Ele CLI cria uma imagem de contêiner Docker localmente que é semelhante a uma imagem de MWAA produção da Amazon. Isso permite que você execute um ambiente Apache Airflow local para desenvolver e testar DAGs plug-ins e dependências personalizados antes da implantação na Amazon. MWAA

  • Para executar oCLI, veja o aws-mwaa-local-runnerligado GitHub.

Instalando dependências do Python usando o formato de arquivo de requisitos PyPi .org

A seção a seguir descreve as diferentes maneiras de instalar dependências do Python de acordo com o Formato de Arquivo de Requisitos PyPi .org.

Opção 1: dependências do Python do Python Package Index

A seção a seguir descreve como especificar dependências do Python do Python Package Index em um arquivo requirements.txt.

Apache Airflow v2
  1. Testar localmente. Adicione bibliotecas adicionais de forma iterativa para encontrar a combinação certa de pacotes e suas versões, antes de criar um arquivo requirements.txt. Para executar o MWAA CLI utilitário Amazon, consulte GitHub o. aws-mwaa-local-runner

  2. Revise os extras do pacote Apache Airflow. Para ver uma lista dos pacotes instalados para o Apache Airflow v2 na Amazon, MWAA consulte Amazon MWAA local runner requirements.txt no site. GitHub

  3. Adicione uma declaração de restrições. Adicione o arquivo de restrições do seu ambiente Apache Airflow v2 na parte superior do seu arquivo requirements.txt. Os arquivos de restrições do Apache Airflow especificam as versões do provedor disponíveis no momento de um lançamento do Apache Airflow.

    A partir do Apache Airflow v2.7.2, seu arquivo de requisitos deve incluir uma declaração --constraint. Se você não fornecer uma restrição, a Amazon MWAA especificará uma para garantir que os pacotes listados em seus requisitos sejam compatíveis com a versão do Apache Airflow que você está usando.

    No exemplo a seguir, substitua {environment-version} com o número da versão do seu ambiente e {Python-version} com a versão do Python compatível com seu ambiente.

    Para obter informações sobre a versão do Python compatível com seu ambiente Apache Airflow, consulte Versões do Apache Airflow.

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"

    Se o arquivo de restrições determinar que o xyz==1.0 pacote não é compatível com outros pacotes em seu ambiente, pip3 install falhará para evitar que bibliotecas incompatíveis sejam instaladas em seu ambiente. Se a instalação falhar em algum pacote, você poderá visualizar os registros de erros de cada componente do Apache Airflow (o agendador, o trabalhador e o servidor web) no fluxo de registros correspondente em Logs. CloudWatch Para obter mais informações sobre os tipos de log, consulte Visualizando registros de fluxo de ar na Amazon CloudWatch.

  4. Pacotes do Apache Airflow. Adicione os extras do pacote e a versão (==). Isso ajuda a evitar que pacotes com o mesmo nome, mas com versões diferentes, sejam instalados em seu ambiente.

    apache-airflow[package-extra]==2.5.1
  5. Bibliotecas Python. Adicione o nome do pacote e a versão (==) em seu arquivo requirements.txt. Isso ajuda a evitar que uma atualização futura de última hora do PyPidomínio.org seja aplicada automaticamente.

    library == version
    exemplo Boto3 e psycopg2-binary

    Esse exemplo de código é fornecido para fins de demonstração. As bibliotecas boto e psycopg2-binary estão incluídas na instalação básica do Apache Airflow v2 e não precisam ser especificadas em um arquivo requirements.txt.

    boto3==1.17.54 boto==2.49.0 botocore==1.20.54 psycopg2-binary==2.8.6

    Se um pacote for especificado sem uma versão, a Amazon MWAA instalará a versão mais recente do pacote em PyPi.org. Esta versão pode entrar em conflito com outros pacotes em seu requirements.txt.

Apache Airflow v1
  1. Testar localmente. Adicione bibliotecas adicionais de forma iterativa para encontrar a combinação certa de pacotes e suas versões, antes de criar um arquivo requirements.txt. Para executar o MWAA CLI utilitário Amazon, consulte GitHub o. aws-mwaa-local-runner

  2. Revise os extras do pacote Airflow. Veja a lista de pacotes disponíveis para o Apache Airflow v1.10.12 em airflow/constraints-1.10.12/constraints-3.7.txt. https://raw.githubusercontent.com/apache/

  3. Adicione o arquivo de restrições. Adicione o arquivo de restrições do Apache Airflow v1.10.12 na parte superior do seu arquivo requirements.txt. Se o arquivo de restrições determinar que o pacote xyz==1.0 não é compatível com outros pacotes em seu ambiente, pip3 install não conseguirá impedir que bibliotecas incompatíveis sejam instaladas em seu ambiente.

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.7.txt"
  4. Pacotes do Apache Airflow v1.10.12. Adicione os extras do pacote Airflow e a versão v1.10.12 do Apache Airflow (==). Isso ajuda a evitar que pacotes com o mesmo nome, mas com versões diferentes, sejam instalados em seu ambiente.

    apache-airflow[package]==1.10.12
    exemplo Concha segura (SSH)

    O requirements.txt arquivo de exemplo a seguir é instalado SSH para o Apache Airflow v1.10.12.

    apache-airflow[ssh]==1.10.12
  5. Bibliotecas Python. Adicione o nome do pacote e a versão (==) em seu arquivo requirements.txt. Isso ajuda a evitar que uma atualização futura de última hora do PyPidomínio.org seja aplicada automaticamente.

    library == version
    exemplo Boto3

    O arquivo requirements.txt de exemplo a seguir, instala a biblioteca Boto3 para o Apache Airflow v1.10.12.

    boto3 == 1.17.4

    Se um pacote for especificado sem uma versão, a Amazon MWAA instalará a versão mais recente do pacote em PyPi.org. Esta versão pode entrar em conflito com outros pacotes em seu requirements.txt.

Opção dois: wheel do Python (.whl)

O wheel do Python é um formato de pacote projetado para enviar bibliotecas com artefatos compilados. Há vários benefícios em usar pacotes de rodas como método para instalar dependências na AmazonMWAA:

  • Instalação mais rápida — os WHL arquivos são copiados para o contêiner como um único eZIP, em seguida, instalados localmente, sem precisar baixar cada um.

  • Menos conflitos: você pode determinar a compatibilidade de versões de seus pacotes com antecedência. Como resultado, não há necessidade de pip para elaborar recursivamente versões compatíveis.

  • Mais resiliência — Com bibliotecas hospedadas externamente, os requisitos posteriores podem mudar, resultando em incompatibilidade de versões entre contêineres em um ambiente Amazon. MWAA Por não depender de uma fonte externa para dependências, cada contêiner tem as mesmas bibliotecas, independentemente de quando cada contêiner é instanciado.

Recomendamos os seguintes métodos para instalar dependências do Python a partir de um arquivo wheel do Python (.whl) no seu arquivo requirements.txt.

Como usar o arquivo plugins.zip em um bucket do Amazon S3

O programador do Apache Airflow, os trabalhadores e o servidor web (para o Apache Airflow v2.2.2 e versões posteriores) procuram plug-ins personalizados durante a inicialização no contêiner Fargate gerenciado AWS para seu ambiente em. /usr/local/airflow/plugins/* Esse processo começa antes das dependências MWAA da Amazon pip3 install -r requirements.txt para Python e da inicialização do serviço Apache Airflow. Um plugins.zip arquivo pode ser usado para qualquer arquivo que você não queira que seja alterado continuamente durante a execução do ambiente ou que talvez não queira conceder acesso aos usuários que escrevemDAGs. Por exemplo, arquivos de roda da biblioteca Python, arquivos de certificado e PEM arquivos de configuraçãoYAML.

A seção a seguir descreve como instalar um wheel que está no arquivo plugins.zip em seu bucket do Amazon S3.

  1. Baixe os WHL arquivos necessários Você pode usar pip downloadcom o seu executor local existente requirements.txt no Amazon MWAA local-runner ou em outro contêiner Amazon Linux 2 para resolver e baixar os arquivos Python wheel necessários.

    $ pip3 download -r "$AIRFLOW_HOME/dags/requirements.txt" -d "$AIRFLOW_HOME/plugins" $ cd "$AIRFLOW_HOME/plugins" $ zip "$AIRFLOW_HOME/plugins.zip" *
  2. Especifique o caminho em seu requirements.txt. Especifique o diretório de plug-ins na parte superior do seu requirements.txt usando --find-linkse instrua pip a não instalar de outras fontes usando --no-index, conforme mostrado no seguinte

    --find-links /usr/local/airflow/plugins --no-index
    exemplo wheel em requirements.txt

    O exemplo a seguir pressupõe que você tenha carregado o wheel em um arquivo plugins.zip na raiz do seu bucket do Amazon S3. Por exemplo:

    --find-links /usr/local/airflow/plugins --no-index numpy

    A MWAA Amazon pega a numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl roda da plugins pasta e a instala em seu ambiente.

Usando um WHL arquivo hospedado em um URL

A seção a seguir descreve como instalar uma roda hospedada em umURL. Eles URL devem estar acessíveis ao público ou de dentro da Amazon personalizada VPC que você especificou para o seu MWAA ambiente Amazon.

  • Forneça um URL. Forneça URL a uma roda em seurequirements.txt.

    exemplo arquivo de rodas em um público URL

    O exemplo a seguir baixa um wheel de um site público.

    --find-links https://files.pythonhosted.org/packages/ --no-index

    A Amazon MWAA busca a roda do URL que você especificou e a instala em seu ambiente.

    nota

    URLsnão são acessíveis a partir de servidores web privados, instalando os requisitos na Amazon MWAA v2.2.2 e versões posteriores.

Criando WHL arquivos a partir de um DAG

Se você tem um servidor web privado usando o Apache Airflow v2.2.2 ou posterior e não consegue instalar os requisitos porque seu ambiente não tem acesso a repositórios externos, você pode usar o seguinte para DAG pegar seus MWAA requisitos existentes da Amazon e empacotá-los no Amazon S3:

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago S3_BUCKET = 'my-s3-bucket' S3_KEY = 'backup/plugins_whl.zip' with DAG(dag_id="create_whl_file", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command=f"mkdir /tmp/whls;pip3 download -r /usr/local/airflow/requirements/requirements.txt -d /tmp/whls;zip -j /tmp/plugins.zip /tmp/whls/*;aws s3 cp /tmp/plugins.zip s3://{S3_BUCKET}/{S3_KEY}" )

Depois de executar oDAG, use esse novo arquivo como seu Amazon MWAAplugins.zip, opcionalmente, empacotado com outros plug-ins. Em seguida, atualize seu requirements.txt precedido por --find-links /usr/local/airflow/plugins e --no-index sem adicionar--constraint.

Esse método permite que você use as mesmas bibliotecas off-line.

Opção três: dependências do Python hospedadas em um repositório privado compatível com PyPi/PEP-503

A seção a seguir descreve como instalar um Apache Airflow extra hospedado em um ambiente privado URL com autenticação.

  1. Adicione seu nome de usuário e senha como opções de configuração do Apache Airflow. Por exemplo:

    • foo.user : YOUR_USER_NAME

    • foo.pass : YOUR_PASSWORD

  2. crie seu arquivo requirements.txt. Substitua os espaços reservados no exemplo a seguir pelo seu nome privado URL e pelo nome de usuário e senha que você adicionou como opções de configuração do Apache Airflow. Por exemplo:

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
  3. adicione outras bibliotecas ao seu arquivo requirements.txt. Por exemplo:

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com my-private-package==1.2.3

Habilitando registros no MWAA console da Amazon

A função de execução do seu MWAA ambiente Amazon precisa de permissão para enviar registros para o CloudWatch Logs. Para atualizar as permissões de um perfil de execução, consulte MWAAFunção de execução da Amazon.

Você pode ativar os logs do Apache Airflow no nível INFO, WARNING, ERROR e CRITICAL. Quando você escolhe um nível de registro, a Amazon MWAA envia registros desse nível e de todos os níveis mais altos de severidade. Por exemplo, se você habilitar registros no INFO nível, a Amazon MWAA enviará INFO registros e WARNINGERROR, e níveis de CRITICAL log para CloudWatch Logs. Recomendamos habilitar os logs do Apache Airflow no nível INFO do Agendador para visualizar os logs recebidos para requirements.txt.

Esta imagem mostra como habilitar registros no INFO nível.

Visualização de registros no console CloudWatch de registros

Você pode visualizar os registros do Apache Airflow para o Agendador ao agendar seus fluxos de trabalho e analisar sua pasta dags. As etapas a seguir descrevem como abrir o grupo de registros do Scheduler no MWAA console da Amazon e visualizar os registros do Apache Airflow no CloudWatch console Logs.

Para visualizar os logs de um requirements.txt
  1. Abra a página Ambientes no MWAA console da Amazon.

  2. Escolha um ambiente.

  3. Escolha grupo de logs de agendador do Airflow no painel Monitoramento.

  4. Escolha o log requirements_install_ip em Fluxos de logs.

  5. Você deve ver a lista de pacotes que foram instalados no ambiente em /usr/local/airflow/.local/bin. Por exemplo:

    Collecting appdirs==1.4.4 (from -r /usr/local/airflow/.local/bin (line 1)) Downloading https://files.pythonhosted.org/packages/3b/00/2344469e2084fb28kjdsfiuyweb47389789vxbmnbjhsdgf5463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl Collecting astroid==2.4.2 (from -r /usr/local/airflow/.local/bin (line 2))
  6. Analise a lista de pacotes e verifique se algum deles encontrou algum erro durante a instalação. Se algo der errado, é possível ver um erro semelhante ao seguinte:

    2021-03-05T14:34:42.731-07:00 No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4)) No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))

Como visualizar erros na IU do Apache Airflow

Você também pode verificar sua IU do Apache Airflow para identificar se um erro pode estar relacionado a outro problema. O erro mais comum que você pode encontrar com o Apache Airflow na Amazon MWAA é:

Broken DAG: No module named x

se você ver esse erro na IU do Apache Airflow, provavelmente está faltando uma dependência necessária em seu arquivo requirements.txt.

Fazendo login no Apache Airflow

Você precisa de Política de acesso ao Apache Airflow UI: A mazonMWAAWeb ServerAccess permissões para sua AWS conta em AWS Identity and Access Management (IAM) para visualizar sua interface do Apache Airflow.

Para acessar sua IU do Apache Airflow
  1. Abra a página Ambientes no MWAA console da Amazon.

  2. Escolha um ambiente.

  3. Escolha Abrir a IU do Airflow.

Cenários de exemplo de requirements.txt

Você pode misturar e combinar diferentes formatos no seu requirements.txt. O exemplo a seguir usa uma combinação das diferentes formas de instalar extras.

exemplo Extras em PyPi .org e em um público URL

Você precisa usar a --index-url opção ao especificar pacotes de PyPi .org, além de pacotes em um repositório públicoURL, como um repositório personalizado compatível com PEP 503. URLs

aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib