Trying to set an expiration rule with PutLifecycleConfiguration. I am using .NET and AWS SDK for that. I do a GetLifecycleConfiguration first, to ensure I’m not deleting any existing policies and append an expiration rule with N days.
This works perfectly well with other S3 APIs, but with Tigris I am getting an exception
Lifecycle only supports expiration rule. Expiration rule with content days or dates only.
It’s a bit awkward, because it’s exactly what I am trying to do, set an expiration rule with days. Here’s the gist of the code
var lifecycleConfigurationResponse = await s3Client.GetLifecycleConfigurationAsync( bucketName, cancellationToken );
var lifecycleConfigurationRules = lifecycleConfigurationResponse.Configuration.Rules.Except(
lifecycleConfigurationResponse.Configuration.Rules.Where( r => r.Id == "messages-retention-policy" )
)
.Append(
new LifecycleRule
{
Id = "messages-retention-policy",
Filter = new()
{
LifecycleFilterPredicate = new LifecyclePrefixPredicate
{
Prefix = "messages/"
}
},
Status = LifecycleRuleStatus.Enabled,
Expiration = new LifecycleRuleExpiration
{
Days = Math.Max( 1, (int)options.RetentionPeriod.TotalDays )
}
}
)
.ToList();
var putLifecycleRequest = new PutLifecycleConfigurationRequest
{
BucketName = bucketName,
Configuration = new LifecycleConfiguration
{
Rules = lifecycleConfigurationRules
}
};
var putLifecycleResponse = await s3Client.PutLifecycleConfigurationAsync( putLifecycleRequest, cancellationToken );