S3 バケット定義の基本
AWS CloudFormation で S3 バケットを作成・設定するには、次のようにテンプレートファイル内で AWS::S3::Bucket
タイプのリソースを定義します。
上記の例では、論理 ID (Logical ID) が MyBucket
の S3 バケットを定義しています。
論理 ID はこのテンプレートで生成するスタック内で一意の ID です。
実際に生成される S3 バケット名(物理 ID)は CloudFormation が自動で生成します(後述)。
このテンプレートを使って、CloudFormation スタック(ここでは S3 バケットのみ含まれる)を生成するには、次のように aws cloudformation deploy
コマンドを実行します。
スタック内に生成された AWS リソースの一覧は次のように確認できます。
PhysicalResourceId
のところを見ると、実際に作成された S3 バケットの物理 ID (Physical ID) が分かります。
S3 バケット名(物理 ID)は、このように、スタック名とテンプレートで指定した論理 ID (Logical ID) をもとに自動生成されます。 もちろん、バケット名を自分で指定することもできます(後述)。 他のスタック内の AWS リソースからこの S3 バケットを参照するときは、この物理 ID(および ARN)を使用することになります。
S3 バケットリソースの各種設定
CloudFormation テンプレート内で S3 バケットリソース (AWS::S3::Bucket
) を定義するときに、様々なプロパティを設定することができます。
これらのプロパティはすべてオプショナルです。
BucketName(バケット名を明示する)
バケット名の生成を CloudFormation に任せるのではなく、BucketName
プロパティで明示的に指定することが可能です。
バケット名に使える名前は制約が多く、すべて小文字で、世界中でユニークになるように命名する必要があるので注意してください。 一般的には、上の例のように、単語をハイフン区切りで繋げた名前を付けます。 アカウント ID を含めると、名前の衝突を避けやすくなります。
CloudFormation の Sub 関数 と、AWS::AccountID 擬似パラメータ を使用すると、アカウント ID のハードコーディングを避けることができます。
DeletionPolicy(スタック削除時に S3 バケットを消さない)
CloudFormation スタックを削除すると、デフォルトではそのスタック内の S3 バケットも同時に削除されます。 プロダクション環境では、S3 バケット内のデータが簡単に削除されてしまっては困るので、次のように DeletionPolicy を設定して、スタック削除時に S3 バケットが削除されないようにします。
DeletionPolicy
は、リソース共通の設定項目なので、論理 ID (Logical ID) のすぐ下の階層で定義することに注意してください(Properties
の下ではありません)。
この状態で CloudFormation スタックを削除すると、S3 バケットはスタックから独立したリソースとして残ります。
Tags(タグを設定する)
S3 バケットにタグを割り当てるときは、Tags
プロパティで指定します。
何か書き方が煩わしいです。SAM のように キー: 値
という形で指定したいですね。。。
参考情報
関連記事
- AWS CloudFormation の設定例: Lambda 関数の設定いろいろ
- AWS CloudFormation 入門 (Hello World)
- AWS CloudFormation をコマンドライン (CLI) で操作する
- AWS CloudFormation で DyanamoDB のリソースを作成する
- AWS CloudFormation で Lambda 関数のリソースを生成する
- AWS CLI: Windows で HOME 環境変数を設定したときに credentials が見つからなくなる場合の対処
- AWS SDK for Node.js でプロキシ環境変数 (https_proxy) を反映させる