View a markdown version of this page

Gestione delle dipendenze Python in requirements.txt - Amazon Managed Workflows for Apache Airflow

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Gestione delle dipendenze Python in requirements.txt

Questo argomento descrive come installare e gestire le dipendenze Python in un requirements.txt file per un ambiente Amazon Managed Workflows for Apache Airflow.

Test dei DAG utilizzando l'utilità CLI di Amazon MWAA

  • L'utilità di interfaccia a riga di comando (CLI) replica localmente un ambiente Amazon Managed Workflows for Apache Airflow.

  • L'interfaccia a riga di comando crea localmente un'immagine del contenitore Docker simile a un'immagine di produzione Amazon MWAA. Puoi utilizzarla per eseguire un ambiente Apache Airflow locale per sviluppare e testare DAG, plug-in personalizzati e dipendenze prima della distribuzione su Amazon MWAA.

  • Per eseguire la CLI, fai riferimento a aws-mwaa-docker-images on. https://github.com/aws/amazon-mwaa-docker-images GitHub

Installazione delle PyPi.org dipendenze Python utilizzando Requirements File Format

La sezione seguente descrive i diversi modi per installare le dipendenze Python in base al Requirements File Format. PyPi.org https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format

Opzione uno: dipendenze Python dal Python Package Index

La sezione seguente descrive come specificare le dipendenze Python dal Python Package Index in un file. requirements.txt

Apache Airflow v3
  1. Esegui il test localmente. Aggiungete altre librerie in modo iterativo per trovare la giusta combinazione di pacchetti e delle relative versioni, prima di creare un requirements.txt file. Per eseguire l'utilità CLI di Amazon MWAA, consulta aws-mwaa-docker-images su. https://github.com/aws/amazon-mwaa-docker-images GitHub

  2. Consulta gli extra del pacchetto Apache Airflow. Per accedere a un elenco dei pacchetti installati per Apache Airflow v3 su Amazon MWAA, consulta aws-mwaa-docker-images sul sito Web. requirements.txt GitHub

  3. Aggiungi una dichiarazione di vincoli. Aggiungete il file dei vincoli per il vostro ambiente Apache Airflow v3 nella parte superiore del file. requirements.txt I file dei vincoli di Apache Airflow specificano le versioni del provider disponibili al momento del rilascio di Apache Airflow.

    Nel seguente esempio, sostituiscili {environment-version} con il numero di versione del tuo ambiente e {Python-version} con la versione di Python compatibile con il tuo ambiente.

    Per informazioni sulla versione di Python compatibile con l'ambiente Apache Airflow in uso, fate riferimento a Versioni di Apache Airflow.

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

    Se il file dei vincoli determina che il xyz==1.0 pacchetto non è compatibile con altri pacchetti nel tuo ambiente, non pip3 install riesce a impedire l'installazione di librerie incompatibili nell'ambiente. Se l'installazione non riesce per qualsiasi pacchetto, puoi accedere ai log degli errori per ogni componente di Apache Airflow (scheduler, worker e webserver) nel flusso di log corrispondente su Logs. CloudWatch Per ulteriori informazioni sui tipi di log, fare riferimento a. Accesso ai log Airflow in Amazon CloudWatch

  4. Pacchetti Apache Airflow. Aggiungete gli extra del pacchetto e la versione (). == Questo aiuta a prevenire l'installazione di pacchetti con lo stesso nome, ma con una versione diversa, nel tuo ambiente.

    apache-airflow[package-extra]==2.5.1
  5. Librerie Python. Aggiungi il nome del pacchetto e la versione (==) nel tuo requirements.txt file. Questo aiuta a prevenire l'applicazione automatica di PyPi.org un futuro aggiornamento interrotto.

    library == version
    Esempio Boto3 e psycopg2-binary

    Questo esempio è fornito a scopo dimostrativo. Le librerie boto e psycopg2-binary sono incluse nell'installazione di base per Apache Airflow v3 e non devono essere specificate in un file. requirements.txt

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

    Se viene specificato un pacchetto senza una versione, Amazon MWAA installa la versione più recente del pacchetto da. PyPi.org Questa versione può entrare in conflitto con altri pacchetti nel tuo. requirements.txt

