この記事は?
AWSのElastic IP(以降EIP)再割り当て時の対応に関する記事です。
想定する読み手
- AWSでのデプロイ経験が乏しい方
- AWSでデプロイしたアプリを使わないからインスタンス停止、IP解放した方
- EIPを再割り当てしたけどアプリが起動できない方
著者開発環境
mac
Ruby 2.5.1
Rails 5.2.3
AWS
nginx
mySQL
unicorn
そもそもElastic IPとは
AWSで取得できる、アプリへアクセスするためのIPアドレスです。
特定のIPアドレスを指定することはできませんが、ランダムで取得したEIPは、解放※しない限り占有する事ができます。
(※解放:インスタンスに紐付けしているEIPの占有を解除する事)
使用料金
起動中のEC2インスタンスに割り当てたEIPは無料(1インスタンスにつき1つ。2つ目以降は有料)で使用できます。
停止中インスタンスに割り当てられているEIPは有料。(0.005ドル/1時間)
インスタンスを停止していると1ヶ月で、0.005ドル×24(時間)×30(日) = 3.6ドルかかります。
日本円で400円くらいでしょうか。
著者は使用しないアプリがあったのでインスタンスを停止していたのですが、AWSから請求があった事を知り、EIPを解放しました。
が、訳あって久しぶりにアプリの挙動を本番環境で確認するべく、停止していたインスタンスを起動し再度EIPを割り当てました。
すると、アプリが起動しなかった訳なんです。
EIP再割り当て時に必要なことって?
結論、必要な対応は以下の2点でした。
- 本番環境nginx設定内部でelasticIPの書き換え
- ローカル環境config/deploy/production.rb内のelasticIP書き換え
考えてみれば当然の事なんですが、デプロイ時にEIPを記載していた箇所がありました。
そこのEIPを新しく割り当てたEIPに書き換える必要がある、という事ですね。
実際にやった事
本番環境nginx設定内部でelasticIPの書き換え
本番環境にて、nginxの設定画面を開きます。
デイレクトリは自身のアプリのディレクトリです。
[ec2-user@ip-xxx-xx-xx-xx アプリ名]$ sudo vim /etc/nginx/conf.d/rails.conf
以下のような画面が開くはずです。
server {
listen 80;
server_name 52.68.124.79; #ここを書き換え
root /var/www/アプリ名/current/public;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
root /var/www/アプリ名/current/public;
}
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
error_page 500 502 503 504 /500.html;
location = /favicon.ico {
log_not_found off;
}
}
この中のserver_nameという箇所がEIPを記載する箇所なので、ここを新しいEIPに書き換えます。
ローカル環境config/deploy/production.rb内のelasticIP書き換え
これは読んで字の如くなので割愛しますが、
config/deploy/production.rb内にもEIPを記載している箇所がありますので、そちらも新しいEIPに書き換えます。
以上の対応で著者のアプリは久々に起動できました。
おわりに
今回の記事は、読む方をかなり限定するかもしれませんが、それでも誰かのお役に立てれば嬉しいです。