Cloud Storage consente alla tua applicazione di gestire oggetti di dati di grandi dimensioni, ad esempio file video o immagine, e consente agli utenti di caricare file di dati di grandi dimensioni. Nel runtime 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 App Engine più recenti, incluso il runtime Python 3.
Se l'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 usare una nuova libreria client. Tutti gli oggetti dati e le autorizzazioni nei bucket Cloud Storage esistenti rimangono invariati e puoi accedere a quelli esistenti utilizzando la nuova libreria client.
Confronto tra le librerie client di App Engine e Cloud
Somiglianze:
La libreria client Cloud supporta tutte le funzionalità di Cloud Storage abilitate dalla libreria client di App Engine, come la lettura, la scrittura, la rimozione e l'elenco di oggetti. La migrazione dovrebbe richiedere solo piccole modifiche al codice.
La libreria client Cloud supporta inoltre funzionalità aggiuntive, come la creazione e l'etichettatura di bucket e il recupero di versioni precedenti degli oggetti.
Differenze:
Nella libreria App Engine, la funzione che recupera un elenco di oggetti funziona in modo asincrono. La libreria client Cloud non fornisce una funzione asincrona per elencare gli oggetti, ma puoi utilizzare il paging e l'iterazione attraverso un piccolo gruppo di oggetti.
La libreria client di App Engine richiede l'uso di elenchi di controllo dell'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 per accedere ai bucket e agli oggetti: ACL e accesso uniforme a livello di bucket. L'accesso uniforme a livello di bucket offre un'esperienza di controllo dell'accesso più semplice e coerente su tutte le tue risorse Cloud.
Tutti gli ACL utilizzati con la libreria client di App Engine rimangono in vigore per i bucket esistenti dopo la migrazione alla libreria client Cloud e, se necessario, puoi continuare a utilizzare gli ACL.
Se l'accesso uniforme a livello di bucket soddisfa le tue esigenze, ti consigliamo di utilizzare questo sistema più semplice per tutti i nuovi bucket che crei. Sebbene sia possibile convertire i bucket esistenti per utilizzare un accesso uniforme a livello di bucket, ciò potrebbe 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 con le API App Engine
Operazioni di archiviazione di base con la libreria client Cloud per Cloud Storage
Prima di avviare la migrazione
Se non l'hai ancora fatto, configura il tuo ambiente di sviluppo Python in modo da utilizzare una versione Python compatibile con Google Cloud e installa strumenti di test per creare ambienti Python isolati.
Informazioni sulle autorizzazioni di Cloud Storage
Per impostazione predefinita, l'account di servizio predefinito creato automaticamente dell'app ha privilegi di lettura e scrittura per i bucket del progetto e tutti i diritti sugli oggetti creati, 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 Cloud Storage, assicurati di continuare a utilizzare gli stessi account e le stesse tecniche di autenticazione prima e dopo la migrazione.
Panoramica del processo di migrazione
Per eseguire la migrazione dell'app Python in modo da 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 codice per utilizzare la libreria client Cloud.
Verifica gli aggiornamenti.
Esegui il deployment della tua app in App Engine.
Installazione della libreria client Cloud per Cloud Storage
Per rendere disponibile la libreria client di Cloud per Cloud Storage per la tua applicazione quando viene eseguita in App Engine:
Aggiorna il file
app.yaml
:- Se utilizzi le librerie client di Cloud, aggiungi le versioni più recenti delle librerie
grpcio
esetuptools
. - Aggiungi la libreria
ssl
poiché è richiesta da Cloud Storage.
Di seguito è riportato un esempio di file
app.yaml
:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latest
Per alcune librerie client non è necessaria la libreria SSL. Se non includi la libreria SSL per una libreria client che la richiede, quando l'app riceve una richiesta verrà visualizzato un errore SSL in Esplora log.
- Se utilizzi le librerie client di Cloud, aggiungi le versioni più recenti delle librerie
Aggiorna il file
requirements.txt
aggiungendo le librerie client di Cloud per Cloud Storage al tuo elenco di dipendenze:google-cloud-storage==1.24.1
Ti consigliamo di utilizzare la versione 1.24.1 della libreria client di Cloud Storage, poiché supporta le app Python 2.7.
Esegui quindi
pip install -t lib -r requirements.txt
per aggiornare l'elenco delle librerie disponibili per la tua app.Per le app Python 2, se la tua app utilizza librerie integrate o copiate, devi specificare questi percorsi nel 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)
Il file
appengine_config.py
nell'esempio precedente presuppone che la cartellalib
si trovi nella directory di lavoro corrente. Se non puoi garantire chelib
si trovi 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')
Aggiornamento del codice per utilizzare la libreria client 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 connettersi a Cloud Storage. Ad esempio:
from google.cloud import storage
client = storage.Client()
Nello scenario di autorizzazione predefinito 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 utilizzi questo scenario predefinito, vedi Credenziali predefinite dell'applicazione (ADC) per informazioni su come fornire le credenziali.
Utilizzo dei metodi delle librerie client di Cloud
La tabella seguente riassume i metodi della libreria client Cloud da utilizzare per l'implementazione di funzionalità specifiche di Cloud Storage.
Funzionalità di Cloud Storage | Metodi client cloud |
Elenco degli oggetti in un bucket | Client.list_blobs
Guarda un esempio di codice semplice e un esempio di emulazione della modalità directory. Per sfogliare l'elenco degli oggetti, utilizza la proprietà |
Scrivi nello spazio di archiviazione | blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string
Visualizza un esempio di codice. |
Specifica gli 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
Guarda un esempio di codice. |
Elimina un oggetto |
blob.delete
Guarda un esempio di codice. |
Copiare un oggetto | bucket.copy_blob
Guarda un esempio di codice. |
Lettura dei metadati per un oggetto | blob.propertyname
e blob.metadata
Visualizza un esempio di codice. |
Test degli aggiornamenti in corso...
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 offrono un emulatore Cloud Storage.
Per ulteriori informazioni sui test delle app Python 2, consulta la pagina relativa all'utilizzo del server di sviluppo locale.
Per saperne di più sui 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 dell'app aggiornata. Monitora attentamente l'app per individuare eventuali problemi prima di indirizzare più traffico all'app aggiornata.