[小ネタ]S3のライフサイクル設定例をCloudFormationでやってみる

2019.03.25

おはようございます、もきゅりんです。 先日CloudFormationテンプレートでS3バケットのライフサイクルを設定する機会があったのですが、簡単すぎるためかあまり記事が見られなかったので、ササッとコピペでもしたいとき用にブログとして残しておきます。

今回は、AWSドキュメントのライフサイクル設定の例を抜粋してテンプレートを作りました。

例1: フィルタを指定する

このライフサイクル設定ルールでは、フィルタはキープレフィックスが tax/ のオブジェクトのサブセットと、指定したキーと値の 2 つのタグを含むオブジェクトに、ライフサイクルルールを適用します。 (※ 包括した例で対応しています。)

このルールは、Amazon S3 に以下のことを命じる 2 つのアクションを指定します。

  • 作成から 365 日 (1 年) 後にオブジェクトを GLACIER ストレージクラスに移行する。
  • 作成から 3,650 日 (10 年) 後にオブジェクトを削除する (Expiration アクション)。
AWSTemplateFormatVersion: 2010-09-09
Description: Create S3 for LifeCycle
Parameters:
NameTagPrefix:
Type: String
Default: ProjectA
Description: The Value of Name Tag
BucketName:
Type: String
Description: A name for the bucket.
Resources:
S3LifeCycleBacket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Ref BucketName
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
Tags:
- Key: Name
Value: !Ref NameTagPrefix
- Key: key1
Value: value1
- Key: key2
Value: value2
LifecycleConfiguration:
Rules:
- Id: !Sub ${NameTagPrefix}-LifeCycle-Rule
Status: Enabled
Prefix: tax/
TagFilters:
- Key: key1
Value: value1
- Key: key2
Value: value2
ExpirationInDays: 3650
Transitions:
- StorageClass: GLACIER
TransitionInDays: 365
Outputs:
S3LifeCycleBacket:
Description: S3 Backet Name
Value: !Ref S3LifeCycleBacket
Export:
Name: !Sub ${NameTagPrefix}-S3Bucket

例3: オブジェクトの有効期間全体にわたってストレージクラスの層を下げる

次のライフサイクル設定では、キー名プレフィックス logs/ が付いたオブジェクトに適用されるルールを指定します。このルールは、次のアクションを指定します。

2 つの移行アクション:

  • 作成されてから 30 日後にオブジェクトを STANDARD_IA ストレージクラスに移行します。
  • 作成されてから 90 日後にオブジェクトを GLACIER ストレージクラスに移行します。
  • 作成されてから 1 年後にオブジェクトを削除するよう Amazon S3 に指示する 1 つの有効期間アクション。
AWSTemplateFormatVersion: 2010-09-09
Description: Create S3 for LifeCycle
Parameters:
NameTagPrefix:
Type: String
Default: ProjectB
Description: The Value of Name Tag
BucketName:
Type: String
Description: A name for the bucket.
Resources:
S3LifeCycleBacket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Ref BucketName
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
Tags:
- Key: Name
Value: !Ref NameTagPrefix
LifecycleConfiguration:
Rules:
-
Id: !Sub ${NameTagPrefix}-LifeCycle-Rule
Status: Enabled
Prefix: logs/
ExpirationInDays: 365
Transitions:
- StorageClass: STANDARD_IA
TransitionInDays: 30
- StorageClass: GLACIER
TransitionInDays: 90
Outputs:
S3LifeCycleBacket:
Description: S3 Backet Name
Value: !Ref S3LifeCycleBacket
Export:
Name: !Sub ${NameTagPrefix}-S3Bucket

例 4: 複数のルールを指定する

次のライフサイクル設定には 2 つのルールがあります。

  • ルール 1 は、キー名プレフィックス classA/ が付いたオブジェクトに適用されます。作成されてから 1 年後にオブジェクトを GLACIER ストレージクラスに移行し、作成されてから 10 年後にそれらのオブジェクトを期限切れにするよう、Amazon S3 に指示します。

  • ルール 2 は、キー名プレフィックス classB/ が付いたオブジェクトに適用されます。作成されてから 90 日後にオブジェクトを STANDARD_IA ストレージクラスに移行し、作成されてから 1 年後に削除するよう Amazon S3 に指示します。

AWSTemplateFormatVersion: 2010-09-09
Description: Create S3 for LifeCycle
Parameters:
NameTagPrefix:
Type: String
Default: ProjectC
Description: The Value of Name Tag
BucketName:
Type: String
Description: A name for the bucket.
Resources:
S3LifeCycleBacket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Ref BucketName
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
Tags:
- Key: Name
Value: !Ref NameTagPrefix
LifecycleConfiguration:
Rules:
- Id: !Sub ${NameTagPrefix}-LifeCycle-Rule1
Status: Enabled
Prefix: classA/
ExpirationInDays: 3650
Transitions:
- StorageClass: GLACIER
TransitionInDays: 365
- Id: !Sub ${NameTagPrefix}-LifeCycle-Rule2
Status: Enabled
Prefix: classB/
ExpirationInDays: 365
Transitions:
- StorageClass: STANDARD_IA
TransitionInDays: 90
Outputs:
S3LifeCycleBacket:
Description: S3 Backet Name
Value: !Ref S3LifeCycleBacket
Export:
Name: !Sub ${NameTagPrefix}-S3Bucket

以上です。 どなたかのお役に立ったら何よりです。

参考

AWS::S3::Bucket

ライフサイクル設定の例