问题描述
我正在尝试对GCP存储桶进行对象生命周期管理。我想删除存储桶中对象具有2个较新版本的所有文件。为此,我创建了以下规则
{
"lifecycle": {
"rule": [
{
"action": {"type": "Delete"},"condition": {
"numNewerVersions": 2
}
}
]
}
}
已在存储桶上启用版本控制,如下所示验证
$ gsutil versioning get gs://<my bucket>/
gs://<my bucket>/: Enabled
inputFIle.txt在存储桶中具有三个修订版本,如下所示。
gsutil ls -a gs://bucketdataflowtest/
gs://<my bucket>//inputFile.txt#1597038772164786
gs://<my bucket>//inputFile.txt#1600169465982831
gs://<my bucket>//inputFile.txt#1600680502763401
gs://<my bucket>//jsonSchema.json#1597038769578689
gs://<my bucket>//transformCSVtoJSON.js#1597038773640155
应用规则后,我确认规则已应用
$ gsutil lifecycle get gs://<my bucket>/
{"rule": [{"action": {"type": "Delete"},"condition": {"numNewerVersions": 2}}]}
但是我看不到较旧的修订版本被删除。如下图所示,inputFIle.txt的4个修订版仍然存在,包括实时版本。
$ gsutil ls -la gs://<my bucket>/
209 2020-08-10T05:52:52Z gs://<my bucket>/inputFile.txt#1597038772164786 Metageneration=1
347 2020-09-15T11:31:05Z gs://<my bucket>/inputFile.txt#1600169465982831 Metageneration=1
347 2020-09-21T09:28:22Z gs://<my bucket>/inputFile.txt#1600680502763401 Metageneration=1
347 2020-09-21T09:48:00Z gs://<my bucket>/inputFile.txt#1600681680007546 Metageneration=1
571 2020-08-10T05:52:49Z gs://<my bucket>/jsonSchema.json#1597038769578689 Metageneration=1
495 2020-08-10T05:52:53Z gs://<my bucket>/transformCSVtoJSON.js#1597038773640155 Metageneration=1
我的生命周期规则有任何问题。该存储桶具有STANDARD存储类。
更新:
正如@guillaume blaquiere所澄清的那样,我将等待24小时检查该政策是否已生效。
在以下情况下,我需要进一步说明。
我已经编写了生命周期规则,以删除所有Live对象(如果它们已超过60天),而非当前版本则要在70天后删除。因此,当应用该规则时,所有超过60天的活动版本对象都将被删除。但是由于在存储桶上启用了对象版本控制,它将为删除的对象创建非当前版本。现在,由于相同规则中的第二个条件,将删除这些非当前版本。它会在70天后删除还是会在另外10天后删除。希望我清楚。以上情况的规则如下所示:
{
"lifecycle": {
"rule": [
{
"action": {"type": "Delete"},"condition": {
"age": 60,"isLive": true
}
},{
"action": {"type": "Delete"},"condition": {
"age": 70,"isLive": false
}
}
]
}
}
请澄清
解决方法
生命周期是一个异步过程,您的配置最多可能需要24小时才能考虑在内。您不知道它何时扫描您的存储桶。 the documentation
中的详细信息Cloud Storage会定期检查配置了对象生命周期管理的存储桶中的所有对象,并根据存储桶的规则执行所有适用的操作。 Cloud Storage异步执行操作,因此在满足条件和采取操作之间可能会有时间间隔。
对生命周期配置的更新最多可能需要24小时才能生效。这意味着当您更改生命周期配置时,对象生命周期管理可能仍会基于旧配置执行操作长达24小时。