Apache Airflow v2
  1. Prova localmente. Aggiungete altre librerie in modo iterativo per trovare la giusta combinazione di pacchetti e delle relative versioni, prima di creare un requirements.txt file. Per eseguire l'utilità CLI di Amazon MWAA, consulta aws-mwaa-docker-images su. https://github.com/aws/amazon-mwaa-docker-images GitHub

  2. Consulta gli extra del pacchetto Apache Airflow. Per accedere a un elenco dei pacchetti installati per Apache Airflow v2 su Amazon MWAA, accedi a aws-mwaa-docker-images sul sito web. requirements.txt GitHub

  3. Aggiungi una dichiarazione di vincoli. Aggiungete il file dei vincoli per il vostro ambiente Apache Airflow v2 nella parte superiore del file. requirements.txt I file dei vincoli di Apache Airflow specificano le versioni del provider disponibili al momento del rilascio di Apache Airflow.

    A partire da Apache Airflow v2.7.2, il file dei requisiti deve includere una dichiarazione. --constraint Se non fornisci un vincolo, Amazon MWAA ne specificherà uno per assicurarti che i pacchetti elencati nei tuoi requisiti siano compatibili con la versione di Apache Airflow in uso.

    Nel seguente esempio, sostituiscilo {environment-version} con il numero di versione del tuo ambiente e {Python-version} con la versione di Python compatibile con il tuo ambiente.

    Per informazioni sulla versione di Python compatibile con l'ambiente Apache Airflow in uso, fate riferimento a Versioni di Apache Airflow.

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

    Se il file dei vincoli determina che il xyz==1.0 pacchetto non è compatibile con altri pacchetti nel tuo ambiente, non pip3 install riesce a impedire l'installazione di librerie incompatibili nell'ambiente. Se l'installazione non riesce per qualsiasi pacchetto, puoi accedere ai log degli errori per ogni componente di Apache Airflow (scheduler, worker e webserver) nel flusso di log corrispondente su Logs. CloudWatch Per ulteriori informazioni sui tipi di log, fare riferimento a. Accesso ai log Airflow in Amazon CloudWatch

  4. Pacchetti Apache Airflow. Aggiungete gli extra del pacchetto e la versione (). == Questo aiuta a prevenire l'installazione di pacchetti con lo stesso nome, ma con una versione diversa, nel tuo ambiente.

    apache-airflow[package-extra]==2.5.1
  5. Librerie Python. Aggiungi il nome del pacchetto e la versione (==) nel tuo requirements.txt file. Questo aiuta a prevenire l'applicazione automatica di PyPi.org un futuro aggiornamento interrotto.

    library == version
    Esempio Boto3 e psycopg2-binary

    Questo esempio è fornito a scopo dimostrativo. Le librerie boto e psycopg2-binary sono incluse nell'installazione base di Apache Airflow v2 e non devono essere specificate in un file. requirements.txt

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

    Se viene specificato un pacchetto senza una versione, Amazon MWAA installa la versione più recente del pacchetto da. PyPi.org Questa versione può entrare in conflitto con altri pacchetti nel tuo. requirements.txt

Opzione due: Python wheels (.whl)

Una ruota Python è un formato di pacchetto progettato per fornire librerie con artefatti compilati. I pacchetti wheel, utilizzati come metodo per installare le dipendenze in Amazon MWAA, offrono diversi vantaggi:

  • Installazione più rapida: i file WHL vengono copiati nel contenitore come un singolo file ZIP e quindi installati localmente, senza dover scaricare ciascuno di essi.

  • Meno conflitti: è possibile determinare in anticipo la compatibilità delle versioni dei pacchetti. Di conseguenza, non è necessario pip elaborare in modo ricorsivo le versioni compatibili.

  • Maggiore resilienza: con le librerie ospitate esternamente, i requisiti a valle possono cambiare, con conseguente incompatibilità di versione tra i contenitori in un ambiente Amazon MWAA. Non dipendendo da una fonte esterna per le dipendenze, ogni contenitore ha le stesse librerie indipendentemente da quando viene creato l'istanza di ciascun contenitore.

