Google Cloud Storage helper para App Engine

Clase 13 de 29Curso de Google App Engine

Contenido del curso

Resumen

Acelera la integración de Google Cloud Storage en App Engine estándar con autenticación robusta basada en service accounts. Verás cómo habilitar la Google Cloud Storage JSON API, configurar roles y scopes, listar objetos desde Python 2.7 y exponer enlaces en tu frontend para que tus usuarios descarguen documentos antes de solicitar un crédito.

¿Cómo preparar Google Cloud Storage y la API para tu proyecto?

Para distribuir documentos como beneficios, acuerdo principal y acuerdo secundario, se almacena todo en un bucket de Cloud Storage y se sirve al usuario mediante enlaces descargables. En App Engine estándar no se pueden hacer escrituras en disco ni en el sistema operativo, por eso Cloud Storage es la opción para archivos estáticos y documentos.

  • Crea o usa un bucket y sube los documentos necesarios.
  • Habilita la Google Cloud Storage JSON API en APIs y servicios.
  • Verifica el proyecto de App Engine: suele venir con esta API habilitada por defecto, pero confirma su estado.
  • Define el bucket como una constante en tu capa de vistas para listar objetos.

¿Por qué usar Cloud Storage en App Engine estándar?

  • No hay escritura en disco local en el ambiente estándar.
  • Los documentos deben estar disponibles de forma confiable para descarga.
  • Puedes centralizar archivos importantes y exponer enlaces al frontend.

¿Cómo autenticar con una service account y scopes adecuados?

Una service account permite consumir APIs sin flujos de autenticación complejos. Puedes usar la App Engine default service account o crear una nueva más restrictiva. Asigna el rol adecuado, por ejemplo Storage Admin, y descarga la clave en JSON. Datos clave del archivo: client_email y client_id para los flujos de autorización.

  • Habilidad: creación de credenciales de Service Account.
  • Concepto: scopes para lectura, escritura y acceso total según la operación.
  • Keyword: Google OAuth2 Client, Google API Client, Discovery.
# Python 2.7 from oauth2client.service_account import ServiceAccountCredentials from googleapiclient.discovery import build # Scopes usados: lectura, escritura y acceso total (coloca aquí los tres scopes de Storage). SCOPES = [ 'scope-lectura', 'scope-escritura', 'scope-acceso-total', ] SERVICE_ACCOUNT_FILE = 'ruta/a/clave-service-account.json' BUCKET = 'tu-bucket' # Crear credenciales desde el archivo JSON de la service account credentials = ServiceAccountCredentials.from_json_keyfile_name( SERVICE_ACCOUNT_FILE, scopes=SCOPES ) # Construir el cliente de la API de Storage v1 service = build('storage', 'v1', credentials=credentials) def listar_objetos(bucket): request = service.objects().list(bucket=bucket) response = request.execute() return [item['name'] for item in response.get('items', [])] # Ejemplo de uso nombres = listar_objetos(BUCKET) for nombre in nombres: print(nombre)

¿Cómo estructurar el helper y pasar datos al frontend?

  • Crea un helper que inicialice credenciales y el cliente de Storage.
  • Implementa un método como «lista de objetos» que devuelva los nombres y metadatos.
  • En la vista, define la constante del bucket y llama al helper.
  • Envía al frontend los enlaces a los documentos del bucket para descarga.

¿Cómo desplegar y validar el flujo en App Engine?

Con el proyecto listo, despliega una nueva versión y prueba el formulario de solicitud de crédito. Tras registrar al usuario, muestra el listado de documentos y permite abrir cada archivo desde el bucket.

gcloud app deploy app.yaml --project TU_PROYECTO --version 2 gcloud app browse
  • Abre la URL del servicio y completa el formulario.
  • Verifica que el registro se procese correctamente.
  • Haz clic en la opción para ver documentos requeridos.
  • Revisa que el listado de objetos coincida con los archivos del bucket.
  • Abre un enlace y comprueba que el archivo se descarga o visualiza.

¿Quieres que profundicemos en scopes, roles o el diseño del helper para listar y exponer objetos? Comparte tus dudas o casos en los comentarios.