【问题标题】:Setting the lifecycle rule in C#在 C# 中设置生命周期规则
【发布时间】:2021-09-12 21:08:19
【问题描述】:

我正在尝试在 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 很陌生。

任何帮助将不胜感激。

【问题讨论】:

  • 对上述问题的任何帮助将不胜感激

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


【解决方案1】:

看起来 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 提到过滤器是可选的,我怀疑LifecycleRuleFilter Prefix 提到的note 可能是XML 错误的原因。 (可能前缀的默认值存在一些问题,因此会引发问题中提到的 XML 错误)

【讨论】:

  • 我在发布问题之前尝试了前缀,。我收到一条警告说 LifeCycleRule.prefix 已过时。此属性已过时。请改用 filter 属性。我尝试使用 filter 属性,但不知道如何使用它。我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2012-04-07
  • 2020-11-29
相关资源
最近更新 更多