EC2のユーザーデータに記述したスクリプトが実行されない

EC2のユーザーデータに記述したスクリプトが実行されない

EC2のユーザーデータに記述したスクリプトが実行されない問題が発生し、原因を検証してみました
Clock Icon2024.08.29

はじめに

こんにちは、なかたです。
今回は、EC2のユーザーデータでスクリプトの自動化を試みたのですが、実行が確認できずに悩んでいました。
検証を重ねていったところ、とても初歩的なミスだったので記録として残したいと思います。

ユーザーデータとは

スクリプトやコマンドを指定しておくことで、EC2インスタンスの起動時に実行されます。
これにより、インスタンスの設定やソフトウェアのアップデートなどを行うことができます。
ただし、デフォルト動作としてEC2の初回起動時のみに実行されるので注意が必要です。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instancedata-add-user-data.html

実際に実行していたユーザーデータ

以下の画像が、実際に指定したコマンドです。
スクリーンショット 2024-08-07 15.34.31
このコマンドを実行すると、
Helloと書き込まれているテキストファイルをホームフォルダに作成します。

私はサーバー上でコマンドの実行を簡単に確認したい際に、このコマンドを実行していました。
しかし、このコマンドさえ実行が確認できませんでした。

原因

#!/bin/bashを指定していないことが原因でした。
ユーザーデータをスクリプトとして用いたい場合には、行頭にこちらを指定する必要があります。
こちらはシバンと呼ばれているもので、2行目以降のテキストを指定されたインタプリタで実行することを宣言するものになります。
https://dev.classmethod.jp/articles/amazon-ec2-user-data-shebang/

検証

実際にシバンを指定する場合としない場合で比較検証を行ってみました。

A. #!/bin/bashを指定しない

ユーザーデータ
スクリーンショット 2024-08-02 15.29.13
結果
スクリーンショット 2024-08-02 15.32.04
lsコマンドでカレントディレクトリのファイルを確認しましたが、ファイルが作成されていません。
ユーザーデータがスクリプトとして実行されていないことがわかります。

B. #!/bin/bashを指定する

ユーザーデータ
スクリーンショット 2024-08-02 15.33.22
結果
スクリーンショット 2024-08-07 15.37.45
テキストファイルが作成されました!
#!/bin/bashを指定することで、ユーザーデータがスクリプトとして読み込まれたことがわかります。

まとめ

以上、EC2のユーザーデータにはシバンを指定しようという記事でした。
今まではブログ等で拾ったスクリプトを貼り付けていたため、今回の落とし穴に気づきませんでした。

メモ:ユーザーデータを確認するコマンド

また、こちらはEC2に格納されているユーザーデータを確認するコマンドになります。
今回、原因を突き止めるにあたって何度もこちらを実行して確認したため、残しておこうと思います。

bash
sudo cat /var/lib/cloud/instance/user-data.txt

実行結果
スクリーンショット 2024-08-07 15.32.46

アノテーション株式会社について

アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.