はじめに
仮想マシンサービスのAmazon EC2 は、稼働時間による従量課金なので、夜間のような使わない時間帯は停止(Stop)させていたのですがEC2インスタンスを再起動した際に画面が映らなくなってしまいました。
なぜそうなったのか原因と対策を調べていきます。
原因
Stop したEC2 インスタンス(仮想マシンの実体)を起動(Start)し直すと、自動的に割り当てられるグローバルIP アドレスが変わっていたためでした。。。。
ドメイン名を取得していたのでそこで設定していたIPアドレスが変わる前の物に設定してあったので画面が表示されていませんでした。
解決法
####アプリケーション名.confの編集
次に、/etc/nginx/conf.d/アプリケーション名.confを作成します。下記のコマンドを入力してください。
$ sudo vi /etc/nginx/conf.d/アプリケーション名.conf
upstream puma {
server unix:///home/ec2-user/アプリケーション名/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name EC2のIPアドレスもしくはドメイン取得している方はドメイン名を設定; //新しいIPアドレスに変更
root /home/ec2-user/アプリケーション名/public;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 100M;
include /etc/nginx/mime.types;
location / {
proxy_pass http://puma;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_connect_timeout 30;
}
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
root /home/ec2-user/アプリケーション名/public;
}
}
AWSにアクセスしてAWS Route 53で設定しているIPアドレスを変更する。
これで解決できました!
#対策
IPアドレスを固定する!
IP アドレスを固定するには、グローバルIP アドレスサービスの「Elastic IP アドレス」を使う。
「EIP(Elastic IP)」は、EC2インスタンスにパブリックIPアドレスを付与するサービスです。
EC2インスタンスでは、サービス停止後に再起動すると、パブリックIPアドレスが変わってしまいます。
アクセスのたびにIPアドレスが変わると、そのサービスはユーザにも利用しにくいものになってしまいます。
EIPを使うことで、同じパブリックIPアドレスを継続して利用できるようになります。
####EIPとは?
「EIP(イーアイピー)」は、AWSで固定IPアドレスを利用したいときに便利なサービスです。
一度発行されたIPアドレスは、削除しない限り、消えることはありません。このため、サーバ停止後に再起動しても同じパブリックIPを利用できます。
※EIPは料金が発生する場合があります。
EIPの設定は、「EC2ダッシュボード」画面で行います。
左下の「ネットワーク&セキュリティ」メニューで「Elastic IP」を選択します。
「新しいアドレスの割り当て」画面が表示されます。
まず、新しいIPアドレスを作成します。
「新しいアドレスの割り当て」タブをクリックします。
画面右上の「Elastic IP アドレスの割り当て」ボタンをクリックします。
「Elastic IPの割り当て」画面が表示されるので、右下の「割り当て」ボタンをクリックします。
「割り当て」ボタンをクリックすると、IPアドレスが発行されます。
発行されたIPアドレスを、どのEC2インスタンスで使用するのか、アドレスを関連付けます。
IPアドレスを選択し、「アクション(Actions)」メニューの「Elastic IP アドレスの関連付け」をクリックします。
「Elastic IP アドレスの関連付け」画面が表示されます。
まず、「リソースタイプ」で「インスタンス」を選択します。
「インスタンス」メニューをクリックすると、候補が表示されるので、正しいインスタンスを選択します。
最後に、「関連付ける」ボタンをクリックします。
「関連付けられた Elastic IP アドレスです。」と表示されます。
対象のEIPにインスタンスが関連付けられたことを確認できます。
あとは解決法の所でもやった通り、アプリケーション名.confの編集をすればIPアドレスが固定できます!
####注意
原因はわかりませんが一度インスタンスを停止して再度起動するとIPアドレスは変わらないですがブラウザで確認すると
うまく表示されなくなってしまうので再度.sshでEC2にログインし、再度本番環境のアプリを再起動する
アプリケーションサーバ(Puma)を起動する
※EC2上のRailsアプリケーションのルートディレクトリにいることを確認してください。
以下のコマンドを入力してアプリケーションサーバの起動を行います。
$ rails s -e production
これでうまく表示されると思います!
#最後に
説明がうまくないかもしれませんがご了承ください。
また、間違っているところがあればご教授いただけると幸いです。
最後までありがとうございました。