有一个GAE项目使用GCS来存储/检索文件。这些文件还需要由在GCE上运行的代码读取(需要C++库,因此不能在GAE上运行)。
在生产环境中,部署在实际的GAE > GCS < GCE上,这个设置可以很好地工作。然而,在本地测试和开发是另一回事,我正在努力弄清楚。
按照建议,我使用GoogleAppEngineCloudStorageClient运行GAE的dev_appserver来访问(模拟的) GCS。文件放在本地blobstore中。非常适合测试GAE。
因为它们不是在本地运行VM的GCE SDK,所以每当我提到本地“GCE”时,它只是我运行linux的本地开发机器。在本地GCE端,我只使用默认boto库(https://developers.google.com/storage/docs/gspythonlibrary)和python2.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?
发布于 2016-01-09 01:41:56
有一个方便的选项可以从开发环境访问Google Cloud Storage。您应该使用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)
发布于 2016-07-29 01:54:30
如果你一直在使用“真正的”远程GCS,那么新的gcloud可能是最好的库:http://googlecloudplatform.github.io/gcloud-python/
Python的存储客户端库有多少真的很让人困惑。有些仅用于AE,但在与dev_appserver.py一起运行时,它们经常强制(或至少默认)使用本地模拟Blobstore。
似乎gcloud总是使用真正的GCS,这正是我想要的。它还可以在本地运行时“神奇地”修复身份验证。
发布于 2016-02-20 12:21:20
看起来Python t现在只对生产应用程序引擎和dev_appserver.py内部有用,并且它的本地示例已经从开发人员文档中删除,转而使用Boto :(如果您决定不使用本地GCS仿真,那么在本地测试和dev_appserver.py中最好都使用Boto。
如果你仍然想使用'google.appengine.ext.cloudstorage‘,访问令牌总是过期的,所以你需要手动刷新它。老实说,给出你的设置,最简单的事情就是从Python中调用'gsutil -d ls‘并解析输出,从你的本地凭证中获得一个新的令牌。您可以使用API Client Library以更“正确”的方式获取令牌,但在这一点上,事情会变得如此曲折,您可能只需要使用Boto。
https://stackoverflow.com/questions/18781829
复制相似问题