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

AWS SDK for .NET を使用するオブジェクトのライフサイクルの管理

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

ライフサイクル設定のバケットへの追加

  1. LifeCycleConfiguration クラスのインスタンスを作成し、LifecycleRules のリストを指定します。

  2. PutLifeCycleConfigurationRequest オブジェクトを作成します。

    バケット名と、前述のステップで作成した LifeCycleConfiguration インスタンスを指定する必要があります。

  3. client.PutLifecycleConfiguration を実行します。

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

Copy
string bucketName = "examplebucket"; // Add a sample configuration using (client = new AmazonS3Client()){ var lifeCycleConfiguration = new LifecycleConfiguration() { Rules = new List<LifecycleRule> { new LifecycleRule { Id = "Archive and delete rule", Prefix = "projectdocs/", Status = LifecycleRuleStatus.Enabled, Transition = new LifecycleTransition() { Days = 365, StorageClass = S3StorageClass.Glacier }, Expiration = new LifecycleRuleExpiration() { Days = 3650 } } } }; PutLifecycleConfigurationRequest request = new PutLifecycleConfigurationRequest { BucketName = bucketName, Configuration = configuration }; var response = client.PutLifecycleConfiguration(request); }

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

Copy
string bucketName = "versioningenabled-examplebucket"; // Add a sample configuration using (client = new AmazonS3Client()){ var lifeCycleConfiguration = new LifecycleConfiguration() { Rules = new List<LifecycleRule> { new LifecycleRule { Id = "new rule", Prefix = "logs/", Status = LifecycleRuleStatus.Enabled, NoncurrentVersionTransition = new LifecycleRuleNoncurrentVersionTransition() { NoncurrentDays = 10, StorageClass = S3StorageClass.Glacier }, NoncurrentVersionExpiration = new LifecycleRuleNoncurrentVersionExpiration() { NoncurrentDays = 30 } } } }; PutLifecycleConfigurationRequest request = new PutLifecycleConfigurationRequest { BucketName = bucketName, Configuration = configuration }; var response = client.PutLifecycleConfiguration(request); }

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

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

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

Copy
// Retrieve lifecycle configuration. GetLifecycleConfigurationRequest request = new GetLifecycleConfigurationRequest { BucketName = bucketName }; var response = client.GetLifecycleConfiguration(request); var configuration = response.Configuration; // Add new rule. configuration.Rules.Add(new LifecycleRule { Id = "NewRule", Prefix = "YearlyDocuments/", Expiration = new LifecycleRuleExpiration { Date = DateTime.Now.AddYears(10) } }); PutLifecycleConfigurationRequest request = new PutLifecycleConfigurationRequest { BucketName = bucketName, Configuration = configuration }; var response = client.PutLifecycleConfiguration(request);

例 プログラムリスト

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

作業サンプルを作成およびテストする方法については、『Using the AWS SDK for .NET』の「Testing the .NET Code Examples」を参照してください。

Copy
using System; using System.Collections.Generic; using System.Diagnostics; using Amazon.S3; using Amazon.S3.Model; namespace aws.amazon.com.s3.documentation { class S3Sample { static string bucketName = "*** Provide bucket name ***"; static AmazonS3 client; public static void Main(string[] args) { try { AmazonS3Config s3Config = new AmazonS3Config(); using (client = new AmazonS3Client(s3Config)) { var lifeCycleConfiguration = new LifecycleConfiguration() { Rules = new List<LifecycleRule> { new LifecycleRule { Id = "Archive immediately rule", Prefix = "glacierobjects/", Status = LifecycleRuleStatus.Enabled, Transition = new LifecycleTransition() { Days = 0, StorageClass = S3StorageClass.Glacier } }, new LifecycleRule { Id = "Archive and then delete rule", Prefix = "projectdocs/", Status = LifecycleRuleStatus.Enabled, Transition = new LifecycleTransition() { Days = 365, StorageClass = S3StorageClass.Glacier }, Expiration = new LifecycleRuleExpiration() { Days = 3650 } } } }; // Add the configuration to the bucket PutLifeCycleConfiguration(lifeCycleConfiguration); // Retrieve an existing configuration lifeCycleConfiguration = GetLifeCycleConfiguration(); // Add a new rule. lifeCycleConfiguration.Rules.Add(new LifecycleRule { Id = "NewRule", Prefix = "YearlyDocuments/", Expiration = new LifecycleRuleExpiration { Date = DateTime.Now.AddYears(10) } }); // Add the configuration to the bucket PutLifeCycleConfiguration(lifeCycleConfiguration); // Verify that there are now three rules lifeCycleConfiguration = GetLifeCycleConfiguration(); Console.WriteLine("Expected # of rulest=3; found:{0}", lifeCycleConfiguration.Rules.Count); // Delete the configuration DeleteLifecycleConfiguration(); // Retrieve a nonexistent configuration lifeCycleConfiguration = GetLifeCycleConfiguration(); Debug.Assert(lifeCycleConfiguration == null); } Console.WriteLine("Example complete. To continue, click Enter..."); Console.ReadKey(); } catch (AmazonS3Exception amazonS3Exception) { Console.WriteLine("S3 error occurred. Exception: " + amazonS3Exception.ToString()); } catch (Exception e) { Console.WriteLine("Exception: " + e.ToString()); } } static void PutLifeCycleConfiguration(LifecycleConfiguration configuration) { PutLifecycleConfigurationRequest request = new PutLifecycleConfigurationRequest { BucketName = bucketName, Configuration = configuration }; var response = client.PutLifecycleConfiguration(request); } static LifecycleConfiguration GetLifeCycleConfiguration() { GetLifecycleConfigurationRequest request = new GetLifecycleConfigurationRequest { BucketName = bucketName }; var response = client.GetLifecycleConfiguration(request); var configuration = response.Configuration; return configuration; } static void DeleteLifecycleConfiguration() { DeleteLifecycleConfigurationRequest request = new DeleteLifecycleConfigurationRequest { BucketName = bucketName }; client.DeleteLifecycleConfiguration(request); } } }