【小ネタ】EC2作成時にユーザーデータでApacheをインストールしてドキュメントルートにindex.htmlを生成する方法

ユーザーデータを活用することで、EC2 起動時にモジュールのインストール、コマンドの実行、簡単なファイル作成などを行うことができます。
2022.07.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

テクニカルサポートの m.hayakawa です。

検証のため、EC2 に Apache をインストールしてドキュメントルートに静的ファイルを置きたい場合があります。

これをユーザデータに記載して、一発でやる方法を小ネタとしてご紹介します。

基本情報(ユーザデータとは)

起動時に Linux インスタンスでコマンドを実行する - Amazon Elastic Compute Cloud

Amazon EC2 でインスタンスを起動するとき、起動後にそのインスタンスにユーザーデータを渡し、一般的な自動設定タスクを実行したり、スクリプトを実行したりできます。

簡単に解説すると、インスタンス起動時に特定のコマンドが実行できるという機能になります。

やってみる

今回は yum update と Apache のインストール、起動、および自動起動設定の付与、ドキュメントルートにindex.htmlを生成する設定を、ユーザデータですべて行わせてみます。

#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
touch /var/www/html/index.html
echo "Hello AWS!" | tee -a /var/www/html/index.html

EC2 の パブリック IP にアクセスしてみます。

$ curl http://123.123.123.123/
Hello AWS!

できました!

何が便利か

ELB を使った検証の場合、EC2 は ELB からのヘルスチェックに合格する必要があります。

Apache の構築時は Test Page が表示されますが、ELB のヘルスチェックパスがデフォルトの / だとヘルスチェックに合格せず Unhealthy になりました。(ヘルスチェックステータスの詳細: Health checks failed with these codes: [403])

そのため、ヘルスチェックに応答するファイル(index.html)を明示的に配置させる必要がありました。

これをユーザーデータ一発でできるようにすることで、検証が迅速に行うことができ、利便性が増しました。

最後に

ユーザーデータという名前からか、なかなかとっつきにくい要素ではありますが、EC2 に SSH 接続をして環境構築をしなくてもいいという利点がありますため、積極的に利用していきましょう。

参考情報

本稿作成時に下記の記事を大きく参考にさせていただきました。この場を借り、御礼を申し上げます。

EC2作成時にApacheをユーザーデータで初期インストールする方法