我正在尝试为 AWS 中的现有存储桶设置生命周期规则。下面是我正在使用的代码:
IAmazonS3 client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1);
LifecycleConfiguration newConfiguration = new LifecycleConfiguration
{
Rules = new List<LifecycleRule>
{
new LifecycleRule
{
Expiration = new LifecycleRuleExpiration { Days = 2 },
}
}
};
PutLifecycleConfigurationRequest putRequest = new PutLifecycleConfigurationRequest
{
BucketName = "test-bucket",
Configuration = newConfiguration
};
client.PutLifecycleConfiguration(putRequest);
当我运行上面的代码时,我不断收到错误消息:
Amazon.S3.AmazonS3Exception: 'The XML you provided was not well-formed or did not validate against our published schema'
我不知道我做错了什么。我对 AWS 非常陌生。
任何帮助将不胜感激。
最佳答案
看起来 S3 生命周期配置需要 PutLifecycleConfigurationRequest 中的前缀。因此,修改您的请求以包含如下所示的前缀应该适合您。
var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1);
var lifecycleConfiguration = new LifecycleConfiguration
{
Rules = new List<LifecycleRule>
{
new LifecycleRule
{
Filter = new LifecycleFilter
{
LifecycleFilterPredicate = new LifecyclePrefixPredicate
{
Prefix = "someprefix/"
}
},
Expiration = new LifecycleRuleExpiration { Days = 2 }
}
}
};
var putLifecycleConfigurationRequest = new PutLifecycleConfigurationRequest
{
BucketName = "bucketName",
Configuration = lifecycleConfiguration
};
await client.PutLifecycleConfigurationAsync(putLifecycleConfigurationRequest);
默认情况下,上面创建的生命周期规则将被禁用。可以通过在请求中为 LifecycleRule 设置 Status = LifecycleRuleStatus.Enabled
来启用它。
如果您希望规则适用于整个存储桶,您可以将前缀设置为空。
编辑:尽管 documentation提到过滤器是可选的,我怀疑 note提到LifecycleRuleFilter Prefix可能是 XML 错误的原因。 (也许前缀的默认值有一些问题,因此引发问题中提到的 XML 错误)
关于c# - 在C#中设置生命周期规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68199312/