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

2019.03.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

おはようございます、もきゅりんです。 先日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
# ------------------------------------------------------------#
Parameters:
  NameTagPrefix:
    Type: String
    Default: ProjectA
    Description: The Value of Name Tag
  BucketName:
    Type: String
    Description: A name for the bucket.
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
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
# ------------------------------------------------------------#
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
# ------------------------------------------------------------#
Parameters:
  NameTagPrefix:
    Type: String
    Default: ProjectB
    Description: The Value of Name Tag
  BucketName:
    Type: String
    Description: A name for the bucket.
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
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
# ------------------------------------------------------------#
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
# ------------------------------------------------------------#
Parameters:
  NameTagPrefix:
    Type: String
    Default: ProjectC
    Description: The Value of Name Tag
  BucketName:
    Type: String
    Description: A name for the bucket.
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
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
# ------------------------------------------------------------#
Outputs:
  S3LifeCycleBacket:
    Description: S3 Backet Name
    Value: !Ref S3LifeCycleBacket
    Export:
      Name: !Sub ${NameTagPrefix}-S3Bucket

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

参考

AWS::S3::Bucket

ライフサイクル設定の例