Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
In questa pagina viene descritto come installare i pacchetti Python per nell'ambiente Cloud Composer.
Informazioni sui pacchetti PyPI preinstallati e personalizzati nelle immagini di Cloud Composer
Le immagini Cloud Composer contengono PyPI preinstallati e personalizzati .
I pacchetti PyPI preinstallati sono pacchetti inclusi nella l'immagine Cloud Composer del tuo ambiente. Ciascuna L'immagine di Cloud Composer contiene Pacchetti PyPI che sono specifici per la tua versione di Cloud Composer e Airflow.
I pacchetti PyPI personalizzati sono pacchetti che puoi installare nel tuo ambiente oltre ai pacchetti preinstallati.
Opzioni per gestire i pacchetti PyPI per gli ambienti Cloud Composer
Opzione | Da utilizzare se |
---|---|
Installa da PyPI | Il modo predefinito per installare i pacchetti nel tuo ambiente |
Installare da un repository con un indirizzo IP pubblico | Il pacchetto è ospitato in un repository di pacchetti diverso da PyPI. Questo repository ha un indirizzo IP pubblico |
Installare da un repository Artifact Registry | Il pacchetto è ospitato in un repository Artifact Registry |
Installazione da un repository nella rete del progetto | Il tuo ambiente non ha accesso a internet pubblico. Il pacchetto è ospitata in un repository di pacchetti nella rete del progetto. |
Installare come libreria Python locale |
Impossibile trovare il pacchetto in PyPI e nella libreria
non ha dipendenze esterne, come dist-packages . |
Installare un plug-in | Il pacchetto fornisce funzionalità specifiche per i plug-in, ad esempio la modifica l'interfaccia web di Airflow. |
PythonVirtualenvOperator | Non vuoi che il pacchetto venga installato per tutti i worker Airflow oppure le dipendenze sono in conflitto con i pacchetti preinstallati. Il pacchetto disponibile in PyPI e non ha dipendenze esterne. |
KubernetesPodOperator e operatori GKE |
Hai bisogno di dipendenze esterne che non possono essere installate da pip , come dist-packages , o che si trovano su un server pip interno. Questo
richiede più configurazione e manutenzione. Consideralo solo se altre
non funzionano. |
Prima di iniziare
- Devi disporre di un ruolo che possa attivare le operazioni di aggiornamento dell'ambiente. Inoltre, l'account di servizio dell'ambiente deve avere un ruolo con autorizzazioni sufficienti per eseguire operazioni di aggiornamento. Per maggiori informazioni per ulteriori informazioni, consulta Controllo dell'accesso.
- Se il tuo ambiente è protetto da un perimetro dei Controlli di servizio VPC, prima di installare le dipendenze PyPI devi concedere identità utente aggiuntive con accesso ai servizi protetti dal perimetro di servizio e attivare il supporto per un repository PyPI privato.
- I requisiti devono rispettare il formato specificato nella PEP-508 in cui ogni requisito è specificato in minuscolo e consiste nel pacchetto un nome con extra facoltativi e specificatori di versione.
Gli aggiornamenti delle dipendenze PyPI generano immagini Docker in Artifact Registry.
Se un conflitto di dipendenze causa la mancata riuscita dell'aggiornamento, il tuo ambiente continua a essere eseguito con le dipendenze esistenti. Se l'operazione riesce, puoi iniziare a utilizzare le dipendenze Python appena installate nei DAG.
Visualizza l'elenco dei pacchetti PyPI
È possibile ottenere l'elenco dei pacchetti per il tuo ambiente in diversi formati.
Visualizzare i pacchetti preinstallati
Per visualizzare l'elenco dei pacchetti preinstallati per il tuo ambiente, consulta l'elenco dei pacchetti per l'immagine Cloud Composer del tuo ambiente.
Visualizza tutti i pacchetti
Per visualizzare tutti i pacchetti (preinstallati e personalizzati) nel tuo ambiente:
gcloud
Il seguente comando gcloud CLI restituisce il risultato
il comando python -m pip list
per un worker Airflow nel tuo ambiente.
Puoi utilizzare l'argomento --tree
per ottenere il risultato dell'oggetto
Comando python -m pipdeptree --warn
.
gcloud beta composer environments list-packages \
ENVIRONMENT_NAME \
--location LOCATION
Sostituisci:
ENVIRONMENT_NAME
con il nome dell'ambiente.LOCATION
con la regione in cui si trova l'ambiente.
Visualizza pacchetti PyPI personalizzati
Console
Nella console Google Cloud, vai alla pagina Ambienti.
Nell'elenco degli ambienti, fai clic sul nome del tuo ambiente. Si apre la pagina Dettagli ambiente.
Apri la scheda Pacchetti PyPI.
gcloud
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION \
--format="value(config.softwareConfig.pypiPackages)"
Sostituisci:
ENVIRONMENT_NAME
con il nome dell'ambiente.LOCATION
con la regione in cui si trova l'ambiente.
Installare pacchetti personalizzati in un ambiente Cloud Composer
Questa sezione descrive i diversi metodi per installare pacchetti personalizzati nel tuo completamente gestito di Google Cloud.
Installa pacchetti da PyPI
Un pacchetto può essere installato da Indice pacchetti Python se non ha o conflitti con pacchetti preinstallati.
Per aggiungere, aggiornare o eliminare le dipendenze Python per l'ambiente:
Console
Nella console Google Cloud, vai alla pagina Ambienti.
Nell'elenco degli ambienti, fai clic sul nome dell'ambiente. Si apre la pagina Dettagli ambiente.
Vai alla scheda Pacchetti PyPI.
Fai clic su "Modifica".
Fai clic su Aggiungi pacchetto.
Nella sezione Pacchetti PyPI, specifica i nomi dei pacchetti, con ed extra di versione.
Ad esempio:
scikit-learn
scipy
,>=0.13.3
nltk
,[machine_learning]
Fai clic su Salva.
gcloud
L'interfaccia a riga di comando gcloud ha diversi argomenti per lavorare con i pacchetti PyPI personalizzati:
--update-pypi-packages-from-file
sostituisce tutti i componenti personalizzati esistenti Pacchetti PyPI con i pacchetti specificati. I pacchetti che non specifichi vengono rimossi.--update-pypi-package
aggiorna o installa un pacchetto.--remove-pypi-packages
rimuove i pacchetti specificati.--clear-pypi-packages
rimuove tutti i pacchetti.
Requisiti di installazione da un file
Il file requirements.txt
deve avere ogni
specificatore dei requisiti su una riga distinta.
Ad esempio:
scipy>=0.13.3
scikit-learn
nltk[machine_learning]
Aggiorna l'ambiente e specifica il file requirements.txt
nell'argomento --update-pypi-packages-from-file
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-packages-from-file requirements.txt
Sostituisci:
ENVIRONMENT_NAME
con il nome dell'ambiente.LOCATION
con la regione in cui si trova l'ambiente.
Installazione di un pacchetto
Aggiorna l'ambiente e specifica il pacchetto, la versione e gli extra in
l'argomento --update-pypi-package
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-package PACKAGE_NAMEEXTRAS_AND_VERSION
Sostituisci:
ENVIRONMENT_NAME
con il nome dell'ambiente.LOCATION
con la regione in cui si trova l'ambiente.PACKAGE_NAME
con il nome del pacchetto.EXTRAS_AND_VERSION
con l'indicatore facoltativo versione e extra. A ometti versioni ed extra, specifica un valore vuoto.
Esempio:
gcloud composer environments update example-environment \
--location us-central1 \
--update-pypi-package "scipy>=0.13.3"
Rimuovere i pacchetti
Aggiorna l'ambiente e specifica i pacchetti che vuoi eliminare nell'argomento --remove-pypi-packages
:
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--remove-pypi-packages PACKAGE_NAMES
Sostituisci:
ENVIRONMENT_NAME
con il nome dell'ambiente.LOCATION
con la regione in cui si trova l'ambiente.PACKAGE_NAMES
con un elenco di pacchetti separati da virgole.
Esempio:
gcloud composer environments update example-environment \
--location us-central1 \
--remove-pypi-packages scipy,scikit-learn
API
Creare una richiesta API environments.patch
.
In questa richiesta:
Nel parametro
updateMask
, specifica la maschera:- Utilizza la maschera
config.softwareConfig.pypiPackages
per sostituire tutti i pacchetti esistenti con i pacchetti specificati. I pacchetti che non specifichi vengono eliminati. - Usa
config.softwareConfig.envVariables.PACKAGE_NAME
per aggiungere o aggiornare un pacchetto specifico. Per aggiungere o aggiornare diversi pacchetti, specificare diverse maschere con virgole.
- Utilizza la maschera
Nel corpo della richiesta, specifica pacchetti e valori per le versioni e gli extra:
{ "config": { "softwareConfig": { "pypiPackages": { "PACKAGE_NAME": "EXTRAS_AND_VERSION" } } } }
Sostituisci:
PACKAGE_NAME
con il nome del pacchetto.EXTRAS_AND_VERSION
con l'indicatore facoltativo versione e extra. A ometti versioni ed extra, specifica un valore vuoto.- Per aggiungere più di un pacchetto, aggiungi voci aggiuntive per i pacchetti
a
pypiPackages
.
Esempio:
// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.softwareConfig.pypiPackages.EXAMPLE_PACKAGE,
// config.softwareConfig.pypiPackages.ANOTHER_PACKAGE
{
"config": {
"softwareConfig": {
"pypiPackages": {
"EXAMPLE_PACKAGE": "",
"ANOTHER_PACKAGE": ">=1.10.3"
}
}
}
}
Terraform
Il blocco pypi_packages
nel blocco software_config
specifica i pacchetti.
resource "google_composer_environment" "example" {
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
software_config {
pypi_packages = {
PACKAGE_NAME = "EXTRAS_AND_VERSION"
}
}
}
}
Sostituisci:
ENVIRONMENT_NAME
con il nome dell'ambiente.LOCATION
con la regione in cui si trova l'ambiente.PACKAGE_NAME
con il nome del pacchetto.EXTRAS_AND_VERSION
con il selettore facoltativo di versione ed extra. A ometti versioni ed extra, specifica un valore vuoto.- Per aggiungere più di un pacchetto, inserisci altre voci per i pacchetti.
a
pypi_packages
.
Esempio:
resource "google_composer_environment" "example" {
name = "example-environment"
region = "us-central1"
config {
software_config {
pypi_packages = {
scipy = ">=1.10.3"
scikit-learn = ""
nltk = "[machine_learning]"
}
}
}
}
Installa pacchetti da un repository pubblico
Puoi installare i pacchetti ospitati in altri repository con un indirizzo IP pubblico.
I pacchetti devono essere configurati correttamente per consentire l'installazione dello strumento pip
predefinito.
Per eseguire l'installazione da un repository di pacchetti il cui indirizzo è pubblico:
Crea un file pip.conf e includi le seguenti informazioni nel file, se applicabile:
- URL del repository (nel parametro
index-url
) - Credenziali di accesso per il repository
- Opzioni di installazione di
pip
non predefinite
Esempio:
[global] index-url=https://example.com/
- URL del repository (nel parametro
(Facoltativo) In alcuni casi, potresti voler recuperare i pacchetti da più repository, ad esempio quando il repository pubblico contiene alcuni pacchetti specifici che vuoi installare e vuoi installare tutti gli altri pacchetti da PyPI:
- Configura un repository virtuale Artifact Registry.
- Aggiungi la configurazione per più repository (incluso PyPI, se necessario)
e definisci l'ordine in cui
pip
esegue la ricerca nei repository. - Specifica l'URL del repository virtuale nel parametro
index-url
.
Carica il file pip.conf nella cartella
/config/pip/
nel bucket del tuo ambiente.Installa i pacchetti usando uno dei metodi disponibili.
Installare i pacchetti da un repository Artifact Registry
Puoi archiviare i pacchetti in un repository Artifact Registry nel tuo progetto e configurare l'ambiente per l'installazione da lì.
Configura i ruoli e le autorizzazioni:
L'account di servizio del tuo ambiente deve avere Ruolo
iam.serviceAccountUser
.Assicurati che l'account di servizio Cloud Build abbia autorizzazioni di lettura dal repository Artifact Registry.
Se il tuo ambiente ha limitato l'accesso ad altri servizi nel progetto, ad esempio se utilizzi i Controlli di servizio VPC:
Assegna le autorizzazioni per accedere al repository Artifact Registry per l'account di servizio dell'ambiente anziché Account di servizio Cloud Build.
Assicurati che la connettività al repository Artifact Registry sia configurata nel progetto.
Per installare pacchetti PyPI personalizzati da un repository Artifact Registry:
Crea un file pip.conf e includi le seguenti informazioni nel file, se applicabile:
- URL del repository Artifact Registry (nel parametro
index-url
) - Credenziali di accesso per il repository
- Opzioni di installazione di
pip
non predefinite
Per un repository Artifact Registry, aggiungi
/simple/
al repository URL:[global] index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/
- URL del repository Artifact Registry (nel parametro
(Facoltativo) In alcuni casi, potresti voler recuperare pacchetti da più file ad esempio quando il repository Artifact Registry contiene ad alcuni pacchetti specifici che desideri installare tutti gli altri pacchetti di PyPI:
- Configura un repository virtuale Artifact Registry.
- Aggiungi la configurazione per più repository (incluso PyPI, se necessario)
e definisci l'ordine in cui
pip
esegue la ricerca nei repository. - Specifica l'URL del repository virtuale nel parametro
index-url
.
Carica questo file pip.conf nella cartella
/config/pip/
nel bucket del tuo ambiente. Ad esempio:gs://us-central1-example-bucket/config/pip/pip.conf
.Installa i pacchetti utilizzando uno dei metodi disponibili.
Installa pacchetti da un repository privato
Puoi ospitare un repository privato nella rete del progetto e configurare per installare i pacchetti Python.
Configura ruoli e autorizzazioni:
L'account di servizio per l'ambiente Cloud Composer deve hanno il ruolo
iam.serviceAccountUser
.Se installi pacchetti PyPI personalizzati da un repository nella rete del tuo progetto e questo repository non ha un indirizzo IP pubblico:
Assegna le autorizzazioni per accedere a questo repository agli l'account di servizio.
Assicurati che la connettività a questo repository sia configurata nel progetto.
Per installare i pacchetti da un repository privato ospitato nella rete del progetto:
Crea un file pip.conf e includi le seguenti informazioni nel file, se applicabile:
- Indirizzo IP del repository nella rete del progetto
- Credenziali di accesso per il repository
- Opzioni di installazione di
pip
non predefinite
Esempio:
[global] index-url=https://192.0.2.10/
(Facoltativo) In alcuni casi, potresti voler recuperare i pacchetti da più repository, ad esempio quando il repository privato contiene alcuni pacchetti specifici che vuoi installare e vuoi installare tutti gli altri pacchetti da PyPI:
- Configura un repository virtuale Artifact Registry.
- Aggiungi la configurazione per più repository (incluso PyPI, se necessario)
e definisci l'ordine in cui
pip
esegue la ricerca nei repository. - Specifica l'URL del repository virtuale nel parametro
index-url
.
Carica il file pip.conf nella cartella
/config/pip/
nel bucket del tuo ambiente. Ad esempio:gs://us-central1-example-bucket/config/pip/pip.conf
.Installa i pacchetti usando uno dei metodi disponibili.
Installa una libreria Python locale
Per installare una libreria Python interna o locale:
Inserisci le dipendenze in una sottodirectory della cartella
dags/
nel bucket del tuo ambiente. Per importare un modulo da una sottodirectory, ogni sottodirectory nel percorso del modulo deve contenere un__init__.py
file indicatore del pacchetto.Nell'esempio seguente, la dipendenza è
coin_module.py
:dags/ use_local_deps.py # A DAG file. dependencies/ __init__.py coin_module.py
Importa la dipendenza dal file di definizione del DAG.
Ad esempio:
Utilizzare pacchetti che dipendono da librerie di oggetti condivisi
Alcuni pacchetti PyPI dipendono dalle librerie a livello di sistema. Sebbene Cloud Composer non supporti le librerie di sistema, puoi utilizzare le seguenti opzioni:
Utilizzare KubernetesPodOperator. Imposta l'immagine dell'operatore su una l'immagine build. Se si verificano pacchetti che non funzionano durante l'installazione a causa a una dipendenza dal sistema non soddisfatta, utilizza questa opzione.
Carica le librerie di oggetti condivisi nel bucket del tuo ambiente. Se il tuo PyPI i pacchetti sono stati installati correttamente, ma non in fase di runtime. Utilizza questa opzione.
- Trova manualmente le librerie di oggetti condivisi per la dipendenza PyPI (un file .so).
- Carica le librerie di oggetti condivise nella cartella
/plugins
del tuo del bucket dell'ambiente. - Imposta la seguente variabile di ambiente:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins
Installare pacchetti in ambienti IP privati
Questa sezione spiega come installare i pacchetti in ambienti IP privati.
A seconda di come configuri il progetto, l'ambiente potrebbe non avere accesso a internet pubblico.
Ambiente IP privato con accesso a internet pubblico
Se il tuo ambiente IP privato può accedere a internet pubblico, puoi installare i pacchetti utilizzando le opzioni per gli ambienti IP pubblici:
- Installa da PyPI. In questo caso, non è richiesta alcuna configurazione speciale. Segui la procedura descritta in Installa un pacchetto da PyPI.
- Installa da un repository con un indirizzo IP pubblico. Segui la procedura descritta in Installa un pacchetto da un repository privato.
- Installa da un repository PyPI privato ospitato nella rete del progetto.
Ambiente IP privato senza accesso a internet
Se il tuo ambiente IP privato non ha accesso a internet pubblico, puoi installare i pacchetti in uno dei seguenti modi:
- Utilizza un repository PyPI privato ospitato nella rete del progetto.
- Utilizza una VM server proxy nella rete del progetto per connetterti
in un repository PyPI sulla rete internet pubblica. Specifica l'indirizzo del proxy nel
file
/config/pip/pip.conf
nel bucket dell'ambiente. - Utilizza un repository Artifact Registry come unica fonte di pacchetti. A tal fine, ridefinisci il parametro
index-url
, come descritto. - Se il criterio di sicurezza consente l'accesso agli indirizzi IP esterni dalla rete VPC, puoi attivare l'installazione di pacchetti dai repository sulla rete internet pubblica configurando Cloud NAT.
- Inserisci le dipendenze Python nella cartella
/dags
del bucket del tuo ambiente per installarle come librerie locali. Potrebbe non essere un un'opzione valida se l'albero delle dipendenze è grande.
Installa in un ambiente IP privato in base alle limitazioni relative alle località delle risorse
Mantenere il progetto in linea con la restrizione sulla località delle risorse requisiti impediscono l'uso di alcuni strumenti. In particolare, Cloud Build non può essere utilizzato per l'installazione di pacchetti, impedendo l'accesso diretto dei repository sulla rete internet pubblica.
Per installare le dipendenze di Python in un ambiente di questo tipo, segui le indicazioni per gli ambienti IP privati senza accesso a internet.
Installare una dipendenza Python in un ambiente IP privato in un perimetro dei Controlli di servizio VPC
La protezione del progetto con un Perimetro Controlli di servizio VPC comporta ulteriori limitazioni di sicurezza. In particolare, Cloud Build non può essere utilizzato per l'installazione di pacchetti, impedendo l'accesso diretto dei repository sulla rete internet pubblica.
Per installare le dipendenze Python per un ambiente IP privato all'interno di un perimetro, segui le indicazioni per gli ambienti IP privati senza accesso a internet.
Passaggi successivi
- Risoluzione dei problemi relativi all'installazione del pacchetto
- Risoluzione dei problemi relativi ad aggiornamenti e upgrade