我(不幸的是)正在使用日立容器平台S3,我需要每2分钟将大约400张图像同步到一个存储桶中。文件名总是相同的,同步会用最新的图像“更新”原始文件。

最初,我无法覆盖现有文件。与其他平台不同,在HCP上,当版本控制被禁用时,您不能更新已经存在的文件,它返回409并且不会存储文件,所以我启用了版本控制,允许覆盖文件。

现在的问题是,HCP被设置为为我的存储桶保留旧版本0天(我的S3管理员说,这应该会导致它不保留任何版本),并且“保留删除的版本”也被禁用,但存储桶仍然充满了对象(每2分钟400个文件=每天约288K)。它似乎以这个数量封顶,在第一天之后,它永久保持在288K(这似乎最终会在1天后删除旧版本)。

下面是一个模拟问题的示例脚本:

# Generate 400 files with the current date/time in them
for i in $(seq -w 1 400); do
  echo $(date +'%Y%m%d%H%M%S') > "file_${i}.txt"
done

# Sync the current directory to the bucket
aws --endpoint-url $HCP_HOST s3 sync . s3://$HCP_BUCKET/

# Run this a few times to simulate the 2 minute upload cycle

最初的同步非常快,只需不到5秒,但在一天中,随着存储桶开始获得更多版本,它变得越来越慢,最终有时需要超过2分钟才能同步文件(这很糟糕,因为我需要每2分钟同步一次文件)。

如果我尝试在1天后列出存储桶中的对象,列表中只会返回400个文件,但可能需要1分钟才能返回(这就是我需要添加--cli-read-timeout 0的原因):

# List all the files in the bucket
aws --endpoint-url $HCP_HOST s3 ls s3://$HCP_BUCKET/ --cli-read-timeout 0 --summarize                

# Output
Total Objects: 400
   Total Size: 400

我还可以列出并查看所有不需要的旧版本:

# List object versions and parse output with jq
aws --endpoint-url $HCP_HOST s3api list-object-versions --bucket $HCP_BUCKET --cli-read-timeout 0 | jq -c '.Versions[] | {"key": .Key, "version_id": .VersionId, "latest": .IsLatest}'

输出:

{"key":"file_001.txt","version_id":"107250810359745","latest":false}
{"key":"file_001.txt","version_id":"107250814851905","latest":false}
{"key":"file_001.txt","version_id":"107250827750849","latest":false}
{"key":"file_001.txt","version_id":"107250828383425","latest":false}
{"key":"file_001.txt","version_id":"107251210538305","latest":false}
{"key":"file_001.txt","version_id":"107251210707777","latest":false}
{"key":"file_001.txt","version_id":"107251210872641","latest":false}
{"key":"file_001.txt","version_id":"107251212449985","latest":false}
{"key":"file_001.txt","version_id":"107251212455681","latest":false}
{"key":"file_001.txt","version_id":"107251212464001","latest":false}
{"key":"file_001.txt","version_id":"107251212470209","latest":false}
{"key":"file_001.txt","version_id":"107251212644161","latest":false}
{"key":"file_001.txt","version_id":"107251212651329","latest":false}
{"key":"file_001.txt","version_id":"107251217133185","latest":false}
{"key":"file_001.txt","version_id":"107251217138817","latest":false}
{"key":"file_001.txt","version_id":"107251217145217","latest":false}
{"key":"file_001.txt","version_id":"107251217150913","latest":false}
{"key":"file_001.txt","version_id":"107251217156609","latest":false}
{"key":"file_001.txt","version_id":"107251217163649","latest":false}
{"key":"file_001.txt","version_id":"107251217331201","latest":false}
{"key":"file_001.txt","version_id":"107251217343617","latest":false}
{"key":"file_001.txt","version_id":"107251217413505","latest":false}
{"key":"file_001.txt","version_id":"107251217422913","latest":false}
{"key":"file_001.txt","version_id":"107251217428289","latest":false}
{"key":"file_001.txt","version_id":"107251217433537","latest":false}
{"key":"file_001.txt","version_id":"107251344110849","latest":true}
// ...

我以为我可以运行一个定期清理旧版本的作业,但我尝试删除旧版本,但失败了,出现错误:

# Try deleting an old version for the file_001.txt key
aws --endpoint-url $HCP_HOST s3api delete-object --bucket $HCP_BUCKET --key "file_001.txt" --version-id 107250810359745

# Error
An error occurred (NotImplemented) when calling the DeleteObject operation:
Only the current version of an object can be deleted.

我已经使用MinIO和AWS S3测试了这一点,我的用例在这两个平台上都运行得很好。

是否有我做得不正确的地方,或者HCP中是否有我缺失的设置,可以使我在同步时覆盖对象,而不保留以前的版本?或者,是否有方法手动删除以前的版本?

