Eseguire la migrazione dai servizi in bundle legacy

La maggior parte delle funzionalità fornite dai servizi in bundle precedenti è 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 soluzione alternativa. Questo approccio ti offre la flessibilità di passare a servizi scomposti più avanti nel ciclo di migrazione.

Dopo aver eseguito la migrazione dai servizi integrati precedenti, 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 di 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, come l'elaborazione delle immagini, la ricerca e la messaggistica, questa guida consiglia fornitori di terze parti o altre soluzioni alternative.

Questa pagina illustra il percorso di migrazione per ciascun servizio in bundle.

Informazioni sulle Google Cloud autorizzazioni

Poiché l'app di cui è stata eseguita la migrazione e i Google Cloud servizi che utilizza non vengono più eseguiti nello stesso ambiente "in sandbox", l'app deve avere l'autorizzazione per accedere a ogni servizio. Ad esempio, per interagire con Firestore in modalità Datastore (Datastore) o Cloud Tasks, l'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 dell'account di servizio predefinito di App Engine, che è autorizzato ad accedere ai database nello stesso progetto dell'app.

Se una delle seguenti condizioni è vera, 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 all'account di servizio App Engine predefinito.

Per informazioni sulle tecniche di autenticazione alternativa, consulta Configurare l'autenticazione per le 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, poiché ha un livello elevato di autorizzazioni per tutti gli elementi del progetto. Crea e utilizza un account di servizio con il livello più basso di autorizzazioni necessarie per la tua attività di sviluppo e test specifica.

Per istruzioni su come configurare un account di servizio e collegarlo alla tua app, consulta Ottenere e fornire manualmente le credenziali dell'account di servizio.

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. Google Cloud I passaggi per installare le librerie client nell'ambiente 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 è in esecuzione 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 raccolta 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 della tua 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 ne ha bisogno, visualizzerai un errore SSL in Explorer dei log quando la tua app riceve una richiesta.

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

    # 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 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 nella tua app quando è in esecuzione 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 requirements.txt file nel runtime Python 3.

Percorsi di migrazione per i servizi integrati di App Engine

Archivio BLOB

Per archiviare e recuperare i dati, utilizza Cloud Storage tramite le librerie client di Cloud. Per iniziare, consulta la sezione Utilizzare 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 esegui la migrazione 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 Eseguire la migrazione a Cloud NDB. Per simulare questa migrazione con un'app di esempio, consulta Eseguire la migrazione da App Engine NDB a Cloud NDB.

Immagini

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

Per ridimensionare, convertire e manipolare le immagini, utilizza una libreria di elaborazione delle immagini come Pillow o un'interfaccia Python per ImageMagick.

Per utilizzare una di queste librerie di terze parti, aggiungila come dipendenza e aggiorna il codice in modo da chiamare le API della libreria.

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

Logging

Ti consigliamo di aggiornare l'app in modo da 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 ulteriori informazioni, consulta Scrittura e visualizzazione dei log e Eseguire la migrazione a Cloud Logging.

Posta

Per inviare email, utilizza un provider di posta di terze parti come SendGrid, Mailgun o Mailjet. Tutti questi servizi offrono API per inviare email dalle applicazioni. Al momento non è disponibile un'alternativa di terze parti consigliata per i messaggi in entrata.

Memcache

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

Per informazioni dettagliate, vedi Eseguire la migrazione di Memcache in 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 per le richieste NDB (o Cloud NDB), utilizza il supporto integrato di Cloud NDB per Redis anziché Memcache o Memorystore per Redis.

Moduli

Per ottenere informazioni e modificare i servizi in esecuzione dell'applicazione, utilizza una combinazione di variabili di ambiente e l'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 apps.get dell'API Admin
Elenco di servizi Metodo apps.services.list dell'API Admin
Elenco delle versioni di un servizio Metodo apps.services.versions.list dell'API Admin
Versione predefinita per un servizio, incluse eventuali suddivisioni del traffico Metodo apps.services.get dell'API Admin
Elenco di istanze in esecuzione per una versione Metodo apps.services.versions.instances.list dell'API Admin

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

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.

Sebbene Datastore supporti direttamente la multitenancy, altri Google Cloud servizi 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 a testo intero, come Elasticsearch, su Compute Engine e accedevi dal tuo servizio.

Coda di attività

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

Attività push

Anziché utilizzare il servizio di push delle attività della coda di App Engine per l'esecuzione asincrona del codice, utilizza le librerie client di Cloud Tasks con un endpoint dell'ambiente standard Python 3 come target. Per maggiori informazioni, consulta Migrazione delle code 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 ed Eseguire la migrazione a Cloud Tasks.

Attività pull

Se utilizzi il servizio di attività pull di code di lavoro, ad esempio per mettere in coda attività o messaggi da elaborare da worker distinti, Cloud Pub/Sub può essere una buona alternativa. Offre funzionalità e garanzie di invio simili. Come altri servizi cloud, Pub/Sub fornisce comode librerie client per accedere al servizio. Per ulteriori informazioni, consulta la sezione Scrittura di messaggi Cloud Pub/Sub e risposta a questi messaggi e la guida alla migrazione delle attività pull della coda di lavoro a Pub/Sub.

Per simulare questa migrazione con un'app di esempio, consulta l'articolo 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 di Python 2.7 utilizza il servizio di recupero URL per gestire le richieste HTTP(S) in uscita, anche se utilizzi le librerie Python standard per emettere 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 ulteriori informazioni, consulta la sezione Eseguire la migrazione delle richieste in uscita.

Autenticazione degli utenti

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