Per impostazione predefinita, il runtime Python 2.7
utilizza il servizio di recupero URL
per gestire le richieste HTTP(S) in uscita, anche se utilizzi le librerie Python urllib
, urllib2
o httplib
per inviare tali richieste. Il recupero URL non gestisce le richieste provenienti dalla libreria di requests
, a meno che non le
attivi esplicitamente.
Il runtime Python 3 non richiede un servizio intermediario per gestire le richieste in uscita. Se vuoi eseguire la migrazione dall'utilizzo delle API di recupero URL, ma hai comunque bisogno di funzionalità simili, devi eseguire la migrazione di queste richieste per utilizzare una libreria Python standard come la libreria requests
.
Principali differenze tra il recupero dell'URL e le librerie Python standard
Il limite di dimensioni e le quote per le richieste gestite dal recupero URL sono diversi dalle limitazioni di dimensione e dalle quote per le richieste che non sono gestite dal recupero URL.
Con Recupero URL, quando la tua app invia una richiesta a un'altra app App Engine, il recupero URL aggiunge l'intestazione della richiesta
X-Appengine-Inbound-Appid
per rivendicare l'identità dell'app. L'app che riceve la richiesta può utilizzare l'identità per determinare se elaborare la richiesta.Questa intestazione è disponibile solo nelle richieste inviate dalla tua app se utilizza il recupero dell'URL. App Engine rimuove l'intestazione se tu o una terza parte la aggiungete a una richiesta.
Per informazioni sull'asserzione e la verifica dell'identità senza utilizzare il recupero dell'URL, consulta la pagina Eseguire la migrazione dell'identità delle app ai token ID OIDC.
Per un esempio di come utilizzare l'intestazione della richiesta per verificare l'identità dell'applicazione chiamante quando vengono inviate richieste tra le applicazioni App Engine, vedi l'esempio di richiesta App Engine ad App Engine.
Puoi utilizzare lo strumento di recupero URL per impostare un timeout predefinito per tutte le richieste. La maggior parte delle librerie Python 3 come
requests
eurllib
imposta il timeout predefinito suNone
, quindi devi aggiornare ogni richiesta effettuata dal codice per specificare un timeout.
Panoramica del processo di migrazione
Se l'app utilizza le API di recupero URL per effettuare richieste, aggiorna il codice per utilizzare una libreria Python standard. Ti consigliamo di specificare un timeout per ogni richiesta.
Testa le richieste in uscita nel server di sviluppo locale.
Configura la tua app in modo da ignorare il recupero dell'URL durante l'esecuzione in App Engine.
Esegui il deployment della tua app.
Sostituzione delle API di recupero URL con una libreria Python
Se non utilizzi già una libreria Python standard per inviare richieste in uscita, scegli una libreria e aggiungila alle dipendenze dell'app.
Ad esempio, per utilizzare la libra richieste, crea un file
requirements.txt
nella stessa cartella del fileapp.yaml
e aggiungi la seguente riga:requests==2.24.0
Per la compatibilità con Python 2, ti consigliamo di bloccare la libreria
requests
alla versione 2.24.0. Quando esegui il deployment della tua app, App Engine scarica tutte le dipendenze definite nel filerequirements.txt
.Per lo sviluppo locale, ti consigliamo di installare le dipendenze in un ambiente virtuale, ad esempio venv.
Cerca nel codice qualsiasi utilizzo del modulo
google.appengine.api.urlfetch
e aggiorna il codice per utilizzare la tua libreria Python.
Effettuare semplici richieste HTTPS
L'esempio seguente mostra come effettuare una richiesta HTTPS standard utilizzando la libreria requests
:
Esecuzione di richieste HTTPS asincrone
L'esempio seguente mostra come effettuare una richiesta HTTPS asincrona utilizzando la libreria requests
:
Test in locale
Se hai aggiornato una delle richieste in uscita, esegui l'app nel server di sviluppo locale e verifica che le richieste abbiano esito positivo.
Ignorare il recupero dell'URL
Per interrompere il recupero delle richieste di URL quando esegui il deployment della tua app in App Engine:
Nel file
app.yaml
, imposta la variabile di ambienteGAE_USE_SOCKETS_HTTPLIB
su qualsiasi valore. Il valore può essere qualsiasi valore, inclusa una stringa vuota. Ad esempio:env_variables: GAE_USE_SOCKETS_HTTPLIB : ''
Se hai attivato il recupero degli URL per gestire le richieste inviate dalla libreria
requests
, puoi rimuovere le richiesteAppEngineAdapter
dalla tua app.Ad esempio, rimuovi
requests_toolbelt.adapters.appengine
dal tuoappengine_config.py
file erequests_toolbelt.adapters.appengine.monkeypatch()
dai tuoi file Python.
Tieni presente che, anche se ignori il recupero dell'URL come descritto nei passaggi precedenti, la tua app può comunque utilizzare direttamente l'API URL Fetch.
Deployment dell'app
Quando è tutto pronto per il deployment dell'app, devi:
-
Visualizza la pagina Quote di App Engine nella console Google Cloud per verificare che la tua app non stia effettuando chiamate API Fetch.
Se l'app viene eseguita senza errori, utilizza la suddivisione del traffico per aumentare il traffico in modo lento per la tua app aggiornata. Monitora attentamente l'app per rilevare eventuali problemi prima di indirizzare più traffico all'app aggiornata.