LoginSignup
0
0

More than 3 years have passed since last update.

AWSのインスタンス起動時にゲームを起動するようにしたい

Posted at

経緯

身内でゲームサーバを立てることになったので、AWSでゲームサーバを構築しました。
24時間起動する運用ではなく、平日の夜や土日にだけ起動するようにしたかった。
今後CloudWatchなどでを用いて、インスタンスの定時起動、終了を行うと思うと、
インスタンス起動時に毎回サーバに入ってゲームを起動するコマンド実行を自動化したかった。

やりたいこと

インスタンス起動時にゲームの起動するコマンドが実行されてゲームが起動したい。

使ったAMI

  • Amazon Linux 2 AMI(64bit x86)

方法

AWSに限らず、Linuxには「chkconfig」があるらしい。
サーバ起動時の挙動を設定してくれている機能くらいの認識で使ってみた。

chkconfigを設定するまでの誤解

私がinputした情報

他のサイトみながら、やっていくと以下のディレクトリに起動時に動かしたいサービスを登録するらしい。
/etc/init.d/(サービス名)

hoge登録するサービスは以下のような例

#!/bin/sh
case "$1" in
 start)
       sh -x /home/ec2-user/hoge_start_script.sh
       ;;
 stop)
       sh -x /home/ec2-user/hoge_stop_script.sh
       ;;
  *) break ;;
esac

この情報だけを持って試しに動かしてみた。

サービス名の記述にはフォーマットがある

例を見て起動スクリプトだけ動かしたかった私はhogeサービスを作り、
/etc/init.d/hoge

起動するスクリプトだけ記載しました。

#!/bin/sh
sh -x /home/user/hoge_start_script.sh

以下のコマンドでサービスを登録しようとしたところ
sudo chkconfig --add hoge

service hoge does not support chkconfig

と怒られました。
どうも原因は登録するサービスにもフォーマットらしきものがあるそうで、
私が認識したフォーマットは以下で第1引数start、stopの挙動を書くフォーマットにしないといけないそうです。
(私の認識なので語弊があるかもしれません)

#!/bin/sh
case "$1" in
 start)
       (起動時に動かすコマンド)
       ;;
 stop)
       (終了時に動かすコマンド)
       ;;
  *) break ;;
esac

実行ユーザは指定しないといけない

サービスにフォーマットがあることを知り、以下の通り修正してみましたが、
インスタンス起動時に「hoge_start_script.sh」の挙動をしてくれませんでした。

#!/bin/sh
case "$1" in
 start)
       sh -x /home/ec2-user/hoge_start_script.sh
       ;;
 stop)
       sh -x /home/ec2-user/hoge_stop_script.sh
       ;;
  *) break ;;
esac

今回私はAWSのデフォルトユーザである「ec2-user」で作成していましたが、
いろんなサイトを巡ったところ、
ユーザを指定してシェルを実行しないといけないそうです。

最終的に以下のようにサービスを修正することにより、
「hoge_start_script.sh」の挙動をしてくれました。

#!/bin/sh
# chkconfig: 2345 99 10
# description: start shell
case "$1" in
 start)
       su -l ec2-user -c "sh -x /home/ec2-user/hoe_script.sh start"
       ;;
 stop)
       su -l ec2-user -c "sh -x /home/ec2-user/hoge_script.sh stop"
       ;;
  *) break ;;
esac

インスタンス起動時にゲームを起動するようにする手順まとめ

いろいろとはまりましたが、最後にec2インスタンス起動時に特定のシェルを動かすための手順をまとめます。
初めの作業はAWSのコンソール上での作業です。

  1. サービスを作成する

    cd /etc/init.d
    sudo vi hoge
    
  2. サービスのスクリプトを記載する

    #!/bin/sh
    case "$1" in
    start)
       su -l ec2-user -c "sh -x /home/ec2-user/hoe_script.sh start"
       ;;
    stop)
       su -l ec2-user -c "sh -x /home/ec2-user/hoge_script.sh stop"
       ;;
    *) break ;;
    esac
    
  3. 権限付与

    sudo chmod 775 /etc/init.d/hoge
    
  4. 起動時のサービスに登録する。
    ここからはAWSのEC2のGUI上で操作です。
    インスタンスの停止が条件なので、この作業を行う前にインスタンスを停止しておいてください。
    対象のサーバを選択し、
    「アクション」-「インスタンスの設定」-「ユーザデータを編集」を選択する。
    (「ユーザデータを編集」は下の方にあり、ないと勘違いすることもありますが、スクロールすればあります。)
    ユーザーデータをテキストで変更を選択して、以下をテキストボックスに入れる。

sudo chkconfig --add hoge
sudo chkconfig hoge on

これでインスタンス起動時にhogeサービスのシェルが実行されるようになります。

0
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
0
0