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 queste richieste. Il recupero URL non gestisce le richieste dalla libreria requests, a meno che non la attivi esplicitamente.
Il runtime Python 3 non ha bisogno di un servizio intermedio 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
requests library.
Differenze principali tra il recupero URL e le librerie Python standard
Il limite di dimensioni e le quote per le richieste gestite dal recupero URL sono diversi dal limite di dimensioni e dalle quote per le richieste non gestite dal recupero URL.
Con il 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-Appidper asserire l'identità dell'app. L'app che riceve la richiesta può utilizzare l'identità per determinare se deve elaborare la richiesta.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 come asserire e verificare l'identità senza utilizzare il recupero URL, vedi 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 le richieste vengono inviate tra le app App Engine, vedi l'esempio di richiesta da App Engine ad App Engine.
Puoi utilizzare il recupero URL per impostare un timeout predefinito per tutte le richieste. La maggior parte delle librerie Python 3, come
requestseurllib, imposta il timeout predefinito suNone, quindi devi aggiornare ogni richiesta effettuata dal codice per specificare un timeout.
Panoramica del processo di migrazione
Se la tua app utilizza le API di recupero URL per effettuare richieste, aggiorna il codice in modo che utilizzi una libreria Python standard. Ti consigliamo di specificare un timeout per ogni richiesta.
Testa le richieste in uscita nel server di sviluppo locale.
Configura l'app in modo che ignori il recupero URL quando viene eseguita in App Engine.
Esegui il deployment dell'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 libreria Requests crea un
requirements.txtfile nella stessa cartella del tuoapp.yamlfile e aggiungi la seguente riga:requests==2.24.0Per la compatibilità con Python 2, ti consigliamo di bloccare la libreria
requestsalla versione 2.24.0. Quando esegui il deployment dell'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 come venv.
Cerca nel codice qualsiasi utilizzo del modulo
google.appengine.api.urlfetche aggiorna il codice in modo che utilizzi la libreria Python.
Effettuare semplici richieste HTTPS
L'esempio seguente mostra come effettuare una richiesta HTTPS standard utilizzando la libreria requests:
Effettuare richieste HTTPS asincrone
L'esempio seguente mostra come effettuare una richiesta HTTPS asincrona utilizzando la libreria requests:
Testare localmente
Se hai aggiornato una delle richieste in uscita, esegui l'app nel server di sviluppo locale e verifica che le richieste vadano a buon fine.
Ignorare il recupero URL
Per impedire al recupero URL di gestire le richieste quando esegui il deployment dell'app in App Engine:
Nel file
app.yaml, imposta la variabile di ambienteGAE_USE_SOCKETS_HTTPLIBsu 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
requestslibrary, puoi rimuovere RequestsAppEngineAdapterdalla tua app.Ad esempio, rimuovi
requests_toolbelt.adapters.appenginedal fileappengine_config.pyerequests_toolbelt.adapters.appengine.monkeypatch()dai file Python.
Tieni presente che, anche se ignori il recupero URL come descritto nei passaggi precedenti, la tua app può comunque utilizzare direttamente l'API di recupero URL.
Eseguire il deployment dell'app
Quando è tutto pronto per eseguire il deployment dell'app:
-
Visualizza la pagina Quote di App Engine nella Google Cloud console per verificare che l'app non stia effettuando chiamate all'API di recupero URL.
Se l'app viene eseguita senza errori, utilizza la suddivisione del traffico per aumentare gradualmente il traffico per l'app aggiornata. Monitora attentamente l'app per verificare la presenza di problemi prima di indirizzare altro traffico all'app aggiornata.