Eseguire la migrazione dai servizi in bundle legacy

La maggior parte delle funzionalità fornite dai servizi in bundle legacy è ora fornita dalle librerie client Cloud. Per ulteriori informazioni, consulta le alternative consigliate elencate di seguito.

Se la migrazione a una soluzione non in bundle non è un'opzione per il tuo progetto, potresti essere in grado di continuare a utilizzare i servizi in bundle legacy nelle tue appPython 3come fallback. Questo approccio ti offre la flessibilità di passare a servizi separati in un secondo momento del ciclo di migrazione.

Dopo la migrazione dai servizi integrati legacy, puoi continuare a utilizzare App Engine o eseguire la migrazione a Cloud Run. Cloud Run è progettato per migliorare l'esperienza di App Engine e incorpora molte delle migliori funzionalità sia dell'ambiente standard sia dell'ambiente flessibile. Per confrontare le funzionalità e capire come eseguire la migrazione, consulta la guida al confronto tra App Engine e Cloud Run.

Google Cloud fornisce prodotti autonomi che offrono funzionalità simili a quelle di alcuni dei servizi in bundle nel runtime Python 2. Per i servizi in bundle che non sono disponibili come prodotti separati in Google Cloud, ad esempio l'elaborazione delle immagini, la ricerca e la messaggistica, questa guida consiglia fornitori di terze parti o altre soluzioni alternative.

Questa pagina introduce il percorso di migrazione per ogni servizio in bundle.

Informazioni sulle autorizzazioni di Google Cloud

Poiché l'app di cui è stata eseguita la migrazione e i servizi Google Cloud che utilizza non vengono più eseguiti nello stesso ambiente "sandbox", l'app ha bisogno dell'autorizzazione per accedere a ogni servizio. Ad esempio, per interagire con Firestore in modalità Datastore (Datastore) o Cloud Tasks, la tua app deve fornire le credenziali di un account autorizzato ad accedere a questi servizi.

Per impostazione predefinita, le app nel runtime standard di App Engine forniscono le credenziali del service account predefinito di App Engine, che è autorizzato ad accedere ai database nello stesso progetto dell'app.

Se si verifica una delle seguenti condizioni, devi utilizzare una tecnica di autenticazione alternativa che fornisca esplicitamente le credenziali:

  • La tua app e il database Memorystore si trovano in progettiGoogle Cloud diversi.

  • Hai modificato i ruoli assegnati al account di servizio predefinito di App Engine.

Per informazioni sulle tecniche di autenticazione alternative, consulta Configurazione dell'autenticazione per applicazioni di produzione da server a server.

Autenticazione per lo sviluppo locale

Per sviluppare o testare la tua app localmente, ti consigliamo di creare e utilizzare un account di servizio. Non utilizzare il service account predefinito di App Engine, in quanto dispone di un livello elevato di autorizzazioni per tutti gli elementi del progetto. Crea e utilizza invece un account di servizio con il livello più basso di autorizzazioni necessarie per la tua attività specifica di sviluppo e test.

Per istruzioni sulla configurazione di un account di servizio e sul collegamento all'app, vedi Ottenere e fornire manualmente le credenziali delaccount di servizioe account.

Installazione delle librerie client

Il modo più semplice per utilizzare i servizi Google Cloud da un'app Python è installare la libreria client Python del servizio.I servizi Google Cloud forniscono anche interfacce JSON REST e altre interfacce. I passaggi per installare le librerie client nel runtime di App Engine sono diversi per le app Python 2 e Python 3.

Installazione di librerie per app Python 2

