Eseguire 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 chiave 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

Durante l'esecuzione nell'ambiente flessibile, puoi utilizzare una combinazione di variabili di ambiente e del servizio metadati Compute Engine per ottenere informazioni sull'applicazione:

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

La seguente funzionalità non è direttamente disponibile:

  • 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 alla tua applicazione durante il deployment.
  • Allo stesso modo, 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 ottenere i valori, come descritto in Definizione delle variabili di ambiente.

Per ulteriori dettagli sulle variabili di ambiente, consulta le pagine della 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 al di fuori dell'ambiente di richiesta. In genere, non è necessario utilizzare strumenti diversi dagli strumenti di threading o multielaborazione integrati nella lingua.

Archivio BLOB

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

Per ulteriori informazioni, consulta Utilizzo di Cloud Storage

Funzionalità

Non esiste una funzionalità simile al servizio Capabilities disponibile al di fuori dell'ambiente standard.

Websocket

L'ambiente flessibile di App Engine supporta i socket web. Per ulteriori informazioni, consulta Creazione di connessioni permanenti con WebSocket.

Firestore in modalità Datastore (Datastore)

Puoi accedere al Datastore ovunque ti trovi 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 dal fatto che utilizzi le librerie App Engine, le librerie client di Google Cloud o se chiami direttamente l'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 repository Cloud NDB.

Sebbene le librerie client di Cloud NDB e Datastore siano supportate in Python 2 e 3 e funzionino per l'ambiente standard di App Engine o per l'ambiente flessibile, oltre che per le app non App Engine, il loro scopo principale è aiutare gli sviluppatori Python 2 a abbandonare i servizi legacy in bundle come App Engine ndb. Cloud NDB ha l'obiettivo aggiuntivo di preservare l'esperienza utente di NDB.

Per ulteriori informazioni, consulta Utilizzo di 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 Google Immagini ha anche fornito una funzionalità per evitare richieste dinamiche all'applicazione gestendo il ridimensionamento delle immagini con un URL di pubblicazione. Se vuoi una funzionalità simile, puoi generare in anticipo le immagini ridimensionate e caricarle in Cloud Storage per la pubblicazione. In alternativa, puoi utilizzare un servizio di rete CDN (Content Delivery Network) di terze parti che offre il ridimensionamento delle immagini.

Per ulteriori risorse, consulta le seguenti guide:

Logging

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

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

Per maggiori dettagli, vedi Scrittura dei log delle applicazioni.

Mail

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

Per maggiori dettagli, vedi Inviare 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 per Redis.

Moduli

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

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

Puoi inoltre utilizzare l'API App Engine Admin per deploy e gestire i servizi e le versioni della tua applicazione.

Per ulteriori dettagli sulle variabili di ambiente, consulta le pagine della 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 manualmente la multitenancy. Per avere istanze di servizi completamente isolate, puoi creare nuovi progetti in modo programmatico utilizzando l'API Cloud Resource Manager e accedere alle risorse tra progetti.

OAuth

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

Remoto

Il servizio API Remote non è applicabile all'ambiente flessibile. Anche la maggior parte dei servizi di supporto, come Datastore, che sono accessibili dall'ambiente flessibile è accessibile da qualsiasi luogo.

Al momento il servizio di ricerca non è disponibile al di fuori dell'ambiente flessibile. Puoi ospitare qualsiasi database di ricerca a testo intero come ElasticSearch su Compute Engine e accedervi sia dall'ambiente standard sia dall'ambiente flessibile.

Socket

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

Coda di attività

Per utilizzare il servizio push della coda di attività al di fuori dell'ambiente standard di prima generazione, puoi utilizzare Google Tasks.

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

Recupero URL

Il servizio di recupero URL non è disponibile nell'ambiente flessibile. Tuttavia, non esistono limitazioni della sandbox, pertanto la tua app può utilizzare qualsiasi libreria HTTP per ottenere la funzionalità di recupero degli URL.

Se usi Python, ti consigliamo di usare le richieste. 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. Nell'ambiente flessibile puoi utilizzare qualsiasi meccanismo di autenticazione basato su HTTP, ad esempio:

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

Passaggi successivi

Per una panoramica delle principali differenze 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.