AWS
EC2
Cgi

AWS EC2で懐かしのcgiゲームを動かす

FUJITSU Advent Calendar 2018 その2 の19日目の記事です。

(注意)この記事は個人の見解であり、所属する会社、組織を代表するものではありません。


はじめに

昔やっていたcgiゲーム(箱庭諸島、Fated Labylinth、etc...)を久しぶりに遊びたくなったので、EC2上に設置してみました。


AWSアカウントの作成

公式にガイドがあるのでこちらをご覧ください。

EC2はアカウント取得から1年間、月750時間まで無料枠が存在します。(2018/12/19現在)

一ヶ月は24*31=744時間なので、インスタンスを複数生成しなければ無料枠を超えることはないと思います。


EC2インスタンスの取得


新規インスタンスの作成

EC2マネジメントコンソールにログインしてください。

左ペインの「インスタンス」から、インスタンスの生成をクリックします。

FireShot Capture 1 - EC2 Management Con_ - https___ap-northeast-1.console.aws.amazon.com_ec2_v2_home.png

無料枠の範囲内でいくつかマシンイメージが選べますが、今回はperlを使いたいので

「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」を選択します。

他のやつを選んでも大丈夫だと思います。

2.png

インスタンスタイプは無料枠の範囲だとt2.microしか選べないのでそれを選択します。


セキュリティグループの設定

EC2ではインスタンスにセキュリティグループというファイアウォールのようなものを設定できます。

今回は公式が提供しているWebサーバーのリファレンスに従って設定します。

httpsは使わないと思いますが、この設定で作っておけば今後webサーバ-を作るときに流用できます。

分かりやすい名前を付けておきましょう。

3.png

設定が終わったら右下の「確認と作成」を押してください。


キーペアの生成

SSH接続に使うキーペアを生成します。

適当な名前をつけてどこか安全な場所に保存してください。

4.png


インスタンスへの接続

適当なSSHクライアントから先ほど作ったインスタンスへアクセスします。

今回はteratermを使用しました。

EC2のマネジメントコンソールからインスタンスのIPv4パブリックIPを確認して、SSHクライアントから接続してください。

5.png

ユーザー名の入力を求められるので、「ec2-user」

パスワードは空欄で大丈夫です。

「RSA/DSA/ECDSA/ED25519鍵を使う」を選んで、さきほど生成した.pemファイルを選択します。

ファイルタイプを「すべてのファイル」にしないと.pemファイルが表示されないので注意してください。

5.png

この画面が表示されたらログイン成功です。

とりあえずsudo yum updateでパッケージを最新にしておきましょう。

6.png


Apacheの導入

以下のコマンドを入力してください。

逐一sudoをつけるのが面倒なので、sudo suでrootに入ります。

sudo su

yum -y install httpd
service httpd start
chkconfig httpd on

chkconfig httpd onしておくと、インスタンス起動時に自動でapacheが起動します。

ブラウザでインスタンスのパブリックIPかパブリックDNSにアクセスすれば、apacheのテストページが表示されるはずです。

6.png


cgiゲームの設置


cgiゲームの取得・設置

今回は「箱庭諸島2」を設置してみます。

箱庭諸島の保管庫から「箱庭諸島2スクリプト」と「jcode.pl」をDLし、適当なフォルダに保存します。

拡張子が.txtになっているので、hako-readme.txt以外は.cgiに変更してください。

DLが終わったらフォルダをzipに圧縮してEC2上に転送します。

scpコマンドを使うのが一般的ですが、teratermなら「ファイル」→「SSH SCP」で転送できます。

Fromを圧縮ファイルのパス、Toを今回は/home/ec2-user/に設定してsendします。

7.png

転送したファイルをapacheのcgi-binディレクトリにコピーして解凍します。


cd /var/www/cgi-bin
cp /home/ec2-user/ファイル名.zip .
unzip ファイル名.zip
cd ファイル名


perlパスの変更

cgiファイル内のperlのパスを正しく設定する必要があります。

perlのパスはwhich perlで確認できます。

おそらく/usr/bin/perlになってると思うので、必要ならcgiファイルの先頭行を書き換えます。

文字化けしている場合は:e ++enc=euc-jpで文字コードをeuc-jpにすると直る場合が多いです。

7.png


パーミッションの変更

基本的に全部777にすれば動くユーザーが表示だけできればいいものは644に、実行する必要があるものは755に設定します。

今回はhako-readme.txtに基づいて以下のように設定しました。

 cgi実行可能なディレクトリ(755)/

|
|-- hako-main.cgi (755)
|-- hako-mente.cgi (755)
|-- hako-top.cgi (644)
|-- hako-turn.cgi (644)
|-- hako-map.cgi (644)
|-- jcode.pl (644) ※必要な場合のみ
|-- data (生成される)
|-- data.bak0~3 (生成される)


httpd.confの設定

最後にこのゲームにアクセスするためのURLを設定します。

apacheの設定ファイルは/etc/httpd/conf/httpd.confです。

お好きなエディタで開いて以下のように設定してください。


httpd.conf

ScriptAlias /ゲームの名前/ "/var/www/cgi-bin/ディレクトリ名"

<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

これでhttp://パブリックIP/ゲームの名前/○○○.cgiにアクセスすればcgiが実行されるはずです。

8.png


おわりに

うまく動きましたでしょうか?

パーミッションの設定やフォルダ構造は設置するゲームによって異なるので、いろいろと調べてみてください。

何か間違っている点などありましたらコメント欄で教えていただけると幸いです。


参考

AWS EC2でWebサーバーを構築してみる

Apache:CGIの利用設定をする