AWSで構築するIaC
IaC(Infrastructure as a Code)とは?
IaC(Infrastructure as a Code)とは、webサーバーやデータベースの設定をコード化したものです。IaCを使うことで、手動で構築するよりも簡単にシステムを構築・変更・削除できるようになります。
AWSのインフラ構築と言えば、EC2のインスタンスサイズ選定、SGの設定、RDSやS3、IAMの設定をコンソール画面から設定します。基本的にGUI操作で、EC2内部のnginx、apacheなどのミドルウェアインストールはコマンドで手動実施となります。
これらのGUIやコマンドで手動で行っていたことをコード化して構築するツールとしてIaCがあります。
IaCの種類
AWSで利用できるIaCの種類としては、代表的な例として以下の3つがあります。
- CloudFormation
- CDK (Cloud Development Kit)
- terraform
それぞれのIaCには、特徴がありますので、選択する際は利用環境や要件に応じて選ぶことが重要です。
IaCのメリット
IaCを使用することで、以下のようなメリットがあります。
メンテナンス性
手動で構築した場合よりも、コードでシステムを管理することで、リソースの状態や設定の変更が容易になります。また、コードのバージョン管理もできるため、変更履歴を確認しやすくなります。
また、複数人のチーム開発にも向いています。ドキュメントによる引継ぎやパラメータシートには限界があります。コード化することにより属人化を防ぐことができます。
環境の再現性
IaCを使用することで、環境の再現性が向上します。コードを利用することで、手動によるヒューマンエラーを減らし、再現性の高い環境を構築できます。また、異なる環境でも同じコードを使用することで、開発・テスト・本番など、環境の切り替えもスムーズに行えます。
IaCを利用しない場合は、開発、本番などで2回同じ構築作業が必要となります。IaCを利用すると、envファイルの文字をdev⇀prodのように変更するだけで構築できるようになります。
自動化
IaCを使用することで、手動で行っていたリソースの作成や設定変更を自動化することができます。これにより、リソースの管理を効率的に行うことができます。
コードが完成すれば、2-3コマンドを実行するだけで環境構築をすることができます。環境の削除も1コマンドで実施可能です。非常に簡単に環境をビルド&デストロイできます。
コスト削減
IaCを利用すると、2〜3コマンドで環境の構築から削除まで出来るようになります。AWSなどのサービスは従量課金制となるため、開発期間中は作業をする時間帯だけデプロイを実施し、検証終了後は環境の削除をすることでコスト削減をすることができます。
ポートフォリオ
フリーランスや転職する方には、ポートフォリオとして活用することができます。インフラエンジニアはポートフォリオを示す方法が資格などでしかアピールできませんでしたが、IaCを提示することでポートフォリオとして活用することができます。
IaCのデメリット
IaCを使用することで、以下のようなデメリットがあります。
学習コスト
IaCを使用するためには、特定のプログラミング言語やフレームワークの知識が必要です。また、適切なコーディング規則やベストプラクティスに則って構築することが推奨されています。
IaCごとに扱うプログラミング言語も異なります。インフラエンジニアはプログラミング言語を扱わない場合が多いため、学習コストが大きくなります。
全てのサービスを作成できるわけではない
IaCを使用してリソースを作成することができるAWSのサービスは多岐にわたりますが、すべてのサービスがIaCに対応しているわけではありません。一部機能に限定される場合や手動でリソースを作成する必要がある場合があります。
随時バージョンアップにより対応できるサービスは増えています。
ヒューマンエラー時の影響範囲が大きい
IaCを使用する場合、コードに誤りがあった場合、全体に影響を与える可能性があります。そのため、十分なテストと慎重なデプロイが必要です。
開発スピードの低下
手動で作成する場合に比べて、開発スピードは低下します。また、手動でのリソース作成はできる状態に変わりはないため、手動変更とIaCの差分(ドリフト)チェックが必要になります。
差分(ドリフト)が発見された場合、IaC側を再度修正する必要が出てくるため、更に時間がかかってしまいます。
IaCの種類とメリット・デメリット

