c# - 在C#中设置生命周期规则

标签 c# amazon-web-services amazon-s3

我正在尝试为 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/

相关文章:

c# - 是否可以在 .NET 中使用两个不同名称的相同属性

c# - 使用 Json.Net 解析 JSON 数组

amazon-web-services - 在 Terraform 中插入数据源名称

javascript - 无法使用javascript连接网络套接字

javascript - 为什么对象值被插入数组 3 次?

c# - 获取所有(Properties.Resources)存储在字典中

c# - rabbitmq 连接最佳实践我们是否在发布者中保持持久连接

amazon-web-services - 如何禁用 ${appName}.elasticbeanstalk.com URL?

Ruby - 使用 fog 在现有 s3 文件的末尾追加内容

amazon-s3 - 将 parquet 文件写入 S3 存储桶后 Apache Spark 挂起