如何在本地从GAE和'GCE'访问GCS时将数据存储在GCS中

时间:2013-09-13 08:36:56

标签: python google-app-engine boto google-cloud-storage google-compute-engine

有一个使用GCS存储/检索文件的GAE项目。这些文件也需要由将在GCE上运行的代码读取(需要C ++库,因此不能在GAE上运行)。

在生产中,部署在实际的GAE> GCS< GCE,这个设置工作正常。 然而,在本地进行测试和开发是一个不同的故事,我想弄清楚。

根据建议,我正在运行GAE的dev_appserver和GoogleAppEngineCloudStorageClient来访问(模拟)GCS。文件放在本地blobstore中。非常适合测试GAE。

由于这些不是本地运行VM的GCE SDK,每当我引用本地'GCE'时,它只是我运行linux的本地开发机器。 在本地GCE方面,我只是使用默认的boto库(https://developers.google.com/storage/docs/gspythonlibrary)和python 2.x运行时来与C ++代码接口并从GCS中检索文件。但是,在开发过程中,这些文件无法从boto访问,因为它们存储在dev_appserver的blobstore中。

有没有办法将本地GAE和GCE正确连接到本地GCS?

目前,我放弃了本地GCS部分并尝试使用真正的GCS。带有boto的GCE部分很简单。 GCS部分也能够使用access_token使用真正的GCS,因此它使用真正的GCS而不是本地blobstore:

cloudstorage.common.set_access_token(access_token)

根据文件:

access_token: you can get one by run 'gsutil -d ls' and copy the
  str after 'Bearer'.

该令牌在有限的时间内有效,因此不太理想。有没有办法设置更永久的access_token?

6 个答案:

答案 0 :(得分:1)

看起来appengine-gcs-clien对于Python来说,现在只对生产App Engine和dev_appserver.py内部有用,并且它的本地示例已从开发人员文档中删除,转而支持Boto :(如果您是决定不使用本地GCS仿真,最好是坚持使用Boto进行本地测试和GCE。

如果您仍想使用' google.appengine.ext.cloudstorage'但是,访问令牌总是过期,因此您需要手动刷新它。老实说,如果您的设置最简单,只需拨打电话' gsutil -d ls'从Python解析输出以从本地凭据获取新令牌。您可以使用API Client Library获取一个更正确的标记'时尚,但在那时,事情会变得如此迂回,你可能只是使用Boto。

答案 1 :(得分:0)

从开发环境访问Google云端存储有方便的选择。您应该使用随Google Cloud SDK提供的客户端库。在本地执行gcloud init后,您可以访问您的资源。

Client library authentication的例子所示:

# 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)

答案 2 :(得分:0)

由于您在“GCE”中使用Boto,我会寻找另一个s3 compatible的独立服务器,并在另一个VM /容器/等中运行。在“GCE”。

答案 3 :(得分:0)

如果你总是使用“真正的”远程GCS,那么较新的gcloud可能是最好的库:http://googlecloudplatform.github.io/gcloud-python/

令人困惑的是,有多少存储客户端库用于Python。有些仅适用于AE,但在使用dev_appserver.py运行时,它们通常会强制(或至少默认使用)本地模拟Blobstore。

似乎gcloud总是使用真正的GCS,这就是我想要的。 它还“神奇地”修复了本地运行时的身份验证。

答案 4 :(得分:0)

Google图书馆像火车站的游客一样来来去去。今天(2020年), google-cloud-storage 应该可以在Python 3的GCE和GAE标准环境中使用。

在GAE和CGE上,它会从环境中获取访问凭据,您可以在本地提供服务凭证JSON文件,如下所示:

GOOGLE_APPLICATION_CREDENTIALS=../sa-b0af54dea5e.json

答案 5 :(得分:-3)

为此目的,有一个Google云端存储本地/开发服务器:https://developers.google.com/datastore/docs/tools/devserver

设置完成后,创建数据集并启动GCS开发服务器

gcd.sh create [options] <dataset-directory>
gcd.sh start [options] <dataset-directory>

导出环境变量

export DATASTORE_HOST=http://yourmachine:8080
export DATASTORE_DATASET=<dataset_id>

然后,您应该能够在本地代码中使用datastore连接。