

# バケットに S3 ライフサイクル設定を設定する
<a name="how-to-set-lifecycle-configuration-intro"></a>

Amazon S3 コンソール、AWS Command Line Interface (AWS CLI)、AWS SDK、または Amazon S3 REST API を使用して、バケットに Amazon S3 ライフサイクル設定を指定できます。S3 ライフサイクル設定については、「[オブジェクトのライフサイクルの管理](object-lifecycle-mgmt.md)」を参照してください。

**注記**  
ディレクトリバケットのライフサイクル設定を表示または編集するには、AWS CLI、AWS SDK、または Amazon S3 REST API を使用します。詳細については、「[ディレクトリバケットの S3 ライフサイクルの使用](directory-buckets-objects-lifecycle.md)」を参照してください。

S3 ライフサイクル設定では、ライフサイクルルールを使用して、オブジェクトの存続期間中に Amazon S3 が実行するアクションを定義します。**例えば、オブジェクトを別のストレージクラスに移行したり、オブジェクトをアーカイブしたり、指定した期間後にオブジェクトを期限切れ (削除) したりするルールを定義できます。

## S3 ライフサイクルに関する考慮事項
<a name="lifecycle-considerations"></a>

ライフサイクル設定を設定する前に、次の点に注意してください。

**ライフサイクル設定の伝播の遅延**  
バケットに対してライフサイクル設定を追加する場合、新しい、あるいは更新された S3 ライフサイクル設定がすべての Amazon S3 システムに完全に伝達されるまでには、通常、多少のタイムラグがあります。ライフサイクル設定が完全に有効になるまで、数分間程度の遅延を想定してください。この遅延は、S3 ライフサイクル設定を削除するときにも発生することがあります。

