Come posso installare librerie nel mio ambiente Amazon MWAA?

Ultimo aggiornamento: 02/03/2022

Voglio installare librerie nel mio ambiente Amazon Managed Workflows for Apache Airflow (Amazon MWAA).

Breve descrizione

Quando crei un ambiente Amazon MWAA, alcuni pacchetti/distribuzioni essenziali sono inclusi nell'installazione di base di Apache Airflow. Puoi installare pacchetti diversi da quelli inclusi nell'installazione di base utilizzando il file requirements.txt o plugins.zip nel tuo ambiente Amazon MWAA.

Per impostazione predefinita, i pacchetti vengono installati in Amazon MWAA da repository pubblici (PyPI.org). Puoi anche installare pacchetti da repository ospitati privatamente, ad esempio JFROG e AWS CodeArtifact.

Risoluzione

Puoi installare librerie dal repository pubblico predefinito (PyPi.org) o da repository privati. Scegli l'approccio più adatto al tuo caso d'uso.

Installazione da repository pubblici

Per installare pacchetti dal repository pubblico predefinito, puoi semplicemente aggiungere il nome e la versione del pacchetto (==) nel file requirements.txt. Quindi, carica il file requirements.txt nel bucket Amazon S3. Specifica la versione di questo file nel campo Requirements file (File dei requisiti) quando aggiorni l'ambiente utilizzando la console Amazon MWAA.

Installazione da repository privati o locali

Se nel tuo ambiente non disponi dell'accesso a Internet per installare pacchetti dal repository pubblico, puoi installare librerie/pacchetti personalizzati dal repository PyPI ospitato privatamente. Per farlo, scarica tutti i pacchetti e includili nel repository locale che potrebbe essere JFROG, AWS CodeArtifact o qualsiasi altro repository. Dopo aver aggiunto i pacchetti al repository, utilizza l'URL del repository per importarli. Per importare librerie private, specifica l'URL del repository (–index-url) nel file requirements.txt.

Usa una delle seguenti opzioni per installare un pacchetto (esempio: redis==3.5.3) dal repository locale.

Se utilizzi un repository privato, aggiorna il file requirements.txt per includere quanto segue:

--trusted-host artifactory-aws.example-org.com
--index-url https://artifactory-aws.example-org.com/artifactory/api/pypi/pypi-virtual/simple
redis==3.5.3

Se stai usando il repository JFROG, aggiorna il file requirements.txt per includere quanto segue:

--index-url=https://${AIRFLOW__JFROG__USER}:${AIRFLOW__JFROG__PASS}@<server-name>.jfrog.io/artifactory/api/pypi/<repository>/simple
redis==3.5.3

Puoi anche includere –index-url in un file di testo invece di aggiungere direttamente l'URL nel file requirements.txt. Puoi specificare –index-url in un file di testo (ad esempio, codeartifact.txt), e quindi caricare codeartifact.txt nel bucket S3 nella cartella/dags.

Quindi, aggiorna il file requirements.txt per includere il percorso del file codeartifact.txt:

-r /usr/local/airflow/dags/codeartifact.txt
<br>redis==3.5.3

Consulta Amazon MWAA for Analytics workshop - Private PyPi repository per ulteriori informazioni su come procedere:

Nota: questa soluzione utilizza il file codeartifact.txt per specificare –index-url.

  • Crea un repository PyPI privato con una connessione a una fonte esterna utilizzando AWS CodeArtifact.
  • Effettua il provisioning di un ambiente MWAA privato senza una connessione a Internet pubblica e sfrutta gli endpoint VPC per connetterti ad AWS CodeArtifact.
  • Crea una funzione Lambda per mantenere aggiornato il token di autorizzazione per il repository PyPI privato.

Installazione di pacchetti

Per installare pacchetti dal repository pubblico o privato, aggiorna l'ambiente per includere il file requirement.txt:

  1. Crea una copia locale del file requirements.txt e caricala nel bucket Amazon Simple Storage Service (Amazon S3) (esempio: s3: //example-bucket/requirements.txt) utilizzando la console Amazon S3 o AWS Command Line Interface (AWS CLI).
    Nota: ricordati di attivare il controllo delle versioni sul bucket S3.
  2. Per modificare l'ambiente, apri la pagina Environments (Ambienti) nella console di Amazon MWAA.
  3. Seleziona l'ambiente dall'elenco, quindi scegli Edit (Modifica).
    Nota: se stai caricando il file requirements.txt nel tuo ambiente per la prima volta, segui i passaggi 4, 5 e 6. Se hai già caricato il file e lo hai aggiornato di recente, segui solo il passaggio 6.
  4. Nella pagina Specify details (Specifica dettagli), nella sezione DAG code in Amazon S3 (Codice DAG in Amazon S3), scegli Browse S3 (Sfoglia S3) nel campo Requirements file - optional (File dei requisiti - facoltativo).
  5. Seleziona il file requirements.txt nel bucket Amazon S3, quindi scegli Choose (Scegli).
  6. Per Choose a version (Scegli una versione) nel campo Requirements file - optional (File dei requisiti - opzionale), seleziona l'ultima versione che hai caricato.
  7. Scegli Next (Avanti) e poi scegli Save (Salva).

Puoi iniziare a utilizzare i nuovi pacchetti subito dopo l'aggiornamento dell'ambiente.

L'ambiente impiega dai 15 ai 20 minuti per essere aggiornato. Dopo l'aggiornamento dell'ambiente, vengono installati i pacchetti elencati nel file requirements.txt. Se le dipendenze non vengono installate entro 10 minuti, il servizio AWS Fargate potrebbe scadere e tentare di ripristinare l'ambiente a uno stato stabile.

Risoluzione dei problemi relativi al processo di installazione

In caso di problemi durante l'installazione di questi pacchetti, puoi visualizzare il file di log (requirements_install_ip) dai gruppi di log di Apache Airflow Worker/Scheduler.

Se il file di log contiene errori per i pacchetti, potresti riprovare a installare i pacchetti aggiungendo una versione diversa del pacchetto. Come best practice, è consigliabile aggiungere il prefisso al file requirements.txt con il file constraints.

Esempio:

--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-example-Airflow-version/constraints-3.7.txt"

Nota: assicurati di sostituire example-Airflow-version con il numero di versione del tuo ambiente.

Importante: come best practice, è consigliabile testare le dipendenze di Python utilizzando l'utilità CLI di Amazon MWAA (aws-mwaa-local-runner) prima di installare i pacchetti nell'ambiente Amazon MWAA.