【入門編】CloudFormationテンプレートの書き方完全ガイド:基本構文から組み込み関数まで – インフラ構成管理(IaC)活用バイブル

こんにちは。インフラの現場で「手作業」という名の爆弾を処理し続けてきた諸君、ようこそ。

AWS CloudFormation(以下CFn)。AWSが提供するIaC(Infrastructure as Code)の原点にして頂点。マウスでポチポチとコンソールを操作する時代は終わりました。「インフラをコードとして定義し、何度実行しても同じ結果が得られる(冪等性の担保)」。この境地に達したとき、君たちのインフラは「管理されるもの」から「定義されるもの」へと進化します。

今日は、CFnの設計思想を深く理解し、明日から現場で「おっ、こいつ分かってるな」と思われるレベルのテンプレート作成術を伝授しましょう。

—

1. CloudFormationの骨格:テンプレートの必須セクション

CFnテンプレートは、YAMLまたはJSONで記述します。まずは、この「家」の骨組みを覚えましょう。

  • `AWSTemplateFormatVersion`: テンプレートのバージョン。`2010-09-09` 固定です。
  • `Description`: テンプレートの目的。後で見た自分が泣かないために書く、未来の自分への手紙です。
  • `Parameters`: 実行時に動的に値を渡すための変数。環境(dev/stg/prd)ごとの切り替えに必須。
  • `Resources`: ここが心臓部です。 AWSリソース(EC2, S3, RDSなど)を定義します。
  • `Outputs`: 作成されたリソースのIDやエンドポイントを表示します。スタック間連携の鍵になります。

—

2. 魔法の杖:頻出する組み込み関数

CloudFormationの真骨頂は「計算」にあります。ハードコーディングを排除し、動的にリソースをリンクさせる関数を使いこなしましょう。

1. `Ref`: 最も多用します。リソースの論理名を指定すると、物理ID(例: インスタンスID)を返します。
2. `Fn::GetAtt`: リソースの属性を取得します。例えば、ロードバランサーのDNS名を取得する際などに使います。
3. `Fn::Sub`: 文字列の中に変数を埋め込みます。`!Sub “web-${Environment}-server”` のように、直感的に名前を構築できるため、可読性が劇的に上がります。

—

3. プロの技術:可読性と冪等性を高めるベストプラクティス

初心者とプロの差は、この「守り」にあります。

  • 論理名は一意に、かつ意味を持たせる: `Instance1` ではなく `WebServerInstance` と命名する。
  • Mappingを活用せよ: 環境ごとに異なるAMI IDやインスタンスタイプを `Mappings` セクションに閉じ込め、if文のような複雑なロジックを避ける。
  • タグ付けを義務化: 全てのリソースに `Name` タグを付与する。運用フェーズで後悔しないための唯一の道です。

—

4. 実践:HelloWorld的な構成(S3バケット作成)

まずは、最もシンプルな「S3バケット作成」から始めましょう。これが理解できれば、あとはリソースの種類を増やすだけです。

AWSTemplateFormatVersion: ‘2010-09-09’
Description: ‘S3 Bucket Creation Sample’

Parameters:
Environment:
Description: 環境名(dev, stg, prd)
Type: String
Default: dev

Resources:
# 論理名: MyS3Bucket
MyS3Bucket:
Type: ‘AWS::S3::Bucket’
Properties:
# Fn::Sub を使い、環境名に応じたバケット名を動的生成
BucketName: !Sub “my-app-assets-${Environment}”
BucketEncryption:
ServerSideEncryptionConfiguration:

  • ServerSideEncryptionByDefault:

SSEAlgorithm: AES256 # セキュリティのベストプラクティス:暗号化は必須

Outputs:
BucketArn:
Value: !GetAtt MyS3Bucket.Arn
Description: 作成されたバケットのARN

このコードのポイント

  • 冪等性: このコードを何度実行しても、バケットが存在していれば「変更なし」と判断され、事故を防ぎます。
  • 汎用性: `Parameters` を変えるだけで、dev/stg/prd環境を安全に構築できます。

—

さあ、次は君の番だ

インフラ構築は「書く」作業から、「コードを最適化する」作業へとシフトしました。最初は難しく感じるかもしれませんが、このテンプレートをAWSコンソールの「CloudFormation」画面からアップロードしてみてください。数分後、君の定義したリソースがクラウド上に産声を上げます。

「なぜその設計にしたのか」 を言語化できるようになったとき、君はもう立派なSREの入り口に立っています。

次は、これをどうやってCI/CDパイプラインに乗せるか、あるいは `AWS CDK` へとステップアップするか……道は無限です。まずはこの「HelloWorld」を自分の手で動かし、その感動を味わってください。

応援しています。何か詰まったら、いつでも戻ってきてくださいね。

タイトルとURLをコピーしました