2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

KLab EngineerAdvent Calendar 2018

Day 25

AWS EC2 インスタンスをプログラム実行中のみ起動

Posted at

こちらのアドベントカレンダーの最終日の記事となります.
最後の記事がこのような記事で申し訳ないですがやっていきます.
chkconfig で処理の実行 -> シャットダウン をしようという記事です.

そもそもなぜそんなことをするの?

機械学習で AWS を使用しようとしましたが付けっ放しにするにはあまりにも高かったためです.

推奨インスタンスタイプ: p2.xlarge
時間単価: 0.900 USD/h

0.900 USD/h = 72,000 JPY/month
下手すると2ヶ月でGPU積んだパソコンが買えてしまい, 半日消し忘れでも 1,200 JPY.
物忘れが激しいので, 消し忘れを防止するために今回は処理 -> シャットダウンを仕組みに組み込みます.

実装

chkconfig というランレベルに応じて設定されたプログラムを実行するサービスを使用します.
まずは設定するスクリプトを作成します.

/path/to/project/run-script
#!/bin/bash
# chkconfig 4 99 10
# description: 処理したらオサラバ
# processname: run-script
cd /path/to/project
sudo -u ec2-user git pull
./script.sh
if [[ ! -f ./blocking_file ]]; then
    shutdown 0
fi

2 行目の # chkconfig 4 99 10 は chkconfig のファイルとして扱うための文言です.

  • 4 がこのスクリプトを実行するランレベル
  • 99 が起動時の優先度(小さいほど優先される)
  • 10 が終了時の優先度(今回関係なし)

です.

sudo -u ec2-user は ssh の設定を ec2-user のものを使用するためです.
git に使わせる鍵を ec2-user のものにしています.

if は設定ミスの時にシャットダウンを防止して, サーバへアクセスする手段を残すものです.
今回はリポジトリに blocking_file というファイルが存在した場合, シャットダウンされないようにしております.
僕は何度か失敗したのでインスタンスをいくつも潰す羽目になりました.
(後で書きます).

これに symlink を張って chkconfig に追加すれば chkconfig 側の設定は終了です.

$ ln -s /path/to/project/run-script /etc/init.d/
$ chkconfig --list | grep run-script
$ chkconfig --add /etc/init.d/run-script
$ chkconfig --list | grep run-script
> run-script           	0:off	1:off	2:off	3:off	4:on	5:off	6:off

最後に ssh の設定, git clone などを済ませて終了です.

blocking_file を追加したり, 削除したりして動作が実行されていることをご確認ください.

結局何を間違えたの?

主にこの2つのミスを同時にやらかし失敗しました.

  • if 文つけ忘れ
  • git pull の失敗

if 文のつけ忘れに関しては最初の段階で気をつけねば〜と思っていたのですが,
つけて再起動すればサーバのコードも更新されて済むだろと軽い気持ちで考えておりました.
しかし git pull が失敗しておりサーバのコードに更新がかからずアクセス不能になりました.

chkconfig は root ユーザで実行されます.
なので git で ec2-user の鍵を使いたい場合はユーザを変更するか, 鍵を頑張って指定するかになります.
僕は両者どちらも忘れていたため, git pull が不発に終わり作ったサーバにサヨナラバイバイする羽目になりました.
run-script が sudo -u ec2-user git pull になっているのはそのためです.
root で鍵作っても動くかと思います.

#参考
chkconfig で起動順序と終了順序を指定する
EC2起動時にスクリプトを実行する

最後に

初めて記事を書き間違いも多いかと思いますので, これ危ないよ, ここ間違ってるぞという場合は何卒ご指摘お願いいたします.

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?