Cloud Storage consente alla tua applicazione di pubblicare oggetti di dati di grandi dimensioni, come file video o immagine, e ai tuoi 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 in Cloud Storage. Questa libreria di App Engine non è disponibile nei runtime di App Engine più recenti, incluso il runtime di Python 3.
Se la tua app Python 2 utilizza la libreria GoogleAppEngineCloudStorageClient
, devi eseguire la migrazione alla libreria client di Cloud per Cloud Storage prima di poter eseguire l'app nel runtime Python 3. Tieni presente che devi eseguire la migrazione della tua app solo per utilizzare una nuova libreria client. Tutti gli oggetti dati e le autorizzazioni in
i bucket Cloud Storage esistenti rimangono invariati e puoi accedere
i bucket esistenti utilizzando la nuova libreria client.
Confronto delle librerie client App Engine e Cloud
Analogie:
La libreria client di Cloud supporta tutte le funzionalità di Cloud Storage abilitate dalla libreria client di App Engine, come lettura, scrittura, rimozione ed elencando gli oggetti. La migrazione dovrebbe 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 di versioni precedenti degli oggetti.
Differenze:
Nella libreria di App Engine, la funzione che recupera un elenco di che funzionano in modo asincrono. La libreria client di Cloud non fornisce una funzione asincrona per elencare , anche se puoi usare il paging e l'iterazione attraverso un piccolo insieme di oggetti.
La libreria client di App Engine richiede l'utilizzo di elenchi di controllo dell'accesso (ACL) per controllare l'accesso a bucket e oggetti. Tuttavia, Cloud Storage e la libreria client di Cloud supportano due sistemi per concedere agli utenti l'autorizzazione ad accedere ai tuoi bucket e 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 risorse Cloud.
Tutte le ACL utilizzate con la libreria client App Engine rimangono in vigore per i bucket esistenti dopo la migrazione alla libreria client Cloud e, se necessario, puoi continuare a utilizzarle.
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 in modo che utilizzino un accesso uniforme a livello di bucket, questa operazione potrebbe richiedere modifiche significative al modo in cui la tua app protegge l'accesso ai suoi oggetti di archiviazione.
Esempi di codice:
Operazioni di archiviazione di base utilizzando le API di App Engine
Operazioni di archiviazione di base utilizzando la libreria client di Cloud per Cloud Storage
Prima di avviare la migrazione
Se non l'hai ancora fatto, configura il tuo ambiente di sviluppo Python per utilizzare una versione di Python compatibile con Google Cloud e installa gli strumenti di test per creare ambienti Python isolati.
Informazioni sulle autorizzazioni Cloud Storage
Per impostazione predefinita, l'account di servizio predefinito creato automaticamente per la tua app dispone dei privilegi di lettura e scrittura per i bucket del progetto e ha diritti completi sugli oggetti che crea, prima e dopo la migrazione.
Se hai utilizzato un account di servizio o 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 della tua app Python in modo che utilizzi la libreria client Cloud per Cloud Storage invece della libreria client App Engine:
Installa la libreria client Cloud per Cloud Storage.
Aggiorna il codice per utilizzare la libreria client di Cloud.
Verifica gli aggiornamenti.
Esegui il deployment della tua app in App Engine.
Installazione della libreria client di Cloud per Cloud Storage
Rendere disponibile la libreria client di Cloud per Cloud Storage nella tua app quando viene eseguito in App Engine:
Aggiorna il file
app.yaml
:- Se utilizzi le librerie client di Cloud, aggiungi le versioni più recenti
grpcio
esetuptools
librerie. - Aggiungi la libreria
ssl
poiché è richiesta da Cloud Storage.
Di seguito è riportato un file
app.yaml
di esempio:runtime: python27 threadsafe: yes api_version: 1 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 il parametro libreria SSL per una libreria client che la richiede, verrà visualizzato un errore SSL in Esplora log quando la tua app riceve una richiesta.
- Se utilizzi le librerie client di Cloud, aggiungi le versioni più recenti
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 del client Cloud Storage poiché supporta le app Python 2.7.
Poi esegui
pip install -t lib -r requirements.txt
per aggiornare l'elenco librerie disponibili per la tua app.Per le app Python 2, se la tua app utilizza librerie integrate o copiate, devi specificare quei 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 l'elemento la cartellalib
si trova nella directory di lavoro attuale. Se non puoi garantisce chelib
sia sempre presente 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')
Aggiornare il codice per utilizzare la libreria client di Cloud
Creazione di un client Cloud Storage
Per utilizzare la libreria client Cloud per Cloud Storage, crea un Client
oggetto. Il client contiene credenziali e altri
necessari per la connessione 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, consulta 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 di Cloud da utilizzare per implementare funzionalità specifiche di Cloud Storage.
Funzionalità Cloud Storage | Metodi client cloud |
Elenco degli oggetti in un bucket | Client.list_blobs
Visualizza un esempio di codice semplice e un esempio di emulazione della modalità directory. Per sfogliare l'elenco di oggetti, utilizza la proprietà |
Scrittura nello spazio di archiviazione | blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string
Consulta un esempio di codice. |
Specifica gli ACL | Per applicare uno strumento predefinito
ACL, usa il parametro predefined_acl quando
crea
un bucket o crea 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. |
Leggi i metadati per un oggetto | blob.propertyname
e blob.metadata
Guarda un esempio di codice. |
Test degli aggiornamenti in corso...
Puoi testare gli aggiornamenti dell'app in un ambiente locale, ma Le richieste di Cloud Storage devono essere inviate tramite internet a un nel bucket Cloud Storage. Né App Engine né Cloud Storage forniscono un emulatore Cloud Storage.
Per ulteriori informazioni sul test delle app Python 2, consulta Utilizzo del di sviluppo software.
Per ulteriori informazioni sul test delle app Python 3, consulta Test e deployment l'applicazione.
Deployment dell'app
Quando è tutto pronto per il deployment dell'app, devi:
Se l'app funziona senza errori, utilizza la suddivisione del traffico per aumentare gradualmente il traffico per l'app aggiornata. Monitora attentamente l'app per rilevare eventuali problemi prima di indirizzare più traffico all'app aggiornata.