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 inviarle. Il recupero URL non gestisce le richieste dalla libreria requests
a meno che tu non le abiliti 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 URL Fetch
ma hai comunque bisogno di funzionalità simili, devi eseguire la migrazione di tali richieste per utilizzare
una libreria Python standard come la
libreria requests
.
Differenze principali tra il recupero di URL e le librerie Python standard
Il limite di dimensioni e le quote per le richieste gestite tramite il recupero degli URL sono diversi dalle quote e dalle quote per le richieste che non sono gestite dall'URL Fetch.
Con URL Fetch, quando la tua app invia una richiesta a un'altra app di App Engine, URL Fetch aggiunge l'intestazione della richiesta
X-Appengine-Inbound-Appid
per asserire l'identità dell'app. L'app che riceve la richiesta può utilizzare l'identità per determinare se è in grado di elaborarla.Questa intestazione è disponibile solo nelle richieste inviate dalla tua app se utilizza il recupero URL. App Engine rimuove l'intestazione se tu o una terza parte la aggiungete a una richiesta.
Per informazioni su asserzione e verifica dell'identità senza recupero di URL, consulta la sezione Migrazione dell'identità delle app ai token ID OIDC.
Per un esempio di come utilizzare l'intestazione della richiesta per verificare l'identità dell'app chiamante quando vengono inviate richieste tra le app di App Engine, consulta la sezione Esempio di richiesta da App Engine a App Engine.
Puoi utilizzare lo strumento 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 è necessario aggiornare ogni richiesta effettuata dal codice per specificare un timeout.
Panoramica del processo di migrazione
Se la tua app utilizza API URL Fetch per effettuare richieste, aggiorna il tuo codice per utilizzare una libreria Python standard. Ti consigliamo di specificare un timeout per ogni richiesta.
Verifica 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 dell'app.
Sostituzione delle API URL Fetch 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 libreria Richieste crea un file
requirements.txt
nella stessa cartella del tuo fileapp.yaml
e aggiungi la seguente riga:requests==2.24.0
Per la compatibilità con Python 2, è consigliabile bloccare la libreria
requests
nella versione 2.24.0. Quando esegui il deployment dell'app, App Engine scarica tutte le dipendenze definite nel filerequirements.txt
.Per lo sviluppo locale, consigliamo di installare dipendenze in un ambiente virtuale come venv.
Cerca il tuo codice per qualsiasi utilizzo del modulo
google.appengine.api.urlfetch
e aggiorna il codice per utilizzare la tua libreria Python.
Fare richieste HTTPS semplici
L'esempio seguente mostra come inviare una richiesta HTTPS standard utilizzando la libreria requests
:
Esecuzione di richieste HTTPS asincrone
L'esempio seguente mostra come inviare una richiesta HTTPS asincrona utilizzando la
libreria requests
:
Test in locale
Se hai aggiornato le 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 impedire a Recupero URL di gestire le richieste 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 URL per gestire le richieste inviate dalla libreria
requests
, puoi rimuovere le richiesteAppEngineAdapter
dalla tua app.Ad esempio, rimuovi
requests_toolbelt.adapters.appengine
dal fileappengine_config.py
erequests_toolbelt.adapters.appengine.monkeypatch()
dai file Python.
Tieni presente che, anche se esegui l'override del metodo di recupero URL come descritto nei passaggi precedenti, la tua app può comunque utilizzare direttamente l'API URL Fetch.
Deployment dell'applicazione
Quando tutto è pronto per il deployment dell'app, devi:
-
Visualizza la pagina Quote di App Engine in Google Cloud Console per verificare che l'app non effettui chiamate all'API Url Fetch.
Se l'app viene eseguita senza errori, utilizza la suddivisione del traffico per aumentare lentamente il traffico per l'app aggiornata. Monitora attentamente l'app per individuare eventuali problemi prima di instradare più traffico all'app aggiornata.