Cloud Storage consente alla tua applicazione di gestire oggetti di dati di grandi dimensioni, come file video o immagini, e consente agli utenti di caricare file di dati di grandi dimensioni. Nel runtime di Python 2, App Engine fornisce la propria libreria client per la scrittura e la lettura di oggetti in Cloud Storage. Questa libreria di App Engine non è disponibile nei runtime di App Engine più recenti, incluso il runtime Python 3.
Se la tua app Python 2 utilizza la libreria GoogleAppEngineCloudStorageClient
, devi eseguire la migrazione alla libreria client Cloud per Cloud Storage prima di poter eseguire l'app nel runtime Python 3. Tieni presente che devi eseguire la migrazione dell'app solo per utilizzare una nuova libreria client. Tutti gli oggetti dati e le autorizzazioni dei bucket Cloud Storage esistenti rimangono invariati e puoi accedere ai bucket esistenti utilizzando la nuova libreria client.
Confronto tra le librerie client di App Engine e Cloud
Somiglianze:
La libreria client di Cloud supporta tutte le funzionalità di Cloud Storage attivate dalla libreria client di App Engine, come la lettura, la scrittura, la rimozione e l'elenco degli oggetti. La migrazione deve richiedere solo piccole modifiche al codice.
La libreria client di Cloud supporta anche funzionalità aggiuntive, come la creazione e l'etichettatura di bucket e il recupero versioni precedenti di oggetti.
Differenze:
Nella libreria App Engine, la funzione che recupera un elenco di oggetti funziona in modo asincrono. La libreria client di Cloud non fornisce una funzione asincrona per elencare gli oggetti, tuttavia puoi utilizzare il paging e l'iterazione tramite un piccolo insieme di oggetti.
La libreria client di App Engine richiede l'utilizzo di elenchi di controllo di accesso (ACL) per controllare l'accesso ai bucket e agli oggetti. Tuttavia, Cloud Storage e la libreria client di Cloud supportano due sistemi per concedere agli utenti l'autorizzazione ad accedere ai bucket e agli oggetti: gli ACL e l'accesso uniforme a livello di bucket. L'accesso uniforme a livello di bucket offre un'esperienza di controllo dell'accesso più semplice e coerente in tutte le tue risorse cloud.
Tutti gli ACL che hai utilizzato con la libreria client di App Engine rimarranno interessati per i tuoi bucket esistenti dopo la migrazione alla libreria client di Cloud, e puoi continuare a utilizzare gli ACL, se necessario.
Se l'accesso uniforme a livello di bucket soddisfa le tue esigenze, ti consigliamo di utilizzare questo sistema più semplice per ogni nuovo bucket che crei. Sebbene sia possibile convertire i bucket esistenti per utilizzare l'accesso uniforme a livello di bucket, ciò può richiedere modifiche significative al modo in cui la tua app protegge l'accesso agli oggetti di archiviazione.
Esempi di codice:
Operazioni di archiviazione di base utilizzando le API App Engine
Operazioni di archiviazione di base utilizzando la libreria client Cloud per Cloud Storage
Prima di avviare la migrazione
Informazioni sulle autorizzazioni di Cloud Storage
Per impostazione predefinita, l'account di servizio predefinito dell'app dispone dei privilegi di lettura e scrittura per i bucket nel progetto e ha diritti completi per gli oggetti che crea, sia prima che dopo la migrazione.
Se hai utilizzato un account di servizio o un account utente diverso per proteggere l'accesso ai bucket e agli oggetti di Cloud Storage, assicurati di continuare a utilizzare gli stessi account e tecniche di autenticazione prima e dopo la migrazione.
Panoramica del processo di migrazione
Per eseguire la migrazione dell'app Python per utilizzare la libreria client di Cloud per Cloud Storage anziché la libreria client di App Engine:
Installa la libreria client Cloud per Cloud Storage.
Aggiorna il tuo codice per utilizzare la libreria client Cloud.
Verifica gli aggiornamenti.
Esegui il deployment della tua app in App Engine.
Installazione della libreria client di Cloud per Cloud Storage
Per rendere disponibile la tua libreria client Cloud per Cloud Storage nella tua app quando viene eseguita in App Engine:
Crea un file
requirements.txt
nella stessa cartella del fileapp.yaml
e aggiungi le seguenti righe:google-cloud-storage==1.24.1
Ti consigliamo di utilizzare la versione 1.24.1 della libreria client di Cloud Storage, in quanto supporta le app Python 2.7.
Nel file
app.yaml
della tua app, specifica le librerie Google RPC esetuptools
obbligatorie e la libreria SSL facoltativa nella sezionelibraries
:libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latest
Alcune librerie client non hanno bisogno della libreria SSL. Se non include la libreria SSL per una libreria client che ne ha bisogno, verrà visualizzato un errore SSL in Esplora log quando l'app riceve una richiesta.
Crea una directory per archiviare le tue librerie di terze parti, ad esempio
lib/
. quindi utilizzapip install
per installare le librerie nella directory. Ad esempio:pip install -t lib -r requirements.txt
Crea un file
appengine_config.py
nella stessa cartella del fileapp.yaml
. Aggiungi quanto segue al tuo fileappengine_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)
Il file
appengine_config.py
nell'esempio precedente presuppone che la cartellalib
si trovi nella directory di lavoro corrente. Se non puoi garantire chelib
sarà sempre nella directory di lavoro attuale, specifica il percorso completo della cartellalib
. Ad esempio:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Per lo sviluppo locale, consigliamo di installare le dipendenze in un ambiente virtuale, ad esempio virtualenv per Python 2.
Aggiornare il codice per utilizzare la libreria client di Cloud
Creazione di un client Cloud Storage
Per utilizzare la libreria client di Cloud per Cloud Storage, crea un oggetto Client
. Il client contiene le credenziali e altri dati necessari per la connessione a Cloud Storage. Ad esempio:
from google.cloud import storage
client = storage.Client()
Nello scenario predefinito di autorizzazione descritto in precedenza, il client Cloud Storage contiene le credenziali dell'account di servizio predefinito di App Engine, che è autorizzato a interagire con i bucket e gli oggetti del progetto. Se non stai lavorando in questo scenario predefinito, consulta ADC (Application Default Credentials) per informazioni su come fornire le credenziali.
Utilizzo dei metodi della libreria client di Cloud
La tabella seguente riepiloga i metodi della libreria client di Cloud da utilizzare durante l'implementazione di specifiche funzionalità di Cloud Storage.
Funzionalità di Cloud Storage | Metodi per il client Cloud |
Elenco degli oggetti in un bucket | Client.list_blobs
Guarda un semplice esempio di codice e un esempio di emulazione della modalità di directory. Per sfogliare l'elenco degli oggetti, utilizza la proprietà |
Scrittura nello spazio di archiviazione | blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string
Visualizza un esempio di codice. |
Specifica ACL | Per applicare un ACL predefinito, utilizza il parametro predefined_acl quando crei un bucket o crei un oggetto.
Per un controllo più granulare, utilizza |
Lettura dallo spazio di archiviazione | blob.download_to_file
blob.download_to_filename
blob.download_as_string
Visualizza un esempio di codice. |
Elimina un oggetto |
blob.delete
Visualizza un esempio di codice. |
Copiare un oggetto | bucket.copy_blob
Visualizza un esempio di codice. |
Leggere i metadati per un oggetto | blob.propertyname
e blob.metadata
Visualizza un esempio di codice. |
Test degli aggiornamenti
Puoi testare gli aggiornamenti della tua app in un ambiente locale, ma tutte le richieste di Cloud Storage devono essere inviate tramite Internet a un bucket Cloud Storage effettivo. Né App Engine né Cloud Storage forniscono un emulatore di Cloud Storage.
Per ulteriori informazioni sul test delle app Python 2, consulta Utilizzo del server di sviluppo locale.
Per ulteriori informazioni sul test delle app Python 3, consulta Test e deployment dell'applicazione.
Deployment dell'app
Quando è tutto pronto per eseguire il deployment dell'app, devi:
Se l'app viene eseguita senza errori, utilizza la suddivisione del traffico per aumentare lentamente il traffico relativo all'app aggiornata. Monitora attentamente i problemi prima di indirizzare più traffico all'app aggiornata.