📘 はじめに
AWSでEC2を構築する際、マネジメントコンソール上からボタン操作で簡単に構築できます。
しかし、毎回手作業で設定していると環境差異が生まれたり、再構築が面倒になったりするという問題が発生しがちです。
そこで役立つのが CloudFormationによるIaC(Infrastructure as Code) です。
💡 IaC(Infrastructure as Code)とは?
IaC(Infrastructure as Code) とは、インフラ構成をコードとして記述し、自動でプロビジョニング・管理できるようにする手法です。
簡単にいうと、サーバーやネットワークの設定を「手作業」ではなく「コード」で管理する方法 です。
AWS公式では、IaCにより 自動化・標準化 / 設定ミスの防止 / 再現性の高い環境構築 / バージョン管理 / 迅速なデプロイ が可能になる点が強調されています。
AWS公式のIaCの説明はこちら
🧩 CloudFormationとは?
AWS CloudFormation は、 AWS リソースの作成をテンプレート(YAML / JSON)をもとに自動化できるサービス です。
テンプレートに EC2・RDS・VPC などの構成を記述すると、その内容に基づいて リソースの作成・更新・削除を自動的に実行 してくれます。
CloudFormation 自体の利用料金は無料で、テンプレートで作成されたAWSリソースに対してのみ料金が発生します。
CloudFormation を使うことで、手作業による設定ミスを防ぎ、
安定したインフラ構築を効率的に行える ようになります。
🖥️ EC2を作成するテンプレート例
AWSTemplateFormatVersion: '2010-09-09'
Description: EC2 Create
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-xxxxxxxxxxxxxxxxx
InstanceType: t3.micro
KeyName: my-ec2-key
SubnetId: subnet-xxxxxxxxxxxxxxxxx
SecurityGroupIds:
- sg-xxxxxxxxxxxxxxxxx
DisableApiTermination: true
Tags:
- Key: Name
Value: MyEC2Instance
🔍 テンプレートの内容をセクションごとに解説
上記テンプレート例をもとにセクションごとに分けて解説していきます。
AWS公式のセクションの説明はこちら
🔹 AWSTemplateFormatVersion / Description
AWSTemplateFormatVersion: '2010-09-09'
Description: EC2 Create
AWSTemplateFormatVersion:テンプレートのバージョン(固定)
Description:テンプレートの説明文(任意)
🔹 Resources
CloudFormation テンプレートの中核となる必須セクションです。
Properties の中に EC2 の設定を記述します。
事前にマネジメントコンソール上やCLIにて指定したい AMI / サブネット / セキュリティグループ のIDなどを控えておくとスムーズです![]()
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
🔸 ImageId :AMIの設定
ImageId: ami-xxxxxxxxxxxxxxxxx
「ami-」から始まるAMIのIDを指定すると、指定したAMIでEC2が作成できます。
🔸 InstanceType :インスタンスタイプの設定
InstanceType: t3.micro
指定したいインスタンスタイプを設定できます。
ここでは適当に「t3.micro」としています。
利用可能なインスタンスタイプはこちら
🔸 KeyName :キーペアの設定
KeyName: my-ec2-key
事前にキーペアを作成しておく必要があります。
ここでは適当に「my-ec2-key」としています。
🔸 SubnetId :サブネットの設定
SubnetId: subnet-xxxxxxxxxxxxxxxxx
「subnet-」から始まるサブネットのIDを指定すると、指定したサブネットに配置されます。
マネジメントコンソール上でEC2を作成する際は、「ネットワーク設定」にて設定できます。
🔸 SecurityGroupIds :セキュリティグループの設定
SecurityGroupIds:
- sg-xxxxxxxxxxxxxxxxx
「sg-」から始まるセキュリティグループのIDを指定すると、指定したセキュリティグループが適用されます。
マネジメントコンソール上でEC2を作成する際は、「ネットワーク設定」にて設定できます。
SSHやHTTPの許可は、セキュリティグループ側の設定次第です
🔸 DisableApiTermination :終了保護の設定
DisableApiTermination: true
「true」に設定することで、マネジメントコンソールや CLI から誤操作によるEC2の削除を防ぎます。
マネジメントコンソール上でEC2を作成する際は、「高度な詳細」の「終了保護」にて設定できます。
🔸 Tags :タグの設定
Tags:
- Key: Name
Value: MyEC2Instance
EC2 にタグを付与します。EBSにも継承されます。
ここでは適当に「MyEC2Instance」としており、マネジメントコンソール上でインスタンス名を確認する際に「MyEC2Instance」と表示されます。
タグを付与することで、インスタンス名として表示されるため、CloudWatch等の監視ツールで識別しやすくなったりなど運用面でのメリットがあります。
📝 まとめ
CloudFormationは、同じ構成を何度も再現したい場合や環境ごとに統一した設定を適用したい場合にとても有効です。
テンプレート化しておくことで、誰が実行しても同じ構成を短時間で構築でき、運用の安定性も高まります![]()
一方で、要件がまだ固まっていない段階 や 一度きりの構築 であれば、マネジメントコンソールから作成した方が、パラメータを確認しながら柔軟に調整できるため便利です。
用途に応じて CloudFormation とマネジメントコンソール操作を使い分けることで、より効率的に AWS 環境を構築・運用できるようになると思います。
参考文献
いちばんやさしい新しいAWSの教本
人気講師が教えるDXを支えるクラウドコンピューティング
-近藤恭平 (著), 中村哲也 (著)