**移行または有効期限の遅延**  
ライフサイクルルールが満たされてから、ルールのアクションが完了するまでに遅延が生じる場合があります。例えば、ライフサイクルルールによって一連のオブジェクトの有効期限が 1 月 1 日に切れるとします。有効期限ルールは 1 月 1 日に満たされますが、Amazon S3 は数日後または数週間後までこれらのオブジェクトを実際に削除しない場合があります。この遅延は、S3 ライフサイクルがオブジェクトを移行または有効期限のためのキューに非同期的に入れるために発生します。請求の変更は、通常、アクションが完了していなくても、ライフサイクルルールが満たされた際に適用されます。詳細については、「[請求の変更](#lifecycle-billing)」を参照してください。アクティブなライフサイクルルールによって行われた更新の影響をモニタリングするには、「[ライフサイクルルールによって実行されたアクションをモニタリングするにはどうすればよいですか？](troubleshoot-lifecycle.md#troubleshoot-lifecycle-2)」を参照してください。

**ライフサイクルルールの更新、無効化、または削除**  
ライフサイクルルールを無効にする、あるいは削除すると、わずかなタイムラグの後に、Amazon S3 は新しいオブジェクトの削除や移行のスケジューリングを停止します。スケジュール済みのオブジェクトはスケジュール解除され、削除または移行されません。

**注記**  
ライフサイクルルールを更新、無効化、または削除する前に、`LIST` API オペレーション ([https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html) など) または [S3 インベントリを使用したデータのカタログ化と分析](storage-inventory.md) を使用して、ユースケースに基づき、Amazon S3 が移行済みで対象となるオブジェクトの有効期限が切れていることを確認します。ライフサイクルルールの更新、無効化、削除に問題がある場合は、「[Amazon S3 ライフサイクル問題のトラブルシューティング](troubleshoot-lifecycle.md)」を参照してください。

**既存のオブジェクトと新しいオブジェクト**  
ライフサイクル設定をバケットに追加すると、設定ルールは既存のオブジェクトとそれ以降に追加されるオブジェクトの両方に適用されます。例えば、特定のプレフィックスが付いたオブジェクトが作成から 30 日後に有効期限を迎えるようにする失効アクションを備えたライフサイクル設定ルールを本日追加すると、Amazon S3 により作成から 30 日以上が経過し、指定されたプレフィックスを持つ既存のオブジェクトがすべて削除キューに追加されます。

**ライフサイクルルールの影響のモニタリング**  
アクティブなライフサイクルルールによって行われた更新の影響をモニタリングするには、「[ライフサイクルルールによって実行されたアクションをモニタリングするにはどうすればよいですか？](troubleshoot-lifecycle.md#troubleshoot-lifecycle-2)」を参照してください。

**請求の変更**  
ライフサイクル設定のルールが満たされてから、実際にアクションが実行されるまでの間には、遅延が発生する場合があります。ただし、アクションが実行されていなくても、ライフサイクル設定のルールが満たされた段階で、請求にはすぐに変更が反映されます。

たとえば、オブジェクトの有効期限が切れると、オブジェクトがすぐに削除されなくても、そのストレージは課金対象から外されます。同様に、オブジェクトの移行期間を過ぎると、オブジェクトがすぐに S3 Glacier Flexible Retrieval ストレージクラスに移行されていなくても、S3 Glacier Flexible Retrieval ストレージ料金が請求されます。

ただし、S3 Intelligent-Tiering ストレージクラスへのライフサイクルの移行については例外です。オブジェクトが S3 Intelligent-Tiering ストレージクラスに移行するまで、請求の変更は行われません。

**複数のルールまたは競合するルール**  
S3 ライフサイクル設定に複数のルールがある場合、1 つのオブジェクトが同じ日に複数の S3 ライフサイクルアクションの対象になることがあります。このような場合、Amazon S3 は以下の一般的なルールに従います。
+ 完全な削除は、移行より優先されます。
+ 移行は、[削除マーカー](DeleteMarker.md)の作成より優先されます。
+ オブジェクトが S3 Glacier Flexible Retrieval と S3 Standard-IA (または S3 One Zone-IA) 移行の両方の対象になる場合、Amazon S3 は S3 Glacier Flexible Retrieval 移行を選択します。

 例については「[重複するフィルタ、競合するライフサイクルアクションの例](lifecycle-conflicts.md#lifecycle-config-conceptual-ex5)」を参照してください。

## S3 ライフサイクル設定を設定する方法
<a name="how-to-set-lifecycle-configuration"></a>

Amazon S3 コンソール、AWS Command Line Interface (AWS CLI)、AWS SDK、または Amazon S3 REST API を使用して、汎用バケットに Amazon S3 ライフサイクル設定を指定できます。

AWS CloudFormation テンプレートと例の詳細については、「**CloudFormation ユーザーガイド」の「[AWS CloudFormation テンプレートの使用](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html)」および「[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-bucket.html#aws-resource-s3-bucket--examples](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-bucket.html#aws-resource-s3-bucket--examples)」を参照してください。

### S3 コンソールの使用
<a name="create-lifecycle"></a>

共有プレフィックス (共通の文字列から始まるオブジェクト名) またはタグを使用して、バケット内のすべてのオブジェクトまたはオブジェクトのサブセットに対してライフサイクルルールを定義できます。ライフサイクルルールでは、現在のバージョンまたは以前のバージョンのオブジェクトに対して独自のアクションを定義できます。詳細については次を参照してください:
+ [オブジェクトのライフサイクルの管理](object-lifecycle-mgmt.md)
+ [S3 バージョニングによる複数のバージョンのオブジェクトの保持](Versioning.md)

**ライフサイクルルールを作成するには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左のナビゲーションペインで、**[汎用バケット]** を選択します。

1. バケットリストで、ライフサイクルルールを作成するバケットの名前を選択します。

1. [**Management (管理)**] タブを選択して、[**Create lifecycle rule (ライフサイクルルールを作成する)**] を選択します。

1. [**Lifecycle rule name (ライフサイクルルール名)**] に、ルールの名前を入力します。

   その名前はバケット内で一意である必要があります。

1. ライフサイクルルールのスコープを選択します。
   + *特定のプレフィックスまたはタグを持つすべてのオブジェクト*にこのライフサイクルルールを適用するには、[**スコープを特定のプレフィックスまたはタグに制限**] を選択します。
     + スコープをプレフィックスで制限するには、[**Prefix (プレフィックス)**] にプレフィックスを入力します。
     + スコープをタグで制限するには、[**Add tag (タグの追加)**] を選択してタグのキーと値を入力します。

     オブジェクト名のプレフィックスの詳細については、「[Amazon S3 オブジェクトに命名する](object-keys.md)」を参照してください。オブジェクトロックの詳細については、[タグを使用したオブジェクトの分類](object-tagging.md)をご参照ください。
   + このライフサイクルルールを**バケット内のすべてのオブジェクトに適用するには、**[このルールは、**バケット内のすべてのオブジェクトに適用されます]** を選択して、**[このライフサイクルルールがバケット内のすべてのオブジェクトに適用されることを了承します]** を選択します。

1. オブジェクトサイズでルールをフィルタリングするには、**[最小オブジェクトサイズを指定]**、**[最大オブジェクトサイズを指定]**、または両方のオプションを選択します。
   + **[最小オブジェクトサイズ]** または **[最大オブジェクトサイズ]** の値を指定する際は、0 バイトより大きく、50 TB 未満の範囲の値を指定する必要があります。この値はバイト、KB、MB、または GB で指定できます。
   + 両方の値を指定する際は、最大オブジェクトサイズを最小オブジェクトサイズよりも大きい値に設定する必要があります。
**注記**  
**[最小オブジェクトサイズ]** フィルターおよび **[最大オブジェクトサイズ]** フィルターは、指定された値を除外します。例えば、**[最小オブジェクトサイズ]** で 128 KB のオブジェクトを期限切れにするようにフィルターを設定した場合、128 KB ちょうどのオブジェクトは期限切れになりません。代わりに、このルールは 128 KB より大きいサイズのオブジェクトにのみ適用されます。

1. [**Lifecycle rule actions (ライフサイクルルールのアクション)**] で、ライフサイクルルールで実行するアクションを以下から選択します。
   + オブジェクトの*現在の*バージョンをストレージクラス間で移行する
   + オブジェクトの*以前の*バージョンをストレージクラス間で移動する
   + オブジェクトの*現在の*バージョンを期限切れにする
**注記**  
[S3 バージョニング](Versioning.md)が有効化されていないバケットの場合、現在のバージョンの有効期限が切れると、Amazon S3 はオブジェクトを完全に削除します。詳細については、「[ライフサイクルのアクションとバケットのバージョニング状態](intro-lifecycle-rules.md#lifecycle-actions-bucket-versioning-state)」を参照してください。
   + オブジェクトの*以前の*バージョンを完全に削除する
   + 期限切れの削除マーカーまたは未完了のマルチパートアップロードを削除する 

   選択したアクションに応じて、異なるオプションが表示されます。

1. オブジェクトの現在のバージョンをストレージクラス間で移行するには、**[オブジェクトの現在のバージョンをストレージクラス間で移行する]** で以下を行います。**

   1. **[ストレージクラスへの移行]** で、移行するストレージクラスを選択します。利用できる移行のリストについては、「[サポートされているライフサイクル移行](lifecycle-transition-general-considerations.md#supported-lifecycle-transitions)」を参照してください。以下のストレージクラスから選択できます。
      + S3 Standard – IA
      + S3 Intelligent-Tiering
      + S3 1 ゾーン - IA
      + S3 Glacier インスタント取得
      + S3 Glacier Flexible Retrieval
      + S3 Glacier Deep Archive

   1. [**Days after object creation (オブジェクトが作成されてからの日数)**] に、オブジェクトの作成から移行までの日数を入力します。

   ストレージクラスの詳細については、「[Amazon S3 ストレージクラスの理解と管理](storage-class-intro.md)」を参照してください。オブジェクトの現在のバージョンだけ、以前のバージョンだけ、または現在と以前の両方のバージョンについて、移行を定義できます。バージョニングを使用すると、1 つのバケットで複数バージョンのオブジェクトを維持できます。バージョニングの詳細については、「[S3 コンソールの使用](manage-versioning-examples.md#enable-versioning)」を参照してください。
**重要**  
S3 Glacier Instant Retrieval、S3 Glacier Flexible Retrieval あるいは Glacier Deep Archive ストレージクラスを選択した場合は、オブジェクトは Amazon S3 に保持されます。Amazon Glacier サービスを別途使用して直接アクセスすることはできません。詳細については、「[Amazon S3 ライフサイクルを使用したオブジェクトの移行](lifecycle-transition-general-considerations.md)」を参照してください。

1. ストレージクラス間で最新以外のオブジェクトを移行するには、**[オブジェクトの非現行バージョンをストレージクラス間で移行する]** で以下を行います。**

   1. **[ストレージクラスへの移行]** で、移行するストレージクラスを選択します。利用できる移行のリストについては、「[サポートされているライフサイクル移行](lifecycle-transition-general-considerations.md#supported-lifecycle-transitions)」を参照してください。以下のストレージクラスから選択できます。
      + S3 Standard – IA
      + S3 Intelligent-Tiering
      + S3 1 ゾーン - IA
      + S3 Glacier インスタント取得
      + S3 Glacier Flexible Retrieval
      + S3 Glacier Deep Archive

   1. **[Days after object becomes noncurrent]** に、オブジェクトの作成日から移行日までの日数を入力します。

1. オブジェクトの*現行*バージョンを期限切れにするには、**[Expire current versions of objects]** (オブジェクトの現行バージョンを期限切れにする) で、**[Number of days after object creation]** (オブジェクトの作成後の日数) に日数を入力します。
**重要**  
バージョニング非対応のバケットの場合、アクションを実行すると、Amazon S3 はオブジェクトを完全に削除します。ライフサイクルアクションの詳細については、「[ライフサイクルアクションを記述する要素](intro-lifecycle-rules.md#intro-lifecycle-rules-actions)」を参照してください。

1. オブジェクトの以前のバージョンを完全に削除するには、**[Permanently delete noncurrent versions of objects]** (現在のバージョンではないオブジェクトを完全に削除する) で、**[Days after objects become noncurrent]** (オブジェクトが最新バージョンでなくなってからの日数) に日数を入力します。オプションで、**[Number of newer versions to retain]** (保持する新しいバージョンの数) に値を入力して、保持する新しいバージョンの数を指定できます。

1. [**Delete expired delete markers or incomplete multipart uploads (期限切れの削除マーカーまたは未完了のマルチパートアップロードを削除する)**] で、[**Delete expired object delete markers (期限切れのオブジェクト削除マーカーを削除する)**] と [**Delete incomplete multipart uploads (不完全なマルチパートアップロードを削除)**] を選択します。次に、マルチパートアップロードの開始から未完了のマルチパートアップロードを終了してクリーンアップするまでの日数を入力します。

   マルチパートアップロードの詳細については、「[Amazon S3 でのマルチパートアップロードを使用したオブジェクトのアップロードとコピー](mpuoverview.md)」を参照してください。

1. [**Create rule**] を選択します。

   ルールにエラーがない場合は、Amazon S3 によって有効にされ、[**Management (管理)**] タブの [**Lifecycle rules (ライフサイクルルール)**] に表示されます。

### AWS CLI の使用
<a name="set-lifecycle-cli"></a>

次の AWS CLI コマンドを使用して、S3 ライフサイクル設定を管理できます。
+ `put-bucket-lifecycle-configuration`
+ `get-bucket-lifecycle-configuration`
+ `delete-bucket-lifecycle`

AWS CLI の設定の手順については、「Amazon S3 API リファレンス」の「[AWS CLI を使用した Amazon S3 での開発](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html)」を参照してください。**

Amazon S3 ライフサイクル設定は XML ファイルである点に注意してください。ただし、AWS CLI を使用する場合、XML 形式を指定することはできません。代わりに JSON 形式を指定する必要があります。XML ライフサイクル設定の例と、AWS CLI コマンドで指定できる同等の JSON の設定は、次のとおりです。

次のサンプル S3 ライフサイクル設定を検討してください。

**Example 例 1**  

**Example**  

```
<LifecycleConfiguration>
    <Rule>
        <ID>ExampleRule</ID>
        <Filter>
           <Prefix>documents/</Prefix>
        </Filter>
        <Status>Enabled</Status>
        <Transition>        
           <Days>365</Days>        
           <StorageClass>GLACIER</StorageClass>
        </Transition>    
        <Expiration>
             <Days>3650</Days>
        </Expiration>
    </Rule>
</LifecycleConfiguration>
```

```
{
    "Rules": [
        {
            "Filter": {
                "Prefix": "documents/"
            },
            "Status": "Enabled",
            "Transitions": [
                {
                    "Days": 365,
                    "StorageClass": "GLACIER"
                }
            ],
            "Expiration": {
                "Days": 3650
            },
            "ID": "ExampleRule"
        }
    ]
}
```

**Example 例 2**  

**Example**  

```
<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Rule>
        <ID>id-1</ID>
        <Expiration>
            <Days>1</Days>
        </Expiration>
        <Filter>
            <And>
                <Prefix>myprefix</Prefix>
                <Tag>
                    <Key>mytagkey1</Key>
                    <Value>mytagvalue1</Value>
                </Tag>
                <Tag>
                    <Key>mytagkey2</Key>
                    <Value>mytagvalue2</Value>
                </Tag>
            </And>
        </Filter>
        <Status>Enabled</Status>    
    </Rule>
</LifecycleConfiguration>
```

```
{
    "Rules": [
        {
            "ID": "id-1",
            "Filter": {
                "And": {
                    "Prefix": "myprefix", 
                    "Tags": [
                        {
                            "Value": "mytagvalue1", 
                            "Key": "mytagkey1"
                        }, 
                        {
                            "Value": "mytagvalue2", 
                            "Key": "mytagkey2"
                        }
                    ]
                }
            }, 
            "Status": "Enabled", 
            "Expiration": {
                "Days": 1
            }
        }
    ]
}
```

以下のように `put-bucket-lifecycle-configuration` をテストできます。

**設定をテストする**

1. JSON のライフサイクル設定をファイル (*`lifecycle.json`* など) に保存します。

1. 以下の AWS CLI コマンドを実行して、バケットにライフサイクル設定を指定します。`user input placeholders` を、ユーザー自身の情報に置き換えます。

   ```
   $ aws s3api put-bucket-lifecycle-configuration  \
   --bucket amzn-s3-demo-bucket  \
   --lifecycle-configuration file://lifecycle.json
   ```

1. 検証するには、次のとおり `get-bucket-lifecycle-configuration` AWS CLI コマンドを使用して S3 ライフサイクル設定を取得します。

   ```
   $ aws s3api get-bucket-lifecycle-configuration  \
   --bucket amzn-s3-demo-bucket
   ```

1. S3 ライフサイクル設定を削除するには、次のとおり `delete-bucket-lifecycle` AWS CLI コマンドを使用します。

   ```
   aws s3api delete-bucket-lifecycle \
   --bucket amzn-s3-demo-bucket
   ```

### AWS SDK の使用
<a name="manage-lifecycle-using-sdk"></a>

------
#### [ Java ]

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

**注記**  
バケットに S3 ライフサイクル設定を追加すると、Amazon S3 でバケットの現在のライフサイクル設定 (ある場合) が置き換えられます。設定を更新するには、設定を取得して必要な変更を加え、変更済みの設定をバケットに追加します。

AWS SDK for Java を使用してライフサイクル設定を管理するには、以下を実行します。
+ ライフサイクル設定をバケットに追加します。
+ ライフサイクル設定を取得し、別のルールを追加して設定を更新します。
+ バケットに変更済みのライフサイクル設定を追加します。Amazon S3 によって既存の設定が置き換えられます。
+ 設定をもう一度取得し、ルールの数を出力して、適切な数のルールがあることを確認します。
+ ライフサイクル設定を削除し、削除済みであることを確認するために、設定の取得を再度試行します。

AWS SDK for Java を使用してバケットにライフサイクル設定を行う方法の例については、「*Amazon S3 API リファレンス*」の「[Set lifecycle configuration on a bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_PutBucketLifecycleConfiguration_section.html)」を参照してください。

------
#### [ .NET ]

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

**注記**  
ライフサイクル設定を追加すると、Amazon S3 で、指定したバケットの既存のライフサイクル設定が置き換えられます。設定を更新するには、まずライフサイクル設定を取得して変更を加え、次に変更済みのライフサイクル設定をバケットに追加する必要があります。

以下の例では、AWS SDK for .NET を使用してバケットのライフサイクル設定を追加、更新、削除する方法を示します。このコード例では、以下を行います。
+ ライフサイクル設定をバケットに追加します。
+ ライフサイクル設定を取得し、別のルールを追加して設定を更新します。
+ バケットに変更済みのライフサイクル設定を追加します。Amazon S3 によって既存のライフサイクル設定が置き換えられます。
+ 再び設定を取得し、設定のルール数を出力して適切な数であることを確認します。
+ ライフサイクル設定を削除し、削除を確認します。

コード例を設定および実行する方法の詳細については、「AWS SDK for .NET デベロッパーガイド」の「[AWS SDK for .NET の開始方法](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config.html)」を参照してください。**

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class LifecycleTest
    {
        private const string bucketName = "*** bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;
        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            AddUpdateDeleteLifecycleConfigAsync().Wait();
        }

        private static async Task AddUpdateDeleteLifecycleConfigAsync()
        {
            try
            {
                var lifeCycleConfiguration = new LifecycleConfiguration()
                {
                    Rules = new List<LifecycleRule>
                        {
                            new LifecycleRule
                            {
                                 Id = "Archive immediately rule",
                                 Filter = new LifecycleFilter()
                                 {
                                     LifecycleFilterPredicate = new LifecyclePrefixPredicate()
                                     {
                                         Prefix = "glacierobjects/"
                                     }
                                 },
                                 Status = LifecycleRuleStatus.Enabled,
                                 Transitions = new List<LifecycleTransition>
                                 {
                                      new LifecycleTransition
                                      {
                                           Days = 0,
                                           StorageClass = S3StorageClass.Glacier
                                      }
                                  },
                            },
                            new LifecycleRule
                            {
                                 Id = "Archive and then delete rule",
                                  Filter = new LifecycleFilter()
                                 {
                                     LifecycleFilterPredicate = new LifecyclePrefixPredicate()
                                     {
                                         Prefix = "projectdocs/"
                                     }
                                 },
                                 Status = LifecycleRuleStatus.Enabled,
                                 Transitions = new List<LifecycleTransition>
                                 {
                                      new LifecycleTransition
                                      {
                                           Days = 30,
                                           StorageClass = S3StorageClass.StandardInfrequentAccess
                                      },
                                      new LifecycleTransition
                                      {
                                        Days = 365,
                                        StorageClass = S3StorageClass.Glacier
                                      }
                                 },
                                 Expiration = new LifecycleRuleExpiration()
                                 {
                                       Days = 3650
                                 }
                            }
                        }
                };

                // Add the configuration to the bucket. 
                await AddExampleLifecycleConfigAsync(client, lifeCycleConfiguration);

                // Retrieve an existing configuration. 
                lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client);

                // Add a new rule.
                lifeCycleConfiguration.Rules.Add(new LifecycleRule
                {
                    Id = "NewRule",
                    Filter = new LifecycleFilter()
                    {
                        LifecycleFilterPredicate = new LifecyclePrefixPredicate()
                        {
                            Prefix = "YearlyDocuments/"
                        }
                    },
                    Expiration = new LifecycleRuleExpiration()
                    {
                        Days = 3650
                    }
                });

                // Add the configuration to the bucket. 
                await AddExampleLifecycleConfigAsync(client, lifeCycleConfiguration);

                // Verify that there are now three rules.
                lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client);
                Console.WriteLine("Expected # of rulest=3; found:{0}", lifeCycleConfiguration.Rules.Count);

                // Delete the configuration.
                await RemoveLifecycleConfigAsync(client);

                // Retrieve a nonexistent configuration.
                lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client);

            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }

        static async Task AddExampleLifecycleConfigAsync(IAmazonS3 client, LifecycleConfiguration configuration)
        {

            PutLifecycleConfigurationRequest request = new PutLifecycleConfigurationRequest
            {
                BucketName = bucketName,
                Configuration = configuration
            };
            var response = await client.PutLifecycleConfigurationAsync(request);
        }

        static async Task<LifecycleConfiguration> RetrieveLifecycleConfigAsync(IAmazonS3 client)
        {
            GetLifecycleConfigurationRequest request = new GetLifecycleConfigurationRequest
            {
                BucketName = bucketName
            };
            var response = await client.GetLifecycleConfigurationAsync(request);
            var configuration = response.Configuration;
            return configuration;
        }

        static async Task RemoveLifecycleConfigAsync(IAmazonS3 client)
        {
            DeleteLifecycleConfigurationRequest request = new DeleteLifecycleConfigurationRequest
            {
                BucketName = bucketName
            };
            await client.DeleteLifecycleConfigurationAsync(request);
        }
    }
}
```

------
#### [ Ruby ]

AWS SDK for Ruby を使用すると、[https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/BucketLifecycle.html](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/BucketLifecycle.html) クラスを使用してバケットの S3 ライフサイクル設定を管理できます。S3 ライフサイクル設定の管理の詳細については、「[オブジェクトのライフサイクルの管理](object-lifecycle-mgmt.md)」を参照してください。

------

### REST API の使用
<a name="manage-lifecycle-using-rest"></a>

「Amazon Simple Storage Service API リファレンス」の以下のトピックでは、S3 ライフサイクル設定に関連する REST API オペレーションについて説明しています。**
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html)

## S3 ライフサイクルのトラブルシューティング
<a name="lifecycle-troubleshoot"></a>

S3 ライフサイクルの使用時に発生する可能性がある一般的な問題については、「[Amazon S3 ライフサイクル問題のトラブルシューティング](troubleshoot-lifecycle.md)」を参照してください。