Per installare una libreria da utilizzare per la tua app quando viene eseguita nel runtime Python 2:

  1. Crea una directory per archiviare le librerie di terze parti, ad esempio lib/.

  2. Crea un file requirements.txt nella stessa cartella del file app.yaml e aggiungi il nome di una libreria client.

    Ad esempio, il seguente file può essere utilizzato per installare le librerie per Pub/Sub e Cloud Tasks:

    google-cloud-pubsub
    google-cloud-tasks
    
  3. Utilizza pip install per installare le librerie nella cartella che hai creato. Ad esempio:

    pip install -t lib -r requirements.txt
  4. Nel file app.yaml dell'app, specifica le librerie Google RPC e setuptools richieste e la libreria SSL facoltativa nella sezione libraries:

    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

    Alcune librerie client non richiedono la libreria SSL. Se non includi la libreria SSL per una libreria client che la richiede, vedrai un errore SSL in Esplora log quando la tua app riceve una richiesta.

  5. Crea un file appengine_config.py nella stessa cartella del file app.yaml se non ne hai già uno. Aggiungi quanto segue al tuo file appengine_config.py:

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)

    Assicurati di utilizzare il modulopkg_resources, che garantisce che la tua app utilizzi la distribuzione corretta delle librerie client.

    Il file appengine_config.py nell'esempio precedente presuppone che la cartella lib si trovi nella directory di lavoro corrente. Se non puoi garantire che lib si trovi sempre nella directory di lavoro corrente, specifica il percorso completo della cartella lib. Ad esempio:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  6. Esegui il deployment dell'app.

App Engine carica tutte le librerie nella directory specificata nel file appengine_config.py nel runtime Python 2.

Installazione di librerie per app Python 3

Per installare una libreria da utilizzare per la tua app quando viene eseguita nel runtime Python 3:

  1. Aggiungi il nome della libreria al file requirements.txt della tua app. Ad esempio:

    google-cloud-ndb
    
  2. Esegui il deployment dell'app.

App Engine carica automaticamente tutte le librerie elencate nel file requirements.txt nel runtime Python 3.

Percorsi di migrazione per i servizi in bundle di App Engine

Archivio BLOB

Per archiviare e recuperare i dati, utilizza Cloud Storage tramite le librerie client di Cloud. Per iniziare, consulta Utilizzo di Cloud Storage e la guida Eseguire la migrazione da Blobstore a Cloud Storage. Per simulare questa migrazione, aggiungi l'utilizzo di Blobstore a un'app di esempio e migra a Cloud Storage.

Datastore

Se la tua app Python 2 utilizza NDB per interagire con Datastore, esegui la migrazione alla libreria Cloud NDB. Cloud NDB è pensato principalmente come strumento di transizione per la migrazione delle app Python 2. Consigliamo alle app Python 3 di utilizzare la libreria client della modalità Datastore.

Per maggiori dettagli, vedi Migrazione a Cloud NDB. Per simulare questa migrazione con un'app di esempio, consulta Migrazione da App Engine NDB a Cloud NDB.

Immagini

Puoi pubblicare immagini da Cloud Storage, pubblicarle direttamente o utilizzare una rete CDN (Content Delivery Network) di terze parti.

Il servizio App Engine Images forniva anche 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 le immagini ridimensionate in anticipo 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.

Logging

Ti consigliamo di aggiornare l'app per utilizzare Cloud Logging, che supporta funzionalità come la visualizzazione dei log in Esplora log, il download dei log, il filtraggio dei messaggi in base alla gravità e la correlazione dei messaggi dell'app con richieste specifiche. In alternativa, se preferisci la semplicità all'accuratezza dei dati, puoi scrivere log strutturati in stdout o stderr. Per saperne di più, consulta Scrittura e visualizzazione dei log e Migrazione a Cloud Logging.

Posta

Per migliorare la sicurezza delle email e garantire un recapito affidabile di email ad alto volume, ti consigliamo di eseguire la migrazione dall'API Mail legacy a un servizio email basato su SMTP, ad esempio SendGrid, Mailgun o Mailjet.

Memcache

Per memorizzare nella cache i dati dell'applicazione, utilizza Memorystore for Redis.

Per maggiori dettagli, vedi Eseguire la migrazione di Memcache a Memorystore. Per simulare questa migrazione, aggiungi l'utilizzo di Memcache a un'app di esempio ed esegui la migrazione a Memorystore for Redis.

