13

我正在尝试将 GAE 数据存储备份到 GS 存储桶,如下所述:https ://developers.google.com/appengine/docs/adminconsole/datastoreadmin#Backup_And_Restore 。我试图以表格形式提供存储桶名称:

bucket 
/gs/bucket
/gs/bucket/path

但它不起作用。每次收到消息:

There was a problem kicking some off the jobs/tasks:
Invalid bucket name: 'bucket'

我究竟做错了什么?是否可以在不为此编写自定义代码的情况下将所有数据(包括 blob 文件)备份到 GS?

4

4 回答 4

21

我通过将服务帐户电子邮件添加为具有写入权限的特权用户来使其工作。

这是我所做的:

  1. 通过 Web 界面创建存储桶(STORAGE>CLOUD STORAGE>Storage Browser > New Bucket)
  2. 将 APPID@appspot.gserviceaccount.com 添加为具有编辑权限的特权用户(权限>添加成员)

即使认为它是同一个项目的一部分,出于某种原因,我仍然必须将项目电子邮件添加为特权用户。

于 2014-07-19T06:42:19.133 回答
7

我怀疑存储桶不存在,或者应用引擎没有写入存储桶的权限。

确保以下情况属实:

  1. 您已经创建了BUCKET. 如有必要, 使用gsutil之类的东西来创建存储桶。
    • gsutil mb gs://BUCKET
  2. 确保您的应用引擎服务帐户对BUCKET.
  3. 现在使用表格开始备份/gs/BUCKET

如果您收到一条Bucket "/gs/BUCKET" is not accessible消息,则您的存储桶不存在,或者APP_NAME@appspot.gserviceaccount.com无权访问您的存储桶。

注意:表格是/gs/BUCKET. 以下是错误的:BUCKETgs://BUCKETgs/BUCKET等。

使用以下命令检查存储桶是否存在并具有正确的权限:

gsutil getacl gs://BUCKET  # Note the URI form here instead of a path.

查找类似以下的条目:

<Entry>
  <Scope type="UserByEmail">
    <EmailAddress>APP_NAME@appspot.gserviceaccount.com</EmailAddress>
  </Scope>
  <Permission>WRITE</Permission>
</Entry>

如果您没有看到一个,您可以通过以下方式添加一个:

gsutil getacl gs://BUCKET > acl.xml
vim acl.xml  # Or your favorite editor
# Add the xml above
gsutil setacl acl.xml gs://BUCKET

现在上述步骤将起作用。

于 2013-01-09T09:39:17.850 回答
0

我自己花了一段时间来解决这个问题。感谢@fejta 的帮助。

我想不通。我已将我的用户添加到项目中,验证我可以编写,手动更新 ACL(这不应该是必需的),...

最后,通过以下方式从命令行创建一个存储桶:

gsutil mb gs://BUCKET

而不是 Web 用户界面对我有用。在将用户添加到团队之前或之后创建的多个存储桶都导致“无效存储桶名称”

我解决了这个问题:

/gs/BUCKET
于 2013-01-31T00:34:16.377 回答
0

请务必严格遵循此处的说明:

https://cloud.google.com/appengine/docs/standard/python/console/datastore-backing-up-restoring#restoreing_data_to_another_app

要确保的事项:

  1. 将 ACL 权限添加到您的目标应用程序
  2. 如果在给bucket添加权限之前已经创建了备份,找到备份并添加权限
  3. 添加[PROJECT_ID]@appspot.gserviceaccount.com作为具有编辑角色的源应用程序的成员
  4. 在源应用程序中导入的路径是/gs/bucket
于 2017-05-18T08:00:04.497 回答