python - configuracion - Cómo almacenar datos en GCS mientras se accede desde GAE y ''GCE'' localmente
archivo de configuracion en python (5)
Como está utilizando Boto en "GCE", buscaría otro servidor independiente que sea compatible con s3 y lo ejecutaría en otra VM / container / etc. En "GCE".
Hay un proyecto GAE que utiliza el GCS para almacenar / recuperar archivos. Estos archivos también deben ser leídos por un código que se ejecutará en GCE (necesita las bibliotecas de C ++, por lo tanto, no se ejecuta en GAE).
En producción, implementado en el GAE real> GCS <GCE, esta configuración funciona bien. Sin embargo, probar y desarrollar localmente es una historia diferente que estoy tratando de descubrir.
Según lo recomendado, estoy ejecutando el dev_appserver de GAE con GoogleAppEngineCloudStorageClient para acceder al GCS (simulado). Los archivos se colocan en el blobstore local. Ideal para probar GAE.
Dado que este no es un SDK de GCE para ejecutar una máquina virtual localmente, siempre que me refiero al ''GCE'' local, es solo mi máquina de desarrollo local que ejecuta Linux. En el lado GCE local, solo estoy usando la biblioteca de boto predeterminada ( https://developers.google.com/storage/docs/gspythonlibrary ) con un tiempo de ejecución de python 2.x para interactuar con el código C ++ y recuperar archivos del GCS . Sin embargo, en desarrollo, estos archivos son inaccesibles desde boto porque están almacenados en el almacén de blob dev_appserver.
¿Hay alguna manera de conectar correctamente el GAE y el GCE locales a un GCS local?
Por ahora, renuncié a la parte local de GCS e intenté usar el GCS real. La parte GCE con boto es fácil. La parte GCS también puede usar el GCS real usando un access_token, por lo que usa el GCS real en lugar del local blobstore al:
cloudstorage.common.set_access_token(access_token)
Según los documentos:
access_token: you can get one by run ''gsutil -d ls'' and copy the
str after ''Bearer''.
Ese token funciona por un tiempo limitado, por lo que no es lo ideal. ¿Hay una manera de establecer un access_token más permanente?
Existe una opción de conveniencia para acceder a Google Cloud Storage desde el entorno de desarrollo. Debe utilizar la biblioteca cliente provista con Google Cloud SDK. Después de ejecutar gcloud init
localmente, obtienes acceso a tus recursos.
Como se muestra en los ejemplos de autenticación de la biblioteca del cliente :
# Get the application default credentials. When running locally, these are
# available after running `gcloud init`. When running on compute
# engine, these are available from the environment.
credentials = GoogleCredentials.get_application_default()
# Construct the service object for interacting with the Cloud Storage API -
# the ''storage'' service, at version ''v1''.
# You can browse other available api services and versions here:
# https://developers.google.com/api-client-library/python/apis/
service = discovery.build(''storage'', ''v1'', credentials=credentials)
Hay un servidor de desarrollo / local de Google Cloud Storage para este propósito: https://developers.google.com/datastore/docs/tools/devserver
Una vez que lo haya configurado, cree un conjunto de datos e inicie el servidor de desarrollo GCS
gcd.sh create [options] <dataset-directory>
gcd.sh start [options] <dataset-directory>
Exportar las variables de entorno.
export DATASTORE_HOST=http://yourmachine:8080
export DATASTORE_DATASET=<dataset_id>
Entonces deberías poder usar la conexión del datastore
en tu código, localmente.
Parece que appengine-gcs-clien t para Python ahora solo es útil para App Engine de producción y en dev_appserver.py, y los ejemplos locales para él se han eliminado de los documentos del desarrollador en favor de Boto :( Si decide no Use la emulación local de GCS, probablemente es mejor quedarse con Boto tanto para las pruebas locales como para el GCE.
Sin embargo, si aún desea usar ''google.appengine.ext.cloudstorage'', los tokens de acceso caducan, por lo que deberá actualizarlo manualmente. Dada tu configuración, lo más fácil es simplemente llamar a ''gsutil -d ls'' desde Python y analizar la salida para obtener un nuevo token de tus credenciales locales. Podría usar la API Client Library para obtener un token de una manera más "correcta", pero en ese punto las cosas se volverían tan rotundas que podría estar usando Boto.
Si siempre estás usando GCS remotos "reales", la nueva gcloud es probablemente la mejor biblioteca: http://googlecloudplatform.github.io/gcloud-python/
Es realmente confuso la cantidad de bibliotecas de clientes de almacenamiento que hay para Python. Algunos son solo para AE, pero a menudo obligan (o al menos por defecto) a usar el Blobstore simulado local cuando se ejecuta con dev_appserver.py.
Parece que gcloud siempre está usando el GCS real, que es lo que quiero. También "mágicamente" corrige la autenticación cuando se ejecuta localmente.