エンジニアの皆さん、こんにちは。
インフラの世界へようこそ。今日は「IaC(Infrastructure as Code)」という広大な荒野を旅するための、最も信頼できる二つの武器――AWS CloudFormation (CFn) と AWS CDK について、現場の視点から深く掘り下げていこうと思います。
「CDKが流行っているから、もうCFnは古いのでは?」という声をよく聞きます。しかし、それは大きな誤解です。現場で震えるようなトラブルに直面した時、最後にあなたを救うのは「抽象化の裏側にある純粋なCFnの構造」を知っているかどうかです。
さあ、インフラの深淵を覗く旅を始めましょう。
—
1. CDKとCloudFormation:その「親子関係」を知る
まず、結論から言います。CDKはCloudFormationを置き換えるものではなく、CloudFormationを「生成する」ための高級言語ツールです。
- CloudFormation: AWSの「宣言的」なインフラ記述言語(JSON/YAML)。AWSの全てのAPIの基盤であり、神のような存在。
- AWS CDK: TypeScriptやPythonなどの汎用言語でインフラを書き、内部でCloudFormationテンプレートを自動生成・デプロイする「抽象化レイヤー」。
つまり、CDKをいくらこねくり回しても、出口は必ずCloudFormationテンプレートに行き着きます。 だからこそ、CFnの構造を知ることは、車の運転技術を知らずにF1に乗るような無謀さを回避するための必須教養なのです。
—
2. 生のCloudFormationテンプレートを直接書く意味
「CDKの方がコード量が少なくて楽」という意見は確かに正しいです。しかし、生のCFnテンプレートを直接書くことには、極めて重要なメリットがあります。
- メリット:
- 透明性: AWSの仕様と1対1で対応しているため、裏で何が起きているか完全に予測可能。
- 依存関係の可視化: どのリソースが先に作られるべきか(`DependsOn`)が明確で、トラブルシューティングが容易。
- 環境のポータビリティ: 言語依存がないため、10年後もこのテンプレートはそのまま動き続けます。
- デメリット:
- とにかく冗長。数百行のYAMLを書くのは人間がやることではありません。
—
3. チームのスキルセットに応じた選択基準
エンジニアとして、道具を使い分ける「審美眼」を養ってください。
- 「CloudFormationを選ぶべき」チーム:
- インフラ担当者がAWSの仕様を極めたい。
- 小規模な構成で、依存関係を完全にコントロールしたい。
- セキュリティ要件が極めて厳しく、生成されたコードの「中身」を全て監査する必要がある。
- 「AWS CDKを選ぶべき」チーム:
- 開発スピードが命。アプリケーションエンジニアがインフラを担当する。
- ループ処理や条件分岐を駆使した複雑なリソース管理が必要。
- 「ベストプラクティス(デフォルト値など)」を意識せず、素早く安全な構成を組みたい。
—
4. 実践:まずはここから(HelloWorld)
百聞は一見に如かず。まずは、最もシンプルなCloudFormationテンプレートをデプロイしてみましょう。
ステップ1:準備
PCに [AWS CLI](https://aws.amazon.com/jp/cli/) をインストールし、`aws configure` で認証設定を済ませてください。
ステップ2:テンプレートを作成 (`s3-bucket.yaml`)
以下のコードを保存してください。これがインフラの正体です。
AWS CloudFormationのバージョン指定
AWSTemplateFormatVersion: ‘2010-09-09’
Description: My First S3 Bucket
Resources:
# S3バケットを定義する(最もシンプルなリソース)
MyFirstBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub “my-unique-bucket-${AWS::AccountId}”
# 冪等性を担保するために名前は動的に変えるのが定石です
ステップ3:デプロイ
ターミナルから以下のコマンドを打つだけです。
aws cloudformation deploy \
–template-file s3-bucket.yaml \
–stack-name my-first-stack
これだけで、AWS上に本物のリソースが構築されます。GUIでポチポチ操作してはいけません。「コードが正義」の世界へようこそ。
—
最後に:どちらから学ぶべきか?
私の推奨する学習ロードマップは以下の通りです。
1. CloudFormationのYAMLを100行だけ手書きする: リソース間の依存関係や、`!Ref` や `!Sub` といった関数の使い方を理解する。
2. CDKに触れる: TypeScript等でリソースを定義し、`cdk synth` コマンドを叩く。ここで「自分が書いたコードが、どんなCFnテンプレートに変換されるのか」を必ず確認してください。
この確認作業こそが、真のエンジニアへの近道です。CDKという魔法の杖を使うとき、その杖の先に何が宿っているのかを知っている者だけが、本当のインフラマスターになれるのです。
インフラ構築は、芸術です。皆さんの手で、美しく堅牢なクラウドの世界を創造してください。応援していますよ。