概要
こちらの投稿は2025 Japan AWS Jr.Championsの有志メンバーで作成した『30日間で主要AWSサービスを構築できるようになる』をテーマにした初学者向けのハンズオン問題集のDAY7になります!
問題集の趣旨や作成に至るまでの経緯は以下の記事をご覧いただければと思います。
| 項目 | 内容 |
|---|---|
| 所要時間 | 約1時間 |
| メインサービス | CloudFormation, EC2 |
| 学べること | CloudFormationの書き方、IaCの基本概念 |
| 想定費用 | 約10円(t2.microを1時間使用想定) |
注意:今回CloudFormationのスタック削除まで行うため、ハンズオンを最後まで実施すればリソースの課金は継続しません。しかし、途中で離脱する等で、以下のリソースを削除し忘れると課金が継続します。
課題内容
CloudFormationテンプレートを使って、EC2インスタンス上にApacheウェブサーバーを自動構築し、簡単なHTMLページを表示するシステムを作成します。
CloudFormationを使うことで、インフラのコード化(IaC: Infrastructure as Code)の基本概念を学びます。
アーキテクチャ図
実装機能
- CloudFormationテンプレートでEC2インスタンスを自動作成
- UserDataを使ってApacheの自動インストール・起動
- カスタムHTMLページの自動配置
- セキュリティグループでHTTP(80番ポート)へのアクセス許可
- Elastic IPによる固定IPアドレスの割り当て
💡実装のヒント
CloudFormationの基本構造
CloudFormationテンプレートは以下の基本構造を持ちます:
-
AWSTemplateFormatVersion: テンプレートのバージョン -
Description: テンプレートの説明 -
Parameters: 入力パラメータ -
Resources: 作成するAWSリソース -
Outputs: 出力値
UserDataの活用
EC2インスタンス起動時にUserDataを使ってスクリプトを実行できます。
これを使ってApacheのインストールと設定を自動化しましょう。
セキュリティグループの設定
Webサーバーにアクセスするため、HTTP(80番ポート)とSSH(22番ポート)を許可する
セキュリティグループを作成する必要があります。
完成後のチェックポイント
- CloudFormationスタックが正常に作成される
- EC2インスタンスが起動している
- Elastic IPが割り当てられている
- ブラウザからEC2のパブリックIPにアクセスできる
- カスタムHTMLページが表示される
- CloudFormationスタック削除でリソースが完全に削除される
使用資材
CloudFormationテンプレート(webserver.yml)
AWSTemplateFormatVersion: '2010-09-09'
Description: 'EC2 instance with Apache web server'
Parameters:
InstanceType:
Description: EC2 instance type
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- t2.small
- t2.medium
KeyName:
Description: Name of an existing EC2 KeyPair
Type: AWS::EC2::KeyPair::KeyName
ConstraintDescription: Must be the name of an existing EC2 KeyPair
Resources:
WebServerSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Security group for web server
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: 0.0.0.0/0
WebServerInstance:
Type: AWS::EC2::Instance
Properties:
InstanceType: !Ref InstanceType
KeyName: !Ref KeyName
ImageId: ami-000322c84e9ff1be2 # Amazon Linux 2 AMI (ap-northeast-1)
SecurityGroupIds:
- !Ref WebServerSecurityGroup
UserData:
Fn::Base64: !Sub |
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello CloudFormation!</h1>" > /var/www/html/index.html
echo "<p>This web server was created using CloudFormation.</p>" >> /var/www/html/index.html
echo "<p>Instance ID: $(curl -s http://169.254.169.254/latest/meta-data/instance-id)</p>" >> /var/www/html/index.html
WebServerEIP:
Type: AWS::EC2::EIP
Properties:
InstanceId: !Ref WebServerInstance
Outputs:
WebsiteURL:
Description: URL of the website
Value: !Sub 'http://${WebServerEIP}'
PublicIP:
Description: Public IP address of the web server
Value: !Ref WebServerEIP
リファレンスリンク
解答・構築手順(クリックで開く)
解答と構築手順を見る
ステップ1:事前準備
ステップ2:CloudFormationテンプレートの作成
-
使用資材の
webserver.ymlファイルを、コピー&ペーストするローカルに作成する - (ap-northeast-1以外の場合)AMI IDを使用するリージョンに合わせて修正する
ステップ3:スタックのデプロイ
- AWSマネジメントコンソールを開く
- CloudFormationを検索し、移動する
- 「スタックの作成」→「新しいリソースを使用(標準)」を選択する
- テンプレートファイルをアップロード
- パラメータを設定(キーペア名など)して次へ進む
- スタックオプションの設定はデフォルトのまま次へ進む


- 確認画面に進み、「スタックの作成」をクリックする

- スタックの作成が完了するまで待つ(数分かかります)
ステップ4:リソースの確認
-
CloudFormationコンソールでスタックの状態を見て、「CREATE_COMPLETE」になっていることを確認する
※もし「ROLLBACK_IN_PROGRESS」や「CREATE_FAILED」になっている場合は、CloudFormationのイベントタブでエラー内容を確認し、スタックを削除して再度ステップ3を実行してください。 -
リソースタブを開き、作成されたリソースを確認する

※物理IDのリンクをクリックすると、各リソースの詳細画面に遷移できます。
今回のアーキテクチャ図が、このテンプレートをデプロイするだけで実現できたのが確認できると思います!
ステップ5:動作確認
🧹 片付け(リソース削除)
CloudFormationを使うことで、スタックを削除するだけで、作成したすべてのリソースが自動で削除されます!(ここがIaCのいいところ!!)
デプロイ用コマンド
より簡単にCloudFormationスタックを作成・削除するために、AWS CLIを使用することもできます。以下のコマンドを参考にしてください。 ※AWS CLIがインストールされ、設定されていることを前提としています。 ※`file://webserver.yml`は、ご自身のテンプレートファイルのパスに置き換えてください。 ※`HandsOnKey`は、ご自身のEC2キーペアの名前に置き換えてください。# スタックの作成
aws cloudformation create-stack \
--stack-name WebServerStack \
--template-body file://webserver.yml \
--parameters ParameterKey=KeyName,ParameterValue=HandsOnKey
# スタックの状態確認
aws cloudformation describe-stacks --stack-name WebServerStack
# スタックの削除
aws cloudformation delete-stack --stack-name WebServerStack
おつかれさまでした!
この課題では、完成後のチェックポイントに加えて、Infrastructure as Code (IaC) の基本概念と自動化の重要性が分かればクリアです!
完成後のチェックポイントはクリアしたけど、「EC2インスタンスを立てるなら、わざわざCloudFormationを使わなくてもいいのでは?」と思う方もいらっしゃるのかなと思います。例えば、実務で「100台のインスタンスをコンソールから立ててください」という指示が降りてきたらいかがでしょうか?…少し気が遠くなりますよね。
もちろん手間もかかるし、手動構築となるので当然ミスも増えるかと思います。今回の課題では1台のEC2インスタンスを構築しましたが、CloudFormationを使うことで、複数のリソースを一括で管理・デプロイすることができます。
また、近年では生成AIの発展により、インフラ構築の自動化がますます重要になっています。
この課題を通じて、IaCの基本概念とCloudFormationの使い方を理解し、自動化の重要性を実感していただければ幸いです。
次回は応用編として、CloudFormationを使って、ALBやAuto Scalingを使った高可用性構成にも挑戦してみましょう!





