空のS3バケットを作成する

s3_default.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
AWSTemplateFormatVersion: '2010-09-09'
Description: S3 Normal Bucket

# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
Parameters:
S3BucketName:
Description: Type of this BacketName.
Type: String

Resources:
# ------------------------------------------------------------ #
# S3
# ------------------------------------------------------------ #
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${S3BucketName}
AccessControl: Private
PublicAccessBlockConfiguration:
BlockPublicAcls: True
BlockPublicPolicy: True
IgnorePublicAcls: True
RestrictPublicBuckets: True

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
S3BucketName:
Value: !Ref S3Bucket

parameters.json

指定するバケット名はAWSで一意の物にする必要があるため、よくあるキーワードなどはエラーになる。ドメイン名などを付与して一意な名前にする。

1
2
3
4
5
6
[
{
"ParameterKey": "S3BucketName",
"ParameterValue": "testxxxxxxxxxx"
}
]

デフォルトのバケットを作成する

Cloudformationでバケットを作成する。

1
2
3
4
5
6
$ aws cloudformation create-stack --stack-name tutorial-s3-bucket --template-body "file://./s3_default.yml" --parameters "file://./parameters.json"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXX:stack/tutorial-s3-bucket/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
$ aws s3 ls
2019-11-26 19:30:00 testxxxxxxxxxx

AWSコンソールで作成された状態を確認。

S3バケット width=640

S3バケット width=640

S3のライフサイクル設定で有効期間を設定する

s3_expiration.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
AWSTemplateFormatVersion: '2010-09-09'
Description: S3Bcuket with expiration

# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
Parameters:
S3BucketName:
Description: Type of this BacketName.
Type: String

Resources:
# ------------------------------------------------------------ #
# S3
# ------------------------------------------------------------ #
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${S3BucketName}
AccessControl: Private
PublicAccessBlockConfiguration:
BlockPublicAcls: True
BlockPublicPolicy: True
IgnorePublicAcls: True
RestrictPublicBuckets: True
LifecycleConfiguration:
Rules:
- Id: LifeCycleRule
Status: Enabled
ExpirationInDays: 365

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
S3BucketName:
Value: !Ref S3Bucket

ライフサイクル設定を追加してスタック更新

1
2
3
4
$ aws cloudformation update-stack --stack-name tutorial-s3-bucket --template-body "file://./s3_expiration.yml" --parameters "file://./parameters.json"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXX:stack/tutorial-s3-bucket/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

AWSコンソール上で確認すると、ライフサイクルルールが作成されている。

S3バケット width=640