【问题标题】:Can't backup GAE application datastore to GS bucket无法将 GAE 应用程序数据存储备份到 GS 存储桶
【发布时间】:2012-12-26 10:46:21
【问题描述】:

我正在尝试将 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?

【问题讨论】:

    标签: google-app-engine google-cloud-storage google-cloud-datastore database-backups


    【解决方案1】:

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

    这就是我所做的:

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

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

    【讨论】:

    • 这也适用于我,在新的 Google Cloud 控制台中。谢谢!
    • 应用 ID 上没有“s~”。如果您的应用 ID 是“s~myapp”,请使用“myapp@appspot.gserviceaccount.com”
    • 谷歌文档中没有提到这个仍然,至少我没有找到。
    • 天哪,谢谢!浪费了这么多时间。我有 2 个应用程序,设置相同(我认为),一个有效,一个无效,让我发疯。
    • 干得好!您应该添加第 2 步。需要在 IAM&ADMIN 中完成,我需要将存储桶定义为 /gs/bucket
    【解决方案2】:

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

    确保以下情况属实:

    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
    

    现在上述步骤将起作用。

    【讨论】:

    • 完成了这一切。实际上我的应用程序正在将数据写入该存储桶。所以访问权限没问题
    • 这令人惊讶。上述步骤对我有用。我尝试使用一个新的和预先存在的存储桶。在我更新 ACL 之前,存储桶无法正常工作,如上所示。我建议尝试使用一个新的、一次性的存储桶名称。例如,我使用了 /gs/delete-this-bucket。
    • 刚刚完成了你提出的一切。可以从 gsutil getacl 命令看到写权限;一切就绪;效果一样
    • 您的应用和存储桶名称是什么? gsutil getacl 输出什么?
    【解决方案3】:

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

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

    需要确认的事项:

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

    【讨论】:

      【解决方案4】:

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

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

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

      gsutil mb gs://BUCKET
      

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

      我解决了这个问题:

      /gs/BUCKET
      

      【讨论】:

        猜你喜欢
        • 2020-09-17
        • 1970-01-01
        • 1970-01-01
        • 2015-10-10
        • 2017-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-20
        相关资源
        最近更新 更多