AWS CDKでS3バケットにライフサイクルを設定してデプロイする方法

AWS CDKでS3バケットにライフサイクルを設定してデプロイする方法

項目 バージョン
CDK 2.28.0

AWS CDKでS3バケットデプロイ時にライフサイクルを設定してデプロイします。

import { Stack, StackProps, aws_s3, Duration, RemovalPolicy } from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class Sample001Stack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const bucket = new aws_s3.Bucket(this, 'TestBucket', {
      bucketName: 'test-bucket2023x',
      removalPolicy: RemovalPolicy.DESTROY,
      autoDeleteObjects: true,
      versioned: true,
      lifecycleRules: [
        {
          id: 'lifecycle-test',
          expiration: Duration.days(1),
          noncurrentVersionExpiration: Duration.days(2)
        }
      ]
    });

  }
}

これでデプロイします。

cdk deploy

S3バケットが作成され、ライフサイクルも設定されています。

AWS CDKでS3バケットにライフサイクルを設定してデプロイする方法

既存S3バケットにライフサイクルを設定する

fromBucketNameかfromBucketArnから既存S3を参照することができます。

const bucketX: aws_s3.IBucket = aws_s3.Bucket.fromBucketName(
  this, 'TestBucketX', 'test-bucketxxx'
)
const bucketY: aws_s3.IBucket = aws_s3.Bucket.fromBucketArn(
  this, 'TestBucketY', 'arn:aws:s3:::test-bucketyyy'
)

戻り値のaws_s3.IBucketにはライフサイクルを設定するメソッドがないようで、既存S3にライフサイクルを設定するのはできないっぽいです。

grantWrite,grantReadメソッド

既存S3バケットを参照したIBucketにはgrantWrite,grantReadメソッドなどがあります。

grantWriteメソッドを使うと、以下のポリシーがアタッチされます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:Abort*",
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging"
            ],
            "Resource": [
                "arn:aws:s3:::test-bucketxxx",
                "arn:aws:s3:::test-bucketxxx/*"
            ],
            "Effect": "Allow"
        }
    ]
}

grantReadメソッドを使うと、以下のポリシーがアタッチされます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:GetBucket*",
                "s3:GetObject*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::test-bucketxxx",
                "arn:aws:s3:::test-bucketxxx/*"
            ],
            "Effect": "Allow"
        }
    ]
}

参考サイト

aws-cdk-lib.aws_s3 module · AWS CDK
Language | Package
interface LifecycleRule · AWS CDK
# interface LifecycleRule
interface IBucket · AWS CDK
# interface IBucket

コメント

タイトルとURLをコピーしました