実際のIaCの種類とそのメリット、デメリットを紹介します。IaCの採用する基準の参考になると思います。
CloudFormation
CloudFormationは、AWSが提供するマネージド型のIaCサービスです。JSONまたはYAML形式のテンプレートを使用して、リソースを定義し、アプリケーションのデプロイメントやインフラストラクチャの変更を自動化することができます。
メリット
- AWSが提供するマネージド型のIaCサービスであるため、機能が豊富であり、AWSのリソースを簡単に作成できます。
- JSONまたはYAML形式のテンプレートを使用して、リソースを定義するため、簡単に実装できます。
- CloudFormationスタックのロールバックや変更セットによる変更管理、アウトプットの取得が容易にできます。
デメリット
- JSONまたはYAML形式のテンプレートを使用するため、可読性が低い場合があります。
- テンプレートの更新時に、CloudFormationスタックを更新する必要があります。スタックの更新中に、アプリケーションのダウンタイムが発生する可能性があります。
- テンプレートの記述に慣れていない場合、学習コストが高くなる場合があります。
CDK(Cloud Development Kit)
CDKは、AWSが提供するIaCフレームワークの1つです。JavaScript、TypeScript、Python、Java、C#、Go言語などのプログラミング言語でリソースを定義することができます。
CDKは、AWSリソースをAPIを介して直接AWSに作成するため、CloudFormationよりも高度な制御が可能です。また、CDKはCloudFormationとの統合が強く、CloudFormationで提供されているリソースと、CDKが提供するカスタムリソースを共存させることができます。
メリット
- 開発者はプログラミング言語を使ってリソースを管理できるため、柔軟性が高い。
- プログラミングが出来る人にとって、扱いやすい
- 複数プログラミング言語が利用できるため、門徒が広い
- 既存のAWS CloudFormationスタックとの相互運用性が高く、AWS CloudFormationでサポートされているサービスをCDKで使用できる。
デメリット
- プログラミング知識が必要
- CDKが生成するCloudFormationテンプレートが複雑になり、理解しづらくなることがある
- 対応していないサービスがある
terraform
Terraformは、Infrastructure as Code(IaC)のためのオープンソースのツールです。Terraformを使用することで、クラウドプロバイダーのインフラストラクチャの自動化が可能になります。Terraformは、AWS、Google Cloud Platform、Microsoft Azureなどの主要なクラウドプロバイダーに対応しています。
terraformについての学習方法は下記で紹介しています。
terraformの学習には下記Udemyがおすすめです。私も受講しています。
AWS と Terraformで実現するInfrastructure as Code
メリット
- 豊富なプロバイダとモジュールを提供しているため、AWS以外のクラウドでも利用できる
- マルチクラウドを採用できる
- バージョンアップが頻繫に行われており、機能追加やサービスの対応も早い
デメリット
- HCLの文法に慣れるまでの学習コストがかかる
- バージョンアップが頻繁に行われており、メンテナンスが大変。バージョンを固定してデプロイすることが必須。
おわりに
今回は、AWSで構築するIaC(CloudFormation、CDK、Terraform)の選び方について解説しました。それぞれのツールにはメリット・デメリットがありますが、適切に選択することで、インフラストラクチャの構築・管理を効率的に行えるようになります。特に初心者の場合は、学習コストやスキルレベルなどを考慮し、慎重に選択することが大切です。
AWSの効果的な学習方法は?

最後に、AWSの効果的な学習方法をご紹介します。
自学自習はUdemy講座
オンラインプラットフォームであるUdemyは安価で手軽にAWSの学習が可能です。
しかし、上記で紹介したような実際のAWSエンジニアが実施している構築スキルまでは教えてくれません。初心者~中級者向けの講座が多くなっています。
私も受講した、初心者向けAWS講座を下記記事でまとめています。ご参考ください。
1人で学習が難しい場合はオンラインレッスン
1人で学習が難しい場合はオンラインレッスンがおすすめです。
最近では、AWS講座を提供するオンラインレッスンも増えてきました。
料金は高くなりますが、現役エンジニアからAWSについて学ぶことができます。
本ブログ執筆者のメンタリングも受付中
本ブログを執筆している[KAITech]もメンタリングを受け付けています。
オンラインレッスンは高くて手が出せないという方は私までお気軽にご相談ください。
下記から承っております。