こんにちは!マリーです!
最近、業務の中で CloudFormation(CFn)を触る機会があり、
最初は非常に難しそうに感じていました。
今回は、そんな CloudFormation の 基本構造と書き方 を
シンプルに整理してみます 🙌
CloudFormationとは?
- AWSリソースを コード(YAML/JSON)で自動構築できるサービス
- いわゆる IaC(Infrastructure as Code) の代表格
- 同じ構成を繰り返し安全にデプロイできる
基本構造(YAMLのひな形)
AWSTemplateFormatVersion: '2010-09-09'
Description: Sample CloudFormation Template
Parameters:
EnvName:
Type: String
Default: dev
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "${EnvName}-sample-bucket"
Outputs:
BucketName:
Description: Name of created bucket
Value: !Ref MyBucket
各セクションの役割
| セクション | 内容 |
|---|---|
| AWSTemplateFormatVersion | テンプレートのバージョン(固定でOK) |
| Description | テンプレートの説明(何を作るのか) |
| Parameters | 外部から渡す値を定義(環境名など) |
| Resources | 実際に作成するAWSリソースを定義(メイン部分) |
| Outputs | 作成後に出力したい値(リソース名やARNなど) |
よく使う組み込み関数(YAMLでのショートハンド)
| 関数 | 意味 | 例 |
|---|---|---|
!Ref |
リソースやパラメータを参照 | !Ref EnvName |
!Sub |
文字列展開(変数埋め込み) | !Sub "${EnvName}-bucket" |
!GetAtt |
他リソースの属性値を取得 | !GetAtt MyBucket.Arn |
!Join |
文字列を結合 | !Join ['-', [dev, app, bucket]] |
ポイント整理
- Resources セクションが主役!
→ 実際に作りたいAWSリソースはすべてここに書く - Parameters で環境変数的に再利用可能
→ 同じテンプレートで「dev」「prod」など切り替えできる - Outputs はデプロイ後の確認に便利
→ 作成されたリソース名やARNを簡単に取得できる
実際に試したS3作成テンプレート(例)
AWSTemplateFormatVersion: '2010-09-09'
Description: Create S3 bucket with tags and versioning
Parameters:
EnvName:
Type: String
Default: dev
Description: Environment name (e.g. dev, stg, prod)
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "${EnvName}-cf-demo-bucket"
VersioningConfiguration:
Status: Enabled
Tags:
- Key: Environment
Value: !Ref EnvName
- Key: CreatedBy
Value: CloudFormation
Outputs:
BucketName:
Description: Name of the created bucket
Value: !Ref MyBucket
ポイント
- バージョニングやタグ付けなども Properties の中に書ける
- テンプレートをデプロイするだけでS3バケットが自動作成される
デプロイ方法(AWSコンソール or CLI)
-
コンソールの場合
- CloudFormation コンソールを開く
- 「スタックの作成」→「テンプレートをアップロード」
- パラメータを入力して「スタックを作成」
-
CLIの場合
aws cloudformation create-stack \
--stack-name my-s3-stack \
--template-body file://s3-template.yaml \
--parameters ParameterKey=EnvName,ParameterValue=dev
CloudFormationのメリット
- 手作業なしで再現性のある構成管理
- 差分更新(Change Set)で安全に修正可能
- Git管理できるためチーム開発に向く
- AWS CDKなど他のIaCツールの基礎になる
注意点
- スタックの削除でリソースも削除される(要注意)
- リソース名に動的な変数を使うと再デプロイ時に失敗することがある
- テンプレートサイズが大きい場合はS3アップロードが必要
まとめ
| 要点 | 内容 |
|---|---|
| CloudFormationとは | AWSリソースをコードで構築するIaCツール |
| メインセクション | Parameters / Resources / Outputs |
| 始めるなら | S3など単一リソースから |
| コツ | YAMLの構造をシンプルに保つ&!Ref / !Subを使いこなす |
最後に
CloudFormationは最初は少しとっつきにくいですが、
一度テンプレート構造を理解すると、AWS構築が一気に楽になります!
ポチポチとリソースを一つずつ作成するよりも、
圧倒的に効率的 なので、学ぶ価値はとても高いです。
私も今後、業務外でもCloudFormationに触れながら、
より実践的に慣れていこうと思います 💪