Path: blob/master/code_examples/java_examples/S3Examples/LifecycleConfiguration.java
4084 views
// Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.1// SPDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-s3-developer-guide/blob/master/LICENSE-SAMPLECODE.)23import java.io.IOException;4import java.util.Arrays;56import com.amazonaws.AmazonServiceException;7import com.amazonaws.SdkClientException;8import com.amazonaws.auth.profile.ProfileCredentialsProvider;9import com.amazonaws.services.s3.AmazonS3;10import com.amazonaws.services.s3.AmazonS3ClientBuilder;11import com.amazonaws.services.s3.model.BucketLifecycleConfiguration;12import com.amazonaws.services.s3.model.BucketLifecycleConfiguration.Transition;13import com.amazonaws.services.s3.model.StorageClass;14import com.amazonaws.services.s3.model.Tag;15import com.amazonaws.services.s3.model.lifecycle.LifecycleAndOperator;16import com.amazonaws.services.s3.model.lifecycle.LifecycleFilter;17import com.amazonaws.services.s3.model.lifecycle.LifecyclePrefixPredicate;18import com.amazonaws.services.s3.model.lifecycle.LifecycleTagPredicate;1920public class LifecycleConfiguration {2122public static void main(String[] args) throws IOException {23String clientRegion = "*** Client region ***";24String bucketName = "*** Bucket name ***";2526// Create a rule to archive objects with the "glacierobjects/" prefix to Glacier immediately.27BucketLifecycleConfiguration.Rule rule1 = new BucketLifecycleConfiguration.Rule()28.withId("Archive immediately rule")29.withFilter(new LifecycleFilter(new LifecyclePrefixPredicate("glacierobjects/")))30.addTransition(new Transition().withDays(0).withStorageClass(StorageClass.Glacier))31.withStatus(BucketLifecycleConfiguration.ENABLED);3233// Create a rule to transition objects to the Standard-Infrequent Access storage class34// after 30 days, then to Glacier after 365 days. Amazon S3 will delete the objects after 3650 days.35// The rule applies to all objects with the tag "archive" set to "true".36BucketLifecycleConfiguration.Rule rule2 = new BucketLifecycleConfiguration.Rule()37.withId("Archive and then delete rule")38.withFilter(new LifecycleFilter(new LifecycleTagPredicate(new Tag("archive", "true"))))39.addTransition(new Transition().withDays(30).withStorageClass(StorageClass.StandardInfrequentAccess))40.addTransition(new Transition().withDays(365).withStorageClass(StorageClass.Glacier))41.withExpirationInDays(3650)42.withStatus(BucketLifecycleConfiguration.ENABLED);4344// Add the rules to a new BucketLifecycleConfiguration.45BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration()46.withRules(Arrays.asList(rule1, rule2));4748try {49AmazonS3 s3Client = AmazonS3ClientBuilder.standard()50.withCredentials(new ProfileCredentialsProvider())51.withRegion(clientRegion)52.build();5354// Save the configuration.55s3Client.setBucketLifecycleConfiguration(bucketName, configuration);5657// Retrieve the configuration.58configuration = s3Client.getBucketLifecycleConfiguration(bucketName);5960// Add a new rule with both a prefix predicate and a tag predicate.61configuration.getRules().add(new BucketLifecycleConfiguration.Rule().withId("NewRule")62.withFilter(new LifecycleFilter(new LifecycleAndOperator(63Arrays.asList(new LifecyclePrefixPredicate("YearlyDocuments/"),64new LifecycleTagPredicate(new Tag("expire_after", "ten_years"))))))65.withExpirationInDays(3650)66.withStatus(BucketLifecycleConfiguration.ENABLED));6768// Save the configuration.69s3Client.setBucketLifecycleConfiguration(bucketName, configuration);7071// Retrieve the configuration.72configuration = s3Client.getBucketLifecycleConfiguration(bucketName);7374// Verify that the configuration now has three rules.75configuration = s3Client.getBucketLifecycleConfiguration(bucketName);76System.out.println("Expected # of rules = 3; found: " + configuration.getRules().size());7778// Delete the configuration.79s3Client.deleteBucketLifecycleConfiguration(bucketName);8081// Verify that the configuration has been deleted by attempting to retrieve it.82configuration = s3Client.getBucketLifecycleConfiguration(bucketName);83String s = (configuration == null) ? "No configuration found." : "Configuration found.";84System.out.println(s);85}86catch(AmazonServiceException e) {87// The call was transmitted successfully, but Amazon S3 couldn't process88// it, so it returned an error response.89e.printStackTrace();90}91catch(SdkClientException e) {92// Amazon S3 couldn't be contacted for a response, or the client93// couldn't parse the response from Amazon S3.94e.printStackTrace();95}96}97}9899