【ITニュース解説】Getting Started with IaC on AWS: Choosing Between CloudFormation, SAM, and CDK
2025年09月05日に「Dev.to」が公開したITニュース「Getting Started with IaC on AWS: Choosing Between CloudFormation, SAM, and CDK」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
AWSでIaCを始めるには、CloudFormation、SAM、CDKの3つの選択肢がある。CloudFormationはAWSの基本サービスで、JSON/YAMLで記述。SAMはサーバーレスアプリに特化し、CLIも便利。CDKはTypeScriptなどで記述でき、複雑な構成に向いている。ReactアプリならCDKかCloudFormation、サーバーレスならSAM、ECSなどはCDKが推奨される。IaC導入で環境構築の自動化や再現性が向上する。
ITニュース解説
この記事では、AWS(Amazon Web Services)におけるIaC(Infrastructure as Code)の主要なツールであるCloudFormation、AWS SAM、AWS CDKについて解説する。IaCとは、インフラをコードとして記述し、管理する手法のことだ。
なぜIaCが重要なのか。まず、環境の再現性が高まる。開発環境、ステージング環境、本番環境など、複数の環境を容易に構築できる。次に、人的ミスを減らせる。AWS Management Consoleを手動で操作する際に発生しがちな設定ミスを防ぐことができる。さらに、自動化との連携が容易になる。インフラのコードをGitHub ActionsなどのCI/CDパイプラインに組み込むことで、インフラの変更を自動的に実行できる。
AWSにおける主要なIaCツールは、CloudFormation、AWS SAM(Serverless Application Model)、AWS CDK(Cloud Development Kit)の3つだ。
CloudFormationは、AWSが提供する基本的なIaCサービスだ。JSONまたはYAML形式でリソースを定義する。CloudFormationの利点は、すべてのAWSサービスをカバーしており、AWSが公式に提供しているテンプレートが豊富に存在することだ。一方、欠点としては、記述が冗長になりやすく、大規模な環境を管理するのが難しい場合がある。CloudFormationは、シンプルなテンプレートを使用したい場合や、AWS公式のサンプルから学びたい場合に適している。
AWS SAMは、CloudFormationを基盤として構築されたツールで、特にサーバーレスアプリケーションに特化している。Lambda、API Gateway、DynamoDBなどのリソースを簡単に定義できる。SAM CLI(コマンドラインインターフェース)を使用すると、sam build、sam local invoke、sam deployなどのコマンドで、サーバーレスアプリケーションの構築、ローカルでのテスト、デプロイを効率的に行える。AWS SAMの利点は、サーバーレスのワークロードに対して最小限の設定で済むことだ。欠点としては、サーバーレス以外のサービスには適していない。サーバーレスアプリケーションを迅速に構築、デプロイしたい場合に最適だ。
AWS CDKは、TypeScript、Python、Javaなどのプログラミング言語を使用してインフラを定義できるツールだ。内部的にはCloudFormationに変換される。AWS CDKの利点は、ループ、条件分岐、抽象化などのプログラミングの概念を利用できるため、複雑なインフラを管理するのに適していることだ。欠点としては、学習コストがやや高いことが挙げられる。お気に入りのプログラミング言語を使用したい場合や、大規模で複雑な環境を管理する必要がある場合に適している。
具体的な例として、ReactアプリケーションをS3とCloudFrontでホストするフロントエンドの例を考える。この場合、CDKまたはCloudFormationが推奨される。CDK(TypeScript)では、S3バケットを作成し、Reactの静的ファイルをデプロイし、CloudFrontディストリビューションを作成して、コンテンツを配信するコードを記述する。
サーバーレスバックエンドの例として、LambdaとAPI Gatewayを使用する場合を考える。この場合、AWS SAMが推奨される。CloudFormationでも同様の構成を構築できるが、SAMを使用する方がはるかに簡単だ。SAM(YAML)では、Lambda関数のハンドラ、ランタイム、API Gatewayのエンドポイントなどを定義するコードを記述する。
サーバーレスではないバックエンドの例として、ECS(Elastic Container Service)、VPC(Virtual Private Cloud)、RDS(Relational Database Service)を使用する場合を考える。この場合、CDKが推奨される。CDKを使用すると、VPC、ECSクラスタ、Fargateサービスなどを定義し、複雑なインフラをコードとして管理できる。
まとめとして、CloudFormationはAWSインフラをYAML/JSONで定義するための基本的なツールだ。AWS SAMは、Lambdaを多用するサーバーレスアプリケーションに最適化されている。AWS CDKは、複雑または大規模なインフラに対して、柔軟で表現力豊かな選択肢となる。
AWS Management Consoleを手動で操作することに慣れている場合でも、IaCを採用することで、再現性、環境の一貫性、自動化といった大きなメリットが得られる。IaCを初めて使用する場合は、フロントエンドのセットアップから始め、徐々にCI/CD(GitHub Actionsなど)と連携させて、完全な自動化を目指すのがおすすめだ。