🫠

EC2のユーザーデータが実行されない

2024/12/01に公開

こんにちは!ta8i2chi8です。

EC2のユーザーデータにスクリプトを記述しているにもかかわらず実行されない問題で時間を溶かしてしまったので、書き残したいと思います。
※初歩的な問題でした。。

結論

原因はユーザーデータの行頭に#!/bin/bashを指定していないためでした。
行頭に#!/bin/bashを指定すれば解決しました。

#!/bin/bash   ←これが抜けていた
sudo sudo yum update -y
sudo amazon-linux-extras install php7.4 -y
sudo yum -y install mysql httpd php-mbstring php-xml
wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
tar zxvf /tmp/latest-ja.tar.gz -C /tmp
sudo cp -r /tmp/wordpress/* /var/www/html/
sudo chown apache:apache -R /var/www/html
sudo systemctl enable httpd.service
sudo systemctl start httpd.service

ユーザーデータとは

ユーザーデータとは、EC2インスタンスの起動時に実行されるスクリプトやコマンドを指定できる仕組みです。これにより、インスタンス起動直後に自動で初期設定やソフトウェアのインストールを行うことができます。

ユーザーデータは通常、以下のような用途で使用されます:

  • Webサーバーの自動セットアップ(例: NginxやApacheのインストール)
  • 環境変数の設定初期ファイルの配置
  • セキュリティパッチの適用などの初期タスクの自動実行

ユーザーデータのスクリプトはシェルスクリプト(#!/bin/bash)として記述するのが一般的です。
正しく設定することで、手動作業を減らし、サーバー構築の時間を大幅に短縮できるため、効率的なインフラ管理に欠かせない機能です。

発生した問題

EC2にWordPressをインストールする処理を自動化したかったため、ユーザーデータに以下スクリプトを記述しました。
しかし、httpd等が起動されず調査することに。

sudo sudo yum update -y
sudo amazon-linux-extras install php7.4 -y
sudo yum -y install mysql httpd php-mbstring php-xml
wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
tar zxvf /tmp/latest-ja.tar.gz -C /tmp
sudo cp -r /tmp/wordpress/* /var/www/html/
sudo chown apache:apache -R /var/www/html
sudo systemctl enable httpd.service
sudo systemctl start httpd.service

解決方法

ユーザーデータの行頭に#!/bin/bashを指定していない点が原因でした。
行頭に#!/bin/bashを指定すれば解決しました。

#!/bin/bash   ←これが抜けていた
sudo sudo yum update -y
sudo amazon-linux-extras install php7.4 -y
sudo yum -y install mysql httpd php-mbstring php-xml
wget http://ja.wordpress.org/latest-ja.tar.gz -P /tmp/
tar zxvf /tmp/latest-ja.tar.gz -C /tmp
sudo cp -r /tmp/wordpress/* /var/www/html/
sudo chown apache:apache -R /var/www/html
sudo systemctl enable httpd.service
sudo systemctl start httpd.service

さいごに

単純なミスに詰まってしまって、お恥ずかしい限りです。
ひとまず解決できてよかったです。

参考

https://dev.classmethod.jp/articles/stuck-with-ec2-userdata-scripts/

Discussion