🔍【徹底比較】AWS SAM vs AWS CDK:サーバレス時代のInfrastructure as Code、どっちが最適?
はじめに
サーバレスアーキテクチャの普及により、インフラ構成をコードで管理する「Infrastructure as Code(IaC)」は開発における重要スキルとなっています。AWSではこのIaCを実現する手段として、以下の2つが代表的です。
- AWS SAM(Serverless Application Model)
- AWS CDK(Cloud Development Kit)
では、どちらを使えばいいのでしょうか?
この記事では、それぞれの特徴・メリット・ユースケースを徹底比較し、どんなプロジェクトにどちらが向いているのかを具体的に解説します。
1. 💡 IaCとは?前提知識の整理
📘 Infrastructure as Code(IaC)とは?
IaCとは、サーバー・ネットワーク・ストレージ・データベースなどのインフラ構成をコードとして記述・管理する手法です。
✅ 主なメリット:
- 再現性:環境を何度でも同じ状態で再構築できる
- バージョン管理:Git等で構成の変更履歴が追える
- 自動化:CI/CDパイプラインと連携し、環境構築を自動化
2. 🚀 AWS SAM の特徴と利点
🔹概要:
AWS SAMは、**サーバレスアプリケーション(Lambda中心)**に特化したIaCツールです。CloudFormationを簡略化したYAMLベースのテンプレートで、少ない記述でインフラ定義ができます。
🔸主な特徴:
- Lambda / API Gateway / DynamoDBなどサーバレス構成に特化
- YAMLベースでシンプルに記述可能
sam local
でローカル実行&デバッグが可能sam deploy
で簡単デプロイ- CloudFormationとの互換性あり
🔧 例:Lambda + API Gateway 定義(YAML)
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
Handler: app.lambda_handler
Runtime: python3.9
Events:
HelloAPI:
Type: Api
Properties:
Path: /hello
Method: get
3. 🏗 AWS CDK の特徴と利点
🔹概要:
AWS CDKは、TypeScriptやPythonなどの高級プログラミング言語でAWSリソースを定義できる開発者向けのIaCツールです。抽象化されたライブラリとクラスベース設計により、再利用・拡張性に優れます。
🔸主な特徴:
- TypeScript, Python, Java などのプログラミング言語でインフラ記述
- クラス・継承・モジュール化が可能で、大規模開発に向いている
- AWS Construct(再利用可能な構成パーツ)で拡張性が高い
cdk synth
→ CloudFormationテンプレートへ変換cdk deploy
で即デプロイ
🔧 例:Lambda + API Gateway 定義(TypeScript)
const lambdaFn = new lambda.Function(this, 'MyFunction', {
runtime: lambda.Runtime.NODEJS_18_X,
handler: 'index.handler',
code: lambda.Code.fromAsset('lambda'),
});
new apigateway.LambdaRestApi(this, 'APIEndpoint', {
handler: lambdaFn,
});
4. 🥊 SAM vs CDK 比較一覧表
特徴 | AWS SAM | AWS CDK |
---|---|---|
記述形式 | YAML | プログラミング言語 |
特化領域 | サーバレス | AWS全般(ECS, VPCも) |
学習コスト | 低め | 高め(OOP前提) |
再利用性 | 低(テンプレート単位) | 高(モジュール化可能) |
ローカル開発 | sam local 対応 | 基本Cloud上(やや工夫必要) |
対象ユーザー | サーバレス中心の個人開発者 | 複雑構成のチーム開発者 |
5. 🎯 ユースケース別の使い分け
✅ SAMが向いているケース
目的 | 説明 |
---|---|
プロトタイプ開発 | MVPを素早く出す |
小規模サーバレス構成 | Lambda + API Gateway + DynamoDB 程度 |
ローカル実行が重要 | sam local start-api でAPIを確認 |
YAMLで十分 | 複雑な構成不要な場合 |
✅ CDKが向いているケース
目的 | 説明 |
---|---|
大規模構成 | VPC, ECS, EKS など含む |
環境分割管理 | dev/stg/prodなど |
コード再利用 | モジュール分割・CI連携が重要 |
開発者チーム向け | ソフトウェア設計が必要な構成 |
6. 🔁 実例:同じ構成をSAMとCDKで書くと?
(ここでは、Lambda + API Gateway + DynamoDB構成をSAMとCDKでそれぞれ構築したソースコード例を別記事で展開可能です)
☑ ご希望であれば別記事にてテンプレートコード付きでご紹介可能です。
7. ✅ 結論とおすすめ構成
開発段階 | おすすめツール |
---|---|
アイデア検証・MVP | ✅ AWS SAM |
本番運用・継続的開発 | ✅ AWS CDK |
さらに、「SAMで素早く構築 → 必要に応じてCDKでリファクタ」 という段階的なアプローチも有効です。
8. ❓よくある質問(FAQ)
Q1. SAMとCDK、同時に使えるの?
→ 可能ですが、CloudFormationスタックの管理が複雑になるため非推奨です。
Q2. CDKでローカル実行はできるの?
→ 基本的にはCloud上で動作しますが、工夫すれば部分的にローカル実行も可能です(例:jest + mocks)
Q3. 学習コストを抑えるには?
→ まずはSAMでIaCに慣れ、徐々にCDKへスキルを広げるのがおすすめです。
✍ おわりに
AWS SAMとAWS CDKはどちらも非常に強力なIaCツールですが、「プロジェクトの規模・目的・開発体制」によって最適解が異なります。
あなたのプロジェクトが今どのフェーズにあるか、どれほどの拡張性・自動化が求められているかをよく見極めて、最適なIaCツールを選びましょう。
コメント