如何修复 GCP CommandException 中的错误:不允许跨越提供程序的“lifecycle”命令

问题描述 投票:0回答:3

我现在正在学习GCP。我有一个名为 welynx-test1_copy 的存储桶 我想为其设置生命周期策略,以便在 23 天后删除存储桶,按照命令帮助,我在 CLI 中执行了以下命令:

xenonxie@cloudshell:~ (rock-perception-263016)$ gsutil ls
gs://rock-perception-263016.appspot.com/
gs://staging.rock-perception-263016.appspot.com/
gs://welynx-test1/
gs://welynx-test1_copy/

因此您可以看到存储桶存在。

设置以下策略会导致我出错:

xenonxie@cloudshell:~ (rock-perception-263016)$ gsutil lifecycle set {"rule": [{"action": {"type": "Delete"}, "condition": {"age": 23}}]} gs://welynx-test1_copy

CommandException:不允许跨越提供程序的“生命周期”命令。

我尝试遵循

help
中找到的语法,如下所示:

xenonxie@cloudshell:~ (rock-perception-263016)$ gsutil 生命周期 --help NAME生命周期 - 获取或设置存储桶的生命周期配置

概要 gsutil 生命周期获取 url gsutil 生命周期集 配置 json 文件 url...

描述生命周期命令可用于获取或设置 给定存储桶的生命周期管理策略。这个命令 仅支持存储桶,不支持对象。欲了解更多信息 对象生命周期管理,请参见

Google Cloud Storage
  docs <https://cloud.google.com/storage/docs/lifecycle>
_.

生命周期命令有两个子命令: GET 获取生命周期 给定存储桶的配置。您可以获取生命周期 一次仅配置一个存储桶。输出可以是
重定向到一个文件,编辑然后通过集合更新 子命令。

SET 设置一个或多个存储桶的生命周期配置。这 命令行上指定的 config-json-file 应该是 包含生命周期配置 JSON 文档的本地文件。

示例 以下生命周期配置 JSON 文档 指定此桶中所有大于 365 的对象 天数将被自动删除:

{
  "rule":
  [
    {
      "action": {"type": "Delete"},
      "condition": {"age": 365}
    }
  ]
}

以下(空)生命周期配置 JSON 文档删除 存储桶的所有生命周期配置:

{}

我在这里缺少什么以及如何解决它?非常感谢。

google-cloud-platform lifecycle gsutil
3个回答
2
投票

您的命令的问题在于您将规则放入要运行的命令而不是配置文件中。

做法是:

  • 使用生命周期配置规则创建 JSON 文件
  • 像这样使用生命周期集
    gsutil lifecycle set [CONFIG_FILE] gs://[BUCKET_NAME]

基本上,您可以按照您给出的示例输入:

{
  "rule":
  [
    {
      "action": {"type": "Delete"},
      "condition": {"age": 23}
    }
  ]
}

并使用您创建的 JSON 文件更改 CONFIG_FILE。


0
投票

显然,

gsutil
检查存储桶名称是否属于google之前检查生命周期文件是否存在:

❯ gsutil lifecycle set foo bar gs://baz
CommandException: "lifecycle" command spanning providers not allowed.

❯ gsutil lifecycle set foo gs://baz
AccessDeniedException: 403 [email protected] does not have storage.buckets.get access to baz.

❯ gsutil lifecycle set foo gs://a-real-bucket-name
Setting lifecycle configuration on gs://a-real-bucket-name/...
ArgumentException: JSON lifecycle data could not be loaded from:

因此,如果您在第五个位置提供除谷歌控制的存储桶以外的任何内容:

gsutil lifecycle set file.json THIS_ARGUMENT

您将看到与该问题相关的错误而不是与文件相关的错误。

这也让我困惑,我认为谷歌可以对 gsutil 进行一些简单的修改,以使错误消息更有帮助。我已经在这里提交了一个错误:https://issuetracker.google.com/issues/147020031


0
投票

对我来说,当我尝试将存储桶的名称放入导出的变量中,然后尝试在 gsutil 命令中使用时,我遇到了这个问题 running with and without variable

© www.soinside.com 2019 - 2024. All rights reserved.