CloudFormationでいろいろなS3バケットを作成してみた

2019.02.28

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

はじめに

こんにちは、望月です。

CloudFormationで、いろいろなS3バケットを作成するテンプレートを作成しました。S3バケット単体の作成は、それほど手間にはなりませんが複数のS3バケットを作成するときの設定確認や、とりあえずコード化だ!というときには、お役に立つかと思います。

デフォルト設定のS3バケット

マネジメントコンソールからぽちぽちデフォルトで作成した場合のS3バケットを作成します。現在、マネジメントコンソールからS3バケットを作成した場合、デフォルトではパブリックアクセス設定が有効となりますが、CloudFormationで作成する場合は、しっかり設定を入れる必要があるため、注意しましょう。

AWSTemplateFormatVersion: '2010-09-09'
Description: This CloudFormation template to create S3 Bucket

Parameters:
S3BucketName:
Description: Type of this BacketName.
Type: String

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

Outputs:
S3BucketName:
Value: !Ref S3Bucket

Webからのアクセスを許可したS3バケット

Webからのアクセスを許可した公開S3バケットを作成します。Webサイトの静的コンテンツを置く用途などで利用できます。ファイルの取扱には注意しましょう。

AWSTemplateFormatVersion: '2010-09-09'
Description: This CloudFormation template to create S3 Bucket

Parameters:
S3BucketName:
Description: Type of this BacketName.
Type: String

Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub ${S3BucketName}
AccessControl: Private
S3BucketPolicy:
Type: "AWS::S3::BucketPolicy"
Properties:
Bucket: !Ref S3Bucket
PolicyDocument:
Statement:
Action:
- "s3:GetObject"
Effect: "Allow"
Resource: !Sub "arn:aws:s3:::${S3BucketName}/*"
Principal: "*"

Outputs:
S3BucketName:
Value: !Ref S3Bucket

ファイルのバージョン管理をしつつ、長期保存するS3バケット

バージョニングを有効化し、180日でStandard-IAへ移行するS3バケットを作成します。バージョン管理もしっかりし、なるべくファイルを長期にコストを抑えつつ保存する用途などに利用できます。

AWSTemplateFormatVersion: '2010-09-09'
Description: This CloudFormation template to create S3 Bucket

Parameters:
S3BucketName:
Description: Type of this BacketName.
Type: String

Resources:
S3BucketName:
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
Transitions:
- TransitionInDays: '180'
StorageClass: STANDARD_IA
NoncurrentVersionTransitions:
- TransitionInDays: '180'
StorageClass: STANDARD_IA
VersioningConfiguration:
Status: Enabled

Outputs:
S3BucketName:
Value: !Ref S3Bucket

ファイル(ログ)を決められた期間保存するS3バケット

ログなどを決められた期間保存するをS3バケットを作成します。要件によっては1年間ログを保存することなど多いかと思います。そういった場合、ライフサイクル設定により、必要な期間を過ぎた場合はファイルを削除することにより、容量増加を抑えることができます。

AWSTemplateFormatVersion: '2010-09-09'
Description: This CloudFormation template to create S3 Bucket

Parameters:
S3BucketName:
Description: Type of this BacketName.
Type: String

Resources:
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'

Outputs:
S3BucketName:
Value: !Ref S3Bucket

まとめ

CloudFormationでいろいろなS3バケットを作る機会があったので、ブログにまとめました。S3以外のリソースもCloudFormationでモリモリ作成したんですが、そちらもブログにできるところはブログにしていきたいなーと思っています。

参考

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cfn-reference-s3.html