こんにちは、マネージドサービス部テクニカルサポート課の坂口です。
今回は現地で AWS re:Invent 2024 に参加しており、IaC ツールの選定方法に関するブレイクアウトセッションに参加しました。
概要
Terraform、CloudFormation、AWS CDK の3つの主要な IaC ツールの特徴、実装方法、選定方法に関するセッション内容をまとめます。
セッションタイトル
DEV309 | How to choose between AWS CloudFormation, Terraform, and AWS CDK
内容
IaC ツールの進化
IaC ツールは以下のように進化してきました。
- 2011年: CloudFormation のリリース
- 2014年: Terraform のリリース
- 2018年: AWS CDK のリリース
- 2020年: CDKTF のリリース
- 2023年: OpenTofu のリリース
実装レベルの概念(L1、L2、L3)
各ツールには3つの実装レベルが存在します。
- L1: 基本的なリソース定義(低レベル)
- L2: モジュール化された実装(中レベル)
- L3: 再利用可能なパターン化された実装(高レベル)
各ツールの特徴
Terraform
- モジュール化が容易
- プロバイダー中立的
- 状態管理が必要
CloudFormation
- AWSネイティブ
- 状態管理はAWSが実施
- Sceptre と Terraform を使うことでテンプレートの再利用やモジュール化が可能
AWS CDK
- プログラミング言語での実装が可能
- 高レベルの抽象化を提供
- CloudFormation テンプレートを生成
プロジェクトごとの選択肢
以下の3つの問いかけを通じて、プロジェクトに最適な選択肢を見極めることができます。
CloudFormation それとも Terraform か
AWS ネイティブな CloudFormation を選ぶべきか、プロバイダー中立的な Terraform を選ぶべきかを比較検討する。AWS CDK を使用するか
プログラミング言語を使った柔軟な定義が必要かどうかを検討する。L1、L2、または L3 どれを使用するか
実装レベル(低レベルのリソース定義から高レベルの再利用可能なパターンまで)のニーズに応じてツールやアプローチを選択する。
選択時の注意点
- チームのスキルレベルや専門知識を適切に評価する
- 必要以上にシステムを複雑にしない
- 新しいツールや技術の習得に伴う学習負担を正しく見積もる
- 特定のツールやプラットフォームに依存しすぎないよう配慮する
感想
このセッションでは、IaC ツールの選定が単なる技術的な特徴の比較に留まらず、チームのスキルや組織のニーズ、さらには顧客やパートナーとの関係性を包括的に考慮する必要があることが語られました。
特に印象的だったのは、「シンプルさを追求する」という原則と、チーム内での知識共有の重要性に対する強調です。
また、L1、L2、L3 というレイヤー概念を活用して各ツールの実装レベルを整理して説明しており、複雑になりがちな IaC の世界を非常に分かりやすく解説している点も良かったです。
実務に適用する際の指針として、非常に価値ある知見が得られるセッションだったと感じました。