Per le app che utilizzano Memcache solo per ridurre la latenza delle richieste NDB (o Cloud NDB), utilizza il supporto integrato di Cloud NDB per Redis anziché Memcache o Memorystore for Redis.

Moduli

Per ottenere informazioni e modificare i servizi in esecuzione della tua applicazione, utilizza una combinazione di variabili di ambiente e dell'API App Engine Admin:

Informazioni sul servizio Come accedere
ID applicazione corrente Variabile di ambiente GAE_APPLICATION
ID progetto attuale Variabile di ambiente GOOGLE_CLOUD_PROJECT
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 API Admin apps.get
Elenco dei servizi Metodo API Admin apps.services.list
Elenco delle versioni per un servizio Metodo API Admin apps.services.versions.list
Versione predefinita per un servizio, incluse eventuali suddivisioni del traffico Metodo API Admin apps.services.get
Elenco delle istanze in esecuzione per una versione Metodo API Admin apps.services.versions.instances.list

Per ulteriori informazioni sui dati disponibili sui servizi in esecuzione della tua applicazione, consulta l' ambiente di runtime Python 3 .

Spazi dei nomi

L'API Namespaces consente alle app multitenant di partizionare i dati tra i tenant semplicemente specificando una stringa dello spazio dei nomi univoca per ogni tenant.

Mentre Datastore supporta il multitenancy direttamente, altri servizi Google Cloud non lo fanno. Se la tua app multitenant utilizza altri Google Cloud 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 tra i progetti.

OAuth

Anziché utilizzare il servizio OAuth di App Engine per verificare i token OAuth 2.0, utilizza il metodo oauth2.tokeninfo dell'API OAuth 2.0.

Ospita qualsiasi database di ricerca full-text come Elasticsearch su Compute Engine e accedi da un servizio.

Coda di attività

Il servizio App Engine Task Queue è disponibile in due modalità diverse. La migrazione da uno dei due punti indica due diversi prodotti Cloud autonomi.

Push attività

Anziché il servizio di push delle attività della coda di attività App Engine per l'esecuzione asincrona del codice, utilizza le librerie client di Cloud Tasks con un endpoint dell'ambiente standard Python 3 come destinazione. Per maggiori informazioni, consulta Migrazione delle code in modalità push a Cloud Tasks.

Per simulare questa migrazione con un'app di esempio, consulta Come utilizzare le code push di App Engine nelle app Flask e Migrazione a Cloud Tasks.

Pull attività

Se utilizzi il servizio di pull delle code di attività, ad esempio, per mettere in coda attività o messaggi da elaborare da worker separati, Cloud Pub/Sub può essere una buona alternativa. Offre funzionalità e garanzie di pubblicazione simili. Come altri servizi cloud, Pub/Sub fornisce comode librerie client per accedere al servizio. Per ulteriori informazioni, consulta le guide alla migrazione Scrittura di messaggi Pub/Sub e risposta a tali messaggi e Estrazione di attività Task Queue in Pub/Sub.

Per simulare questa migrazione con un'app di esempio, consulta Come utilizzare le attività pull di App Engine in un'app di esempio e la migrazione a Pub/Sub.

Recupero URL

Per impostazione predefinita, il runtime Python 2.7 utilizza il servizio URL Fetch per gestire le richieste HTTP(S) in uscita, anche se utilizzi librerie Python standard per inviare queste richieste.

Se la tua app utilizza direttamente le API URL Fetch, ad esempio per effettuare richieste asincrone, ti consigliamo di eseguire la migrazione a una libreria Python standard come la libreria Requests.

Per maggiori informazioni, consulta la sezione Migrazione delle richieste in uscita.

Autenticazione degli utenti

Per un'alternativa all'API Users, utilizza uno qualsiasi dei meccanismi di autenticazione basati su HTTP descritti nella pagina Autenticazione utente.