EC2のユーザーデータに記述したスクリプトが実行されない
はじめに
こんにちは、なかたです。
今回は、EC2のユーザーデータでスクリプトの自動化を試みたのですが、実行が確認できずに悩んでいました。
検証を重ねていったところ、とても初歩的なミスだったので記録として残したいと思います。
ユーザーデータとは
スクリプトやコマンドを指定しておくことで、EC2インスタンスの起動時に実行されます。
これにより、インスタンスの設定やソフトウェアのアップデートなどを行うことができます。
ただし、デフォルト動作としてEC2の初回起動時のみに実行されるので注意が必要です。
実際に実行していたユーザーデータ
以下の画像が、実際に指定したコマンドです。
このコマンドを実行すると、
Hello
と書き込まれているテキストファイルをホームフォルダに作成します。
私はサーバー上でコマンドの実行を簡単に確認したい際に、このコマンドを実行していました。
しかし、このコマンドさえ実行が確認できませんでした。
原因
#!/bin/bash
を指定していないことが原因でした。
ユーザーデータをスクリプトとして用いたい場合には、行頭にこちらを指定する必要があります。
こちらはシバン
と呼ばれているもので、2行目以降のテキストを指定されたインタプリタで実行することを宣言するものになります。
検証
実際にシバンを指定する場合としない場合で比較検証を行ってみました。
#!/bin/bash
を指定しない
A. ユーザーデータ
結果
lsコマンドでカレントディレクトリのファイルを確認しましたが、ファイルが作成されていません。
ユーザーデータがスクリプトとして実行されていないことがわかります。
#!/bin/bash
を指定する
B. ユーザーデータ
結果
テキストファイルが作成されました!
#!/bin/bash
を指定することで、ユーザーデータがスクリプトとして読み込まれたことがわかります。
まとめ
以上、EC2のユーザーデータにはシバンを指定しようという記事でした。
今まではブログ等で拾ったスクリプトを貼り付けていたため、今回の落とし穴に気づきませんでした。
メモ:ユーザーデータを確認するコマンド
また、こちらはEC2に格納されているユーザーデータを確認するコマンドになります。
今回、原因を突き止めるにあたって何度もこちらを実行して確認したため、残しておこうと思います。
sudo cat /var/lib/cloud/instance/user-data.txt
実行結果
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。