Consigliamo i seguenti metodi per installare le dipendenze Python da un archivio Python wheel () nel tuo. .whl requirements.txt

Utilizzo del file plugins.zip su un bucket Amazon S3

Lo scheduler, i worker e il server web di Apache Airflow (per Apache Airflow v2.2.2 e versioni successive) cercano plug-in personalizzati durante l'avvio nel contenitore Fargate gestito per il tuo ambiente all'indirizzo. AWS/usr/local/airflow/plugins/* Questo processo inizia prima dell'avvio delle dipendenze di Amazon MWAA per Python e dell'avvio del servizio Apache Airflow. pip3 install -r requirements.txt Un plugins.zip file può essere utilizzato per tutti i file che non desideri vengano modificati continuamente durante l'esecuzione dell'ambiente o per i quali non desideri concedere l'accesso agli utenti che scrivono DAG. Ad esempio, i file della libreria Python, i file PEM dei certificati e i file YAML di configurazione.

La sezione seguente descrive come installare una ruota presente nel plugins.zip file sul bucket Amazon S3.

  1. Scarica i file WHL necessari Puoi utilizzarli pip download con quelli esistenti requirements.txt su Amazon MWAA aws-mwaa-docker-images o con un altro contenitore Amazon Linux 2 per risolvere e scaricare i file wheel Python necessari.

    pip3 download -r "$AIRFLOW_HOME/dags/requirements.txt" -d "$AIRFLOW_HOME/plugins" cd "$AIRFLOW_HOME/plugins" zip "$AIRFLOW_HOME/plugins.zip" *
  2. requirements.txtSpecifica il percorso nel tuo. Specifica la cartella dei plugin nella parte superiore del tuo file requirements.txt --find-links e indica di pip non installarli da altre fonti utilizzando --no-index, come elencato nel codice seguente:

    --find-links /usr/local/airflow/plugins --no-index
    Esempio ruota in requirements.txt

    L'esempio seguente presuppone che tu abbia caricato la ruota in un plugins.zip file nella radice del tuo bucket Amazon S3. Ad esempio:

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

    Amazon MWAA recupera la numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl ruota dalla plugins cartella e la installa nel tuo ambiente.

Utilizzo di un file WHL ospitato su un URL

La sezione seguente descrive come installare una ruota ospitata su un URL. L'URL deve essere accessibile pubblicamente o accessibile dall'interno dell'Amazon VPC personalizzato specificato per il tuo ambiente Amazon MWAA.

  • Fornisci un URL. Fornisci l'URL di una ruota nel tuorequirements.txt.

    Esempio archivio della ruota su un URL pubblico

    L'esempio seguente scarica una ruota da un sito pubblico.

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

    Amazon MWAA recupera la ruota dall'URL specificato e la installa nel tuo ambiente.

    Nota

    Gli URL non sono accessibili dai server Web privati che installano i requisiti in Amazon MWAA v2.2.2 e versioni successive.

Creazione di un file WHL da un DAG

Se disponi di un ambiente di rete privato che utilizza Apache Airflow v2.2.2 o successivo e non riesci a installare i requisiti perché il tuo ambiente non ha accesso a repository esterni, puoi utilizzare il seguente DAG per prendere i requisiti Amazon MWAA esistenti e impacchettarli su 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://amzn-s3-demo-bucket/{S3_KEY}" )

Dopo aver eseguito il DAG, usa questo nuovo file come Amazon MWAA, opzionalmente, impacchettato con altri plug-in. plugins.zip Quindi, aggiorna il file preceduto da e senza aggiungerlo. requirements.txt --find-links /usr/local/airflow/plugins --no-index --constraint

Questo metodo è possibile utilizzare per utilizzare le stesse librerie offline.

Opzione tre: dipendenze Python ospitate su un repository conforme privato PyPi/PEP-503

La sezione seguente descrive come installare un Apache Airflow extra ospitato su un URL privato con autenticazione.

  1. Aggiungete il nome utente e la password come opzioni di configurazione di Apache Airflow. Ad esempio:

    • foo.user : YOUR_USER_NAME

    • foo.pass : YOUR_PASSWORD

  2. Crea il tuo file. requirements.txt Sostituisci i segnaposto nell'esempio seguente con il tuo URL privato e il nome utente e la password che hai aggiunto come opzioni di configurazione di Apache Airflow. Ad esempio:

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
  3. Aggiungete eventuali librerie aggiuntive al file. requirements.txt Ad esempio:

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

Abilitazione dei log sulla console Amazon MWAA

Il ruolo di esecuzione per il tuo ambiente Amazon MWAA richiede l'autorizzazione per inviare i log a Logs. CloudWatch Per aggiornare le autorizzazioni di un ruolo di esecuzione, fai riferimento a. Ruolo di esecuzione di Amazon MWAA

È possibile abilitare i log di Apache Airflow a livelloINFO, WARNINGERROR, o. CRITICAL Quando scegli un livello di registro, Amazon MWAA invia i log per quel livello e per tutti i livelli di gravità più elevati. Ad esempio, se abiliti i log a INFO livello, Amazon MWAA invia INFO i log e WARNINGERROR, e i livelli di log a CRITICAL Logs. CloudWatch Consigliamo di abilitare i log di Apache Airflow al INFO livello in modo che lo scheduler possa accedere ai log ricevuti per. requirements.txt

Questa immagine illustra come abilitare i log a livello INFO.

Accesso ai log sulla console CloudWatch Logs

È possibile accedere ai log di Apache Airflow per lo scheduler, pianificare i flussi di lavoro e analizzare la cartella. dags I passaggi seguenti descrivono come aprire il gruppo di log per lo scheduler sulla console Amazon MWAA e accedere ai log di Apache Airflow sulla console Logs. CloudWatch

Per accedere ai log di un file requirements.txt
  1. Apri la pagina Ambienti sulla console Amazon MWAA.

  2. Scegli un ambiente.

  3. Scegliete il gruppo di log di Airflow Scheduler nel riquadro Monitoraggio.

  4. Scegli l'requirements_install_ipaccesso Log streams.

  5. Consulta l'elenco dei pacchetti installati nell'ambiente all'indirizzo/usr/local/airflow/.local/bin. Ad esempio:

    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. Controlla l'elenco dei pacchetti e verifica se qualcuno di questi ha riscontrato un errore durante l'installazione. Se qualcosa è andato storto, puoi ricevere un errore simile al seguente:

    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))

Errori di accesso nell'interfaccia utente di Apache Airflow

Puoi anche controllare l'interfaccia utente di Apache Airflow per identificare se un errore è correlato a un altro problema. L'errore più comune che puoi riscontrare con Apache Airflow su Amazon MWAA è:

Broken DAG: No module named x

Se trovi questo errore nell'interfaccia utente di Apache Airflow, probabilmente nel tuo file manca una dipendenza obbligatoria. requirements.txt

Accedi ad Apache Airflow

Per accedere all'interfaccia utente di Apache Account AWS Airflow sono Politica di accesso all'interfaccia utente di Apache Airflow: AmazonMWAAWebServerAccess necessarie le autorizzazioni necessarie per l'accesso AWS Identity and Access Management (IAM).

Per accedere alla tua interfaccia utente di Apache Airflow
  1. Apri la pagina Ambienti sulla console Amazon MWAA.

  2. Scegli un ambiente.

  3. Scegli Open Airflow UI.

Esempi di scenari requirements.txt

Puoi combinare e abbinare diversi formati nel tuorequirements.txt. L'esempio seguente utilizza una combinazione dei diversi modi per installare gli extra.

Esempio Extra attivi PyPi.org e URL pubblico

È necessario utilizzare l'--index-urlopzione quando si specificano i pacchetti da PyPi.org, oltre ai pacchetti su un URL pubblico, ad esempio gli URL dei repository personalizzati conformi a PEP 503.

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