Esegui la migrazione dei servizi dall'ambiente standard all'ambiente flessibile

L'ambiente flessibile di App Engine non fornisce le librerie API presenti nell'SDK di App Engine. Se decidi di eseguire la migrazione della tua applicazione dall'ambiente standard di App Engine all'ambiente flessibile, devi aggiornare il codice per utilizzare i servizi e le API disponibili in tutti gli ambienti Google Cloud.

Consulta le sezioni seguenti per istruzioni su come eseguire la migrazione di API e servizi legacy specifici in bundle dall'ambiente standard all'ambiente flessibile.

Differenze tra l'ambiente standard e l'ambiente flessibile

Oltre alle differenze principali descritte qui, i percorsi con /_ah/ non sono bloccati nell'ambiente flessibile. Se la tua app nell'ambiente standard utilizza percorsi con /_ah/ per accedere a servizi specifici, consulta la sezione relativa al servizio appropriato di seguito.

Identità app

Quando esegui l'applicazione nell'ambiente flessibile, puoi utilizzare una combinazione di variabili di ambiente e il servizio di metadati di Compute Engine per ottenere informazioni sulla tua applicazione:

Informazioni sull'applicazione Come accedere
ID applicazione / progetto La variabile di ambiente GOOGLE_CLOUD_PROJECT o la risorsa /project/project-id nel server di metadati
Nome host predefinito Metodo apps.get dell'API App Engine Admin
Nome account di servizio La risorsa /instance/service-accounts nel server di metadati
Token di accesso OAuth 2.0 La risorsa /instances/service-accounts nel server di metadati. Consulta la documentazione sull'autenticazione con le credenziali dell'account di servizio di Compute Engine

Le seguenti funzionalità non sono disponibili direttamente:

  • Non esiste un bucket Cloud Storage predefinito per il tuo progetto. Per utilizzare un bucket nella tua applicazione, puoi creare un bucket Cloud Storage e utilizzare l'ID progetto come nome del bucket. Puoi quindi utilizzare la variabile di ambiente GOOGLE_CLOUD_PROJECT nella tua applicazione come nome del bucket.
  • Non puoi firmare i blob con l'account di servizio predefinito. Puoi risolvere il problema utilizzando l'API Identity and Access Management (IAM) o fornendo una chiave privata dell'account di servizio all'applicazione durante il deployment.
  • Analogamente, non esiste un'API integrata per ottenere certificati pubblici per la verifica delle firme. Tuttavia, i certificati pubblici di ogni account di servizio sono disponibili all'indirizzo https://www.googleapis.com/robot/v1/metadata/x509/{service account email}.
  • Tieni presente che se utilizzi il runtime Java, le API SystemProperty di App Engine non sono disponibili per l'ambiente flessibile di App Engine. Tuttavia, puoi impostare le variabili di ambiente in app.yaml e utilizzare System.env per recuperare i valori, come descritto in Definire le variabili di ambiente.

Per ulteriori dettagli sulle variabili di ambiente, consulta le pagine di panoramica del runtime o la pagina di riferimento di app.yaml.

Thread in background

Poiché l'ambiente flessibile non ha limitazioni della sandbox, puoi creare thread o processi esterni all'ambiente della richiesta. In genere non è necessario utilizzare altro oltre agli strumenti di threading o multiprocessing integrati del linguaggio.

Archivio BLOB

L'utilizzo del servizio Blobstore è stato in gran parte sostituito sia nell'ambiente standard che in quello flessibile da Cloud Storage. Utilizza le librerie client Google Cloud per archiviare e recuperare i dati in Cloud Storage.

Per ulteriori informazioni, consulta Utilizzare Cloud Storage.

Funzionalità

Non è disponibile alcuna funzionalità simile al servizio Capabilities al di fuori dell'ambiente standard.

Websocket

L'ambiente flessibile di App Engine supporta i websocket. Per ulteriori informazioni, consulta la sezione Creare connessioni persistenti con WebSocket.

Firestore in modalità Datastore (Datastore)

Puoi accedere a Datastore da qualsiasi luogo utilizzando l'API Datastore. Utilizza le librerie client di Google Cloud per archiviare e recuperare i dati da Datastore.

Gli stessi dati di Datastore sono disponibili indipendentemente dall'utilizzo delle librerie App Engine, delle librerie client di Google Cloud o dalla chiamata diretta dell'API.

Se utilizzi la libreria Python ndb e preferisci l'accesso a Datastore in stile NDB, ti invitiamo a eseguire la migrazione a Cloud NDB. Per ulteriori informazioni, consulta il repo Cloud NDB.

Sebbene entrambe le librerie client Cloud NDB e Datastore siano supportate su Python 2 e 3 e funzionino per l'ambiente standard o ambiente flessibile di App Engine, nonché per le app non App Engine, il loro scopo principale è aiutare gli sviluppatori di Python 2 a passare dai servizi legacy pacchettizzati come App Engine ndb. Cloud NDB ha l'obiettivo aggiuntivo di preservare l'esperienza utente di NDB.

Per ulteriori informazioni, consulta Utilizzare Datastore.

Immagini

Il servizio Immagini non è disponibile al di fuori dell'ambiente standard. Tuttavia, puoi pubblicare facilmente le immagini direttamente dalla tua applicazione o direttamente da Cloud Storage.

Se devi eseguire l'elaborazione delle immagini, puoi installare e utilizzare qualsiasi libreria di elaborazione delle immagini, ad esempio:

Il servizio Immagini forniva anche la funzionalità per evitare richieste dinamiche alla tua applicazione gestendo il ridimensionamento delle immagini utilizzando un URL di pubblicazione. Se vuoi una funzionalità simile, puoi generare in anticipo le immagini ridimensionate e caricarle su Cloud Storage per la pubblicazione. In alternativa, puoi utilizzare un servizio di rete CDN (Content Delivery Network) di terze parti che offra il ridimensionamento delle immagini.

Per altre risorse, consulta le seguenti guide:

Logging

Come nell'ambiente standard, la registrazione funziona automaticamente nell'ambiente flessibile. Tuttavia, i log vengono raccolti in un formato diverso. I log non verranno raggruppati per richieste e i log di stdout e stderr vengono raccolti separatamente.

Se vuoi un maggiore controllo sui log delle applicazioni, la possibilità di raggruppare i log e di registrare metadati aggiuntivi, puoi utilizzare l'API Cloud Logging direttamente con le librerie client Google Cloud.

Per maggiori dettagli, vedi Scrivere log delle applicazioni.

Posta

Il servizio App Engine Mail non è disponibile al di fuori dell'ambiente standard. Per inviare email, dovrai utilizzare un provider di posta di terze parti come SendGrid, Mailgun o Mailjet. Tutti questi servizi offrono API per l'invio di email da applicazioni in esecuzione ovunque.

Per maggiori dettagli, vedi Invio di messaggi con servizi di terze parti.

Memcache

Il servizio Memcache non è disponibile nell'ambiente flessibile di App Engine. Per memorizzare nella cache i dati dell'applicazione, utilizza Memorystore for Redis.

Moduli

L'API Modules non è disponibile al di fuori dell'ambiente standard. Tuttavia, puoi utilizzare una combinazione di variabili di ambiente e l'API App Engine Admin per ottenere informazioni sui servizi in esecuzione della tua applicazione e modificarli:

Informazioni sul servizio Come accedere
Nome servizio attuale Variabile di ambiente GAE_SERVICE
Versione attuale del servizio Variabile di ambiente GAE_VERSION
ID istanza attuale Variabile di ambiente GAE_INSTANCE
Nome host predefinito Metodo apps.get dell'API App Engine Admin
Elenco di servizi Metodo apps.services.list dell'API App Engine Admin
Elenco delle versioni di un servizio Metodo apps.services.versions.list dell'API App Engine Admin
Versione predefinita per un servizio, incluse eventuali suddivisioni del traffico Metodo apps.services.get dell'API App Engine Admin
Elenco di istanze in esecuzione per una versione Metodo apps.services.versions.instances.list dell'API App Engine Admin

Puoi anche utilizzare l'API App Engine Admin per deploy e gestire servizi e versioni nella tua applicazione.

Per ulteriori dettagli sulle variabili di ambiente, consulta le pagine di panoramica del runtime o la pagina di riferimento di app.yaml.

Spazi dei nomi

Al di fuori dell'ambiente standard, solo Datastore supporta direttamente la multitenancy. Per gli altri servizi, dovrai gestire la multitenancy manualmente. Per avere istanze di servizi completamente isolate, puoi creare nuovi progetti in modo programmatico utilizzando l'API Cloud Resource Manager e accedere alle risorse di più progetti.

OAuth

Il servizio OAuth non è disponibile nell'ambiente flessibile. Se devi verificare i token OAuth 2.0, puoi farlo con il metodo oauth2.tokeninfo dell'API OAuth 2.0.

Remoto

Il servizio API remota non è applicabile all'ambiente flessibile. La maggior parte dei servizi di supporto, come Datastore, accessibili dall'ambiente flessibile è accessibile anche da qualsiasi luogo.

Il servizio di ricerca non è al momento disponibile al di fuori dell'ambiente flessibile. Puoi ospitare qualsiasi database di ricerca full-text, ad esempio Apache Solr su Compute Engine o Elasticsearch Service su Elastic Cloud, ed accedervi sia dall'ambiente standard che da quello flessibile.

Socket

L'ambiente flessibile non ha limitazioni della sandbox, quindi puoi aprire e utilizzare normalmente i socket in uscita.

Coda di attività

Per utilizzare il servizio push Task Queue al di fuori dell'ambiente standard di prima generazione, puoi utilizzare Google Tasks.

In molti casi in cui potresti utilizzare code pull, ad esempio per mettere in coda attività o messaggi che verranno estratti ed elaborati da worker separati, Pub/Sub può essere una buona alternativa in quanto offre funzionalità e garanzie di recapito simili.

Recupero URL

Il servizio di recupero dell'URL non è disponibile nell'ambiente flessibile. Tuttavia, poiché non ci sono limitazioni della sandbox, la tua app può utilizzare qualsiasi libreria HTTP per ottenere la funzionalità di recupero dell'URL.

Se utilizzi Python, ti consigliamo di utilizzare Requests. Se utilizzi Java, ti consigliamo di utilizzare la libreria client HTTP di Google per Java o OkHttp.

Utenti

Il servizio Utenti non è disponibile al di fuori dell'ambiente standard. Puoi utilizzare qualsiasi meccanismo di autenticazione basato su HTTP nell'ambiente flessibile, ad esempio:

Tieni presente che, poiché il servizio Utenti non è disponibile, non è possibile utilizzare appengine-web.xml per Java o app.yaml per altri ambienti di runtime per rendere gli URL accessibili solo agli amministratori. Dovrai gestire questa logica all'interno della tua applicazione.

Passaggi successivi

Per una panoramica delle differenze principali tra l'ambiente flessibile e l'ambiente standard con linee guida per le applicazioni che utilizzano entrambi gli ambienti, consulta Ambiente flessibile di App Engine per gli utenti dell'ambiente standard.