メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

AWS SDK for Java を使用したオブジェクトのライフサイクルの管理

AWS SDK for Java を使用して、バケットのライフサイクル設定を管理できます。ライフサイクル設定の管理の詳細については、「オブジェクトのライフサイクル管理」を参照してください。

このセクションでは、次の表でタスクのサンプルコードの一部を示します(完全なサンプルプログラムは後述)。

ライフサイクル設定をバケットに追加するには

  1. BucketLifecycleConfiguration.Rule オブジェクトを作成してルールを指定します。

  2. ルールを使用して BucketLifecycleConfiguration オブジェクトを作成します。

  3. s3Client.setBucketLifecycleConfiguration() を呼び出して、ライフサイクル設定をバケットに追加します。

次の Java コードスニペットは、前述のタスクの例です。ライフサイクル設定では 1 つのルール(「アーカイブおよび削除ルール」)を定義し、その中でキープレフィックス「projectdocs/」の付いたすべてのオブジェクトに対して Amazon S3 が実行する 2 つのアクションを指定しています。

Copy
Transition transToArchive = new Transition() .withDays(365) .withStorageClass(StorageClass.Glacier); BucketLifecycleConfiguration.Rule ruleArchiveAndExpire = new BucketLifecycleConfiguration.Rule() .withId("Archive and delete rule") .withPrefix("projectdocs/") .withTransition(transToArchive) .withExpirationInDays(3650) .withStatus(BucketLifecycleConfiguration.ENABLED.toString()); List<BucketLifecycleConfiguration.Rule> rules = new ArrayList<BucketLifecycleConfiguration.Rule>(); rules.add(ruleArchiveAndExpire); BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration() .withRules(rules); // Save configuration. s3Client.setBucketLifecycleConfiguration(bucketName, configuration);

バケットがバージョニングに対応している場合は、Amazon S3 のライフサイクルアクション NoncurrentVersionExpirationNoncurrentVersionTransition を指定し、以下の Java コードスニペットに示すように、最新バージョンでなくなったオブジェクトを移行および削除することができます。このライフサイクルルールは、キープレフィックス「logs/」が付いているオブジェクトに適用されます。このルールは 2 つのアクションを設定します。NoncurrentVersionTransition アクションは、Amazon S3 に対して、オブジェクトのバージョンが最新でなくなってから 10 日後にオブジェクトを GLACIER ストレージクラスに移行するようリクエストします。NoncurrentVersionExpiration アクションは、Amazon S3 に対して、オブジェクトのバージョンが最新でなくなってから 30 日後にオブジェクトを有効期限切れとするようリクエストします。これらのアクションの詳細については、「ライフサイクル設定の要素」を参照してください。

Copy
Transition transToArchive = new Transition() .withDays(365) .withStorageClass(StorageClass.Glacier); BucketLifecycleConfiguration.Rule nonCurrentObjectRule = new BucketLifecycleConfiguration.Rule() .withId("test") .withPrefix("logs/") .withStatus(BucketLifecycleConfiguration.ENABLED.toString()) .withNoncurrentVersionTransition(new NoncurrentVersionTransition() .withDays(10) .withStorageClass(StorageClass.Glacier)) .withNoncurrentVersionExpirationInDays(30); List<BucketLifecycleConfiguration.Rule> rules = new ArrayList<BucketLifecycleConfiguration.Rule>(); rules.add(nonCurrentObjectRule); BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration() .withRules(rules); // Save configuration. s3Client.setBucketLifecycleConfiguration(bucketName, configuration);

既存のライフサイクル設定を更新するには

  • ライフサイクル設定をバケットに追加すると、既存のライフサイクル設定が置き換わります。既存のライフサイクル設定を更新するには、以下の Java コードスニペットに示すように、まず既存のライフサイクル設定を取得し、変更を加えてから、修正済みのライフサイクル設定をバケットに追加する必要があります。

このコードは、既存の設定を取得して、ID が NewRule の新しいルールを追加する例です。

Copy
// Retrieve configuration. configuration = s3Client.getBucketLifecycleConfiguration(bucketName); // Add a new rule. Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT")); c.add(Calendar.YEAR, 10); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); configuration.getRules().add( new BucketLifecycleConfiguration.Rule() .withId("NewRule") .withPrefix("YearlyDocuments/") .withExpirationDate(c.getTime()) .withStatus(BucketLifecycleConfiguration. ENABLED.toString()) ); // Save configuration. s3Client.setBucketLifecycleConfiguration(bucketName, configuration);

例 プログラムリスト

次の Java コード例は、バケットに対してライフサイクル設定を追加、更新、および削除する完全なコードのリストです。コードを更新し、ライフサイクル設定例の追加先となるバケット名を指定する必要があります。

作業サンプルを作成およびテストする方法については、「Java コード例のテスト」を参照してください。

Copy
import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.TimeZone; import com.amazonaws.auth.PropertiesCredentials; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.AmazonS3Exception; import com.amazonaws.services.s3.model.BucketLifecycleConfiguration; import com.amazonaws.services.s3.model.BucketLifecycleConfiguration.Transition; import com.amazonaws.services.s3.model.StorageClass; public class S3LifecycleExample { public static String bucketName = "*** Provide bucket name ***"; public static AmazonS3Client s3Client; public static void main(String[] args) throws IOException { s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); try { BucketLifecycleConfiguration.Rule rule1 = new BucketLifecycleConfiguration.Rule() .withId("Archive immediately rule") .withPrefix("glacierobjects/") .withTransition(new Transition() .withDays(0) .withStorageClass(StorageClass.Glacier)) .withStatus(BucketLifecycleConfiguration.ENABLED.toString()); BucketLifecycleConfiguration.Rule rule2 = new BucketLifecycleConfiguration.Rule() .withId("Archive and then delete rule") .withPrefix("projectdocs/") .withTransition(new Transition() .withDays(365) .withStorageClass(StorageClass.Glacier)) .withExpirationInDays(3650) .withStatus(BucketLifecycleConfiguration.ENABLED.toString()); List<BucketLifecycleConfiguration.Rule> rules = new ArrayList<BucketLifecycleConfiguration.Rule>(); rules.add(rule1); rules.add(rule2); BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration() .withRules(rules); // Save configuration. s3Client.setBucketLifecycleConfiguration(bucketName, configuration); // Retrieve configuration. configuration = s3Client.getBucketLifecycleConfiguration(bucketName); // Add a new rule. Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT")); c.add(Calendar.YEAR, 10); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); configuration.getRules().add( new BucketLifecycleConfiguration.Rule() .withId("NewRule") .withPrefix("YearlyDocuments/") .withExpirationDate(c.getTime()) .withStatus(BucketLifecycleConfiguration. ENABLED.toString()) ); // Save configuration. s3Client.setBucketLifecycleConfiguration(bucketName, configuration); // Retrieve configuration. configuration = s3Client.getBucketLifecycleConfiguration(bucketName); // Verify there are now three rules. configuration = s3Client.getBucketLifecycleConfiguration(bucketName); System.out.format("Expected # of rules = 3; found: %s\n", configuration.getRules().size()); // Delete configuration. s3Client.deleteBucketLifecycleConfiguration(bucketName); // Retrieve nonexistent configuration. configuration = s3Client.getBucketLifecycleConfiguration(bucketName); String s = (configuration == null) ? "No configuration found." : "Configuration found."; System.out.println(s); } catch (AmazonS3Exception amazonS3Exception) { System.out.format("An Amazon S3 error occurred. Exception: %s", amazonS3Exception.toString()); } catch (Exception ex) { System.out.format("Exception: %s", ex.toString()); } } }