CloudFormationでいろいろなS3バケットを作成してみた
はじめに
こんにちは、望月です。
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