日立容器平台(HCP)S3-如何禁用或删除以前的版本?的更多相关文章

  1. AWS S3:403列出对象时使用,但创建对象时不使用

    我有一个AWSIAM策略,它有两个规则,都指向S3存储桶中的同一特定路径。用户只能列出/管理该路径内的文件。管理操作很好,但当涉及到列出文件时,我在该特定路径或其内部的任何内容中获得403。EKS服务是一个极其简单的Quarkus应用程序,它只有S3依赖性和基本功能。第一篇文章,如果我遗漏了任何信息或问题格式,请原谅我。我四处搜索,但没有一个相关的解决方案对我有效,所以我的JSON在被AWS读取时肯定有问题。

  2. 日立容器平台(HCP)S3-如何禁用或删除以前的版本?

    文件名总是相同的,同步会用最新的图像“更新”原始文件。与其他平台不同,在HCP上,当版本控制被禁用时,您不能更新已经存在的文件,它返回409并且不会存储文件,所以我启用了版本控制,允许覆盖文件。现在的问题是,HCP被设置为为我的存储桶保留旧版本0天,并且“保留删除的版本”也被禁用,但存储桶仍然充满了对象。是否有我做得不正确的地方,或者HCP中是否有我缺失的设置,可以使我在同步时覆盖对象,而不保留以前的版本?

  3. 从s3加载spring logback.xml

    类似地,当我们希望从本地机器中的根存储库之外选择logback.xml文件时,我们使用让我知道我们是否能做到这一点,以及如何做到?我尝试将env变量添加为这对我不起作用

随机推荐

  1. 如何扩展ATmega324PB微控制器的以下宏寄存器?

    我目前正在学习嵌入式,我有以下练习:展开以下宏寄存器:如果有人解决了这个问题,我将不胜感激,以便将来参考

  2. Python将ONNX运行时设置为返回张量而不是numpy数组

    在python中,我正在加载预定义的模型:然后我加载一些数据并运行它:到目前为止,它仍在正常工作,但我希望它默认返回Tensor列表,而不是numpy数组。我对ONNX和PyTorch都是新手,我觉得这是我在这里缺少的基本内容。这将使转换中的一些开销相同。

  3. 在macOS上的终端中使用Shell查找文件中的单词

    我有一个文本文件,其中有一行:我需要找到ID并将其提取到变量中。我想出了一个RexEx模式:但它似乎对我尝试过的任何东西都不起作用:grep、sed——不管怎样。我的一个尝试是:我为这样一个看似愚蠢的问题感到抱歉,但我在互联网上找不到任何东西:我在SO和SE上读了几十个类似的问题,并在谷歌上搜索了几个教程,但仍然无法找到答案。欢迎提供任何指导!

  4. react-chartjs-2甜甜圈图中只有标题未更新

    我正在使用react-chartjs-2在我的网站中实现甜甜圈图。下面是我用来呈现图表的代码。我将甜甜圈图的详细信息从父组件传递到子组件,所有道具都正确传递。当我在beforeDraw函数外部记录props.title时,它会记录正确的值,但当我在beforeDraw函数内部记录props.title时,它将记录标题的前一个值,从而呈现标题的前值。我在这里做错了什么?

  5. 如何在tkinter中使用Python生成器函数?

    生成器函数承诺使某些代码更易于编写。但我并不总是知道如何使用它们。假设我有一个斐波那契生成器函数fib(),我想要一个显示第一个结果的tkinter应用程序。当我点击“下一步”按钮时,它会显示第二个数字,依此类推。我如何构建应用程序来实现这一点?我可能需要在线程中运行生成器。但如何将其连接回GUI?

  6. 如何为每次提交将存储库历史记录拆分为一行?

    我正在尝试获取存储库的历史记录,但结果仅以单行文本的形式返回给我。

  7. 尝试在颤振项目上初始化Firebase时出错

    当尝试在我的颤振项目上初始化firebase时,我收到了这个错误有人知道我能做什么吗?应用程序分级Gradle插件Gradle项目颤振相关性我已经将firebase设置为Google文档已经在另一个模拟器上尝试过,已经尝试过创建一个全新的模拟器,已经在不同的设备上尝试过了,已经尝试了特定版本的firebase,已经尝试添加但没有任何效果,已经在youtube上看到了关于它的每一个视频,该应用程序在android和iOS两个平台上都抛出了这个错误

  8. 在unix中基于当前日期添加新列

    我试图在unix中基于时间戳列在最后一个单元格中添加一个状态列。我不确定如何继续。

  9. 麦克斯·蒙特利。我一直得到UncaughtReferenceError:当我在终端中写入node-v时,节点未定义

    如果这是您应该知道的,请确认:我已将所有shell更改为默认为zsh。当我在终端中写入node-v时,我一直收到“UncaughtReferenceError:nodeisnotdefined”。但它显示节点已安装。我是个新手,在这方面经验不足。

  10. 如何在前端单击按钮时调用后端中的函数?

    那么如何在后端添加一个新的端点,点击按钮调用这个函数。

返回
顶部