Cloud Storage permite que tu aplicación entregue objetos de datos grandes, como archivos de video o imágenes, y permite que tus usuarios suban archivos de datos grandes. En el entorno de ejecución de Python 2, App Engine proporciona su propia biblioteca cliente para escribir y leer objetos en Cloud Storage. Esta biblioteca de App Engine no está disponible en los entornos de ejecución más recientes de App Engine, incluido el entorno de ejecución de Python 3.
Si tu app de Python 2 usa la biblioteca GoogleAppEngineCloudStorageClient
, debes migrar a la biblioteca cliente de Cloud para Cloud Storage antes de poder ejecutar la app en el entorno de ejecución de Python 3. Ten en cuenta que solo debes migrar la app para usar una biblioteca cliente nueva. Todos los objetos y permisos de los datos de los depósitos de Cloud Storage existentes no se modifican, y puedes acceder a los depósitos existentes mediante la biblioteca cliente nueva.
Comparación de las bibliotecas cliente de App Engine y Cloud
Similitudes:
La biblioteca cliente de Cloud es compatible con todas las características de Cloud Storage que habilita la biblioteca cliente de App Engine, como leer, escribir, quitar y enumerar objetos. La migración solo debe requerir cambios pequeños en el código.
La biblioteca cliente de Cloud también admite características adicionales, como crear y etiquetar depósitos, y recuperar versiones anteriores de objetos.
Diferencias:
En la biblioteca de App Engine, la función que recupera una lista de objetos funciona de forma asíncrona. La biblioteca cliente de Cloud no proporciona una función asíncrona a fin de enumerar objetos, aunque puedes usar la paginación para iterar a través de un conjunto pequeño de objetos.
La biblioteca cliente de App Engine requiere que uses las listas de control de acceso (LCA) para controlar el acceso a los depósitos y los objetos. Sin embargo, Cloud Storage y la biblioteca cliente de Cloud admiten dos sistemas a fin de otorgar permiso a los usuarios para acceder a los depósitos y objetos: las LCA y el acceso uniforme a nivel de depósito. El acceso uniforme a nivel de bucket proporciona una experiencia de control de acceso más simple y coherente en todos tus recursos de Cloud.
Todas las LCA que usaste con la biblioteca cliente de App Engine permanecerán vigentes para los depósitos existentes después de migrar a la biblioteca cliente de Cloud, y puedes seguir usando las LCA si es necesario.
Si el acceso uniforme a nivel de bucket se adapta a tus necesidades, te recomendamos que uses este sistema más simple para cualquier bucket nuevo que crees. Si bien puedes convertir bucket s existentes para usar el acceso uniforme a nivel de bucket, puede que esto requiera cambios significativos con respecto a cómo la app protege el acceso a sus objetos de almacenamiento.
Muestras de código:
Operaciones de almacenamiento básicas mediante las API de App Engine
Operaciones de almacenamiento básicas mediante la biblioteca cliente de Cloud para Cloud Storage
Antes de comenzar la migración
Conceptos básicos sobre los permisos de Cloud Storage
De forma predeterminada, la cuenta de servicio predeterminada de la app tiene privilegios de lectura y escritura para los depósitos de tu proyecto, y tiene derechos totales a los objetos que crea antes y después de la migración.
Si usaste una cuenta de servicio o una cuenta de usuario diferente para proteger el acceso a los buckets y los objetos de Cloud Storage, asegúrate de seguir usando las mismas cuentas y técnicas de autenticación antes y después de la migración.
Descripción general del proceso de migración
Si deseas migrar la app de Python a fin de usar la biblioteca cliente de Cloud para Cloud Storage en lugar de la biblioteca cliente de App Engine, haz lo siguiente:
Instala la biblioteca cliente de Cloud para Cloud Storage.
Actualiza el código para usar la biblioteca cliente de Cloud.
Prueba las actualizaciones.
Implementa la app en App Engine.
Instala la biblioteca cliente de Cloud para Cloud Storage
A fin de que la biblioteca cliente de Cloud para Cloud Storage esté disponible en tu app cuando se ejecuta en App Engine, sigue estos pasos:
Crea un archivo
requirements.txt
en la misma carpeta que el archivoapp.yaml
y agrega las siguientes líneas:google-cloud-storage==1.24.1
Te recomendamos usar la versión 1.24.1 de la biblioteca cliente de Cloud Storage, ya que es compatible con las apps de Python 2.7.
En el archivo
app.yaml
de la aplicación, especifica las bibliotecas RPC ysetuptools
de Google obligatorias y la biblioteca SSL opcional en la secciónlibraries
:libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latest
Algunas bibliotecas cliente no necesitan la biblioteca SSL. Si no incluyes la biblioteca SSL para una biblioteca cliente que la necesita, verás un error de SSL en el visor de registros cuando tu app reciba una solicitud.
Crea un directorio para almacenar tus bibliotecas de terceros, como
lib/
. Luego, usapip install
para instalar las bibliotecas en el directorio. Por ejemplo:pip install -t lib -r requirements.txt
Crea un archivo
appengine_config.py
en la misma carpeta que el archivoapp.yaml
. Agrega lo siguiente al archivoappengine_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)
En el archivo
appengine_config.py
del ejemplo anterior, se supone que la carpetalib
se encuentra en el directorio de trabajo actual. Si no puedes garantizar quelib
esté siempre en el directorio de trabajo actual, especifica la ruta completa a la carpetalib
. Por ejemplo:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
En el caso del desarrollo local, recomendamos que instales dependencias en un entorno virtual como virtualenv para Python 2.
Actualiza tu código para usar la biblioteca cliente de Cloud
Crea un cliente de Cloud Storage
Si deseas usar la biblioteca cliente de Cloud para Cloud Storage, crea un objeto Client
. El cliente contiene credenciales y otros datos necesarios para conectarse a Cloud Storage. Por ejemplo:
from google.cloud import storage
client = storage.Client()
En la situación de autorización predeterminada descrita antes, el cliente de Cloud Storage contiene credenciales de la cuenta de servicio predeterminada de App Engine, que está autorizada para interactuar con los buckets y los objetos de tu proyecto. Si no trabajas en esta situación predeterminada, consulta Credenciales predeterminadas de la aplicación (ADC) para obtener información sobre cómo proporcionarlas.
Usa los métodos de la biblioteca cliente de Cloud
En la siguiente tabla, se resumen qué métodos de la biblioteca cliente de Cloud debes usar para implementar funciones específicas de Cloud Storage.
Función de Cloud Storage | Métodos del cliente de Cloud |
Hacer una lista de objetos de un bucket | Client.list_blobs
Consulta una muestra de código simple y una muestra del modo de emulación de directorio. Para desplazarte por la lista de objetos, usa la propiedad |
Escribir en el almacenamiento | blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string
Consulta una muestra de código. |
Especificar las LCA | Para aplicar una LCA predefinida, usa el parámetro predefined_acl cuando crees un bucket o un objeto.
Para obtener un control más detallado, usa |
Leer desde el almacenamiento | blob.download_to_file
blob.download_to_filename
blob.download_as_string
Consulta una muestra de código. |
Borrar un objeto |
blob.delete
Consulta una muestra de código. |
Copiar un objeto | bucket.copy_blob
Consulta una muestra de código. |
Leer metadatos para un objeto | blob.propertyname
y blob.metadata
Consulta una muestra de código. |
Prueba tus actualizaciones
Puedes probar las actualizaciones de la app en un entorno local, pero todas las solicitudes de Cloud Storage deben enviarse por Internet a un bucket de Cloud Storage real. Ni App Engine ni Cloud Storage proporcionan un emulador de Cloud Storage.
Para obtener más información sobre cómo probar las apps de Python 2, consulta Usa el servidor de desarrollo local.
Para obtener más información sobre cómo probar las apps de Python 3, consulta Implementa y prueba tu aplicación.
Implementa tu app
Cuando estés listo para implementar tu app, debes hacer lo siguiente:
Si la app se ejecuta sin errores, usa la división de tráfico a fin de aumentar de forma gradual el tráfico de tu app actualizada. Supervisa la app para detectar cualquier problema antes de enrutar más tráfico a la app actualizada.