GCP 存储版本控制:删除具有两个以上修订版的文件
GCP Storage versioning: Deleting files with more than two revisions
我正在尝试对 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
我的生命周期规则有什么问题。该存储桶具有标准存储 class.
更新:
正如@guillaume blaquiere 所阐明的那样,我将等待 24 小时以检查该政策是否已生效。
我需要对以下情况进行进一步说明。
我已经编写了生命周期规则来删除超过 60 天的所有 Live 对象,并在 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 regularly inspects all the objects in a bucket for which Object Lifecycle Management is configured and performs all actions applicable according to the bucket's rules. Cloud Storage performs an action asynchronously, so there can be a lag between when the conditions are satisfied and when the action is taken.
Updates to your lifecycle configuration may take up to 24 hours to go into effect. This means that when you change your lifecycle configuration, Object Lifecycle Management may still perform actions based on the old configuration for up to 24 hours.
有点晚了,但为了防止其他人阅读此主题,这里是“更新”中附加问题的答案:
[TL;DR] 将在 10 天后删除。
正如此documentation“年龄是从对象的创建时间开始计算的。”,以及当您在 GCP 控制台中创建生命周期规则时作为信息气泡,“年龄是从对象的创建时间开始计算的”对象已上传到当前存储桶,即使它是从另一个存储桶移来的”。
因此,将对象状态从 Live 更新为 Noncurrent 不会更改 Age,这就是为什么对于这个不同的用例有一个名为“成为非当前天数”的选项。
因此它将在额外 10 天后被删除。
我正在尝试对 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
我的生命周期规则有什么问题。该存储桶具有标准存储 class.
更新:
正如@guillaume blaquiere 所阐明的那样,我将等待 24 小时以检查该政策是否已生效。
我需要对以下情况进行进一步说明。
我已经编写了生命周期规则来删除超过 60 天的所有 Live 对象,并在 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 regularly inspects all the objects in a bucket for which Object Lifecycle Management is configured and performs all actions applicable according to the bucket's rules. Cloud Storage performs an action asynchronously, so there can be a lag between when the conditions are satisfied and when the action is taken.
Updates to your lifecycle configuration may take up to 24 hours to go into effect. This means that when you change your lifecycle configuration, Object Lifecycle Management may still perform actions based on the old configuration for up to 24 hours.
有点晚了,但为了防止其他人阅读此主题,这里是“更新”中附加问题的答案:
[TL;DR] 将在 10 天后删除。
正如此documentation“年龄是从对象的创建时间开始计算的。”,以及当您在 GCP 控制台中创建生命周期规则时作为信息气泡,“年龄是从对象的创建时间开始计算的”对象已上传到当前存储桶,即使它是从另一个存储桶移来的”。 因此,将对象状态从 Live 更新为 Noncurrent 不会更改 Age,这就是为什么对于这个不同的用例有一个名为“成为非当前天数”的选项。 因此它将在额外 10 天后被删除。