【入門編】CloudFormationマッピング(Mappings)と条件付き評価(Conditions)を駆使した環境非依存型テンプレートの極意 – インフラ構成管理(IaC)活用バイブル

こんにちは。インフラの現場で「なぜか環境ごとに設定がズレていて障害が起きる」という悪夢を何度も見てきたエンジニアです。

今日は、AWS CloudFormationにおける「環境依存」という最大の敵を、`Mappings`と`Conditions`という武器を使って完全に制圧する話をします。これをマスターすれば、テンプレートの重複に悩まされる日々とは今日でおさらばです。

—

1. なぜ「環境ごと」にテンプレートを書くと失敗するのか?

初心者が陥りがちなのが「開発用」「本番用」とテンプレートを別々に作成することです。これこそが、後の「修正漏れ」を生む最大の温床です。

真のIaCの極意は「テンプレートは一つ、入力パラメータで挙動を変える」こと。

これさえ守れば、テスト環境で成功した構成が、そのまま本番環境でも再現されることが論理的に保証されます。

—

2. 魔法の武器:MappingsとConditionsの役割

  • Mappings (辞書): 「環境名」というキーを渡せば、その環境に最適な「インスタンスタイプ」や「AMI ID」を即座に引き出してくれる、信頼できるデータベースです。
  • Conditions (論理判定): 「もし本番環境なら」というフラグを立てて、リソースの作成有無やプロパティを分岐させます。

この2つを組み合わせると、テンプレート内にハードコーディングされた「マジックナンバー(直接書かれた値)」を一掃できます。

—

3. 実践:環境非依存型テンプレートの設計

以下は、環境ごとにインスタンスタイプやタグを動的に切り替える、現場でそのまま使える設計パターンです。

AWSTemplateFormatVersion: ‘2010-09-09’

Parameters:
# 環境を指定する唯一の窓口
EnvironmentType:
Type: String
AllowedValues: [dev, prod]
Default: dev

Mappings:
# 環境ごとのスペックを辞書として定義
EnvironmentConfig:
dev:
InstanceType: t3.micro
EnableDetailedMonitoring: false
prod:
InstanceType: m5.large
EnableDetailedMonitoring: true

Conditions:
# 本番環境かどうかを判定する論理式
IsProd: !Equals [!Ref EnvironmentType, prod]

Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
# マッピングから値を引き出す(DRY原則)
InstanceType: !FindInMap [EnvironmentConfig, !Ref EnvironmentType, InstanceType]
# 条件分岐を使って設定を切り替える
Monitoring: !FindInMap [EnvironmentConfig, !Ref EnvironmentType, EnableDetailedMonitoring]
Tags:

  • Key: Environment

Value: !Ref EnvironmentType

  • Key: BackupPolicy

# 本番なら ‘daily’、それ以外は ‘none’ を自動設定
Value: !If [IsProd, daily, none]

—

4. 精度を高めるための動作確認(HelloWorld的アプローチ)

このテンプレートを検証する際は、以下のステップを踏んでください。

1. 静的解析: AWS CLIで `aws cloudformation validate-template` を実行し、構文エラーがないか確認します。
2. ドライラン: `aws cloudformation create-stack` で `–disable-rollback` をあえて外し、エラー時に即座にリソースが削除されることを確認します(冪等性の確認です)。
3. パラメータ切り替えテスト:

  • `EnvironmentType=dev` でデプロイ → `t3.micro` が立ち上がることを確認。
  • `EnvironmentType=prod` でデプロイ → `m5.large` が立ち上がることを確認。

たったこれだけで、あなたのインフラ構築は「手作業の寄せ集め」から「コード化された信頼性の高い資産」に進化します。

—

先輩エンジニアからのアドバイス

「マジックナンバー」をコードの中に残さないでください。もし設定値を変えたくなったとき、コード全体を探し回るような設計は、将来の自分を苦しめるだけです。

`Mappings` を使い、設定とロジックを完全に分離する。この癖をつけるだけで、あなたのエンジニアとしての価値は劇的に上がります。

さあ、恐れずにテンプレートを書いてみてください。もしエラーが出ても、それは「どうすればもっと堅牢にできるか」を学べる最高のチャンスですから。応援しています!

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