はじめに
はじめに言っておきます。
この記事を読んでも事象の根本的解決は出来ません。(根本解決は出来なかったです。)
ただのメモです。
環境
- Ruby 2.4.0
- Rails 5系
AWS
- Elasticbeanstalk
- S3
- CloudFront
- ACM
関連がありそうなのはこの辺
起きた問題
Railsで構築されたアプリケーションがある日突然、画像やCSSが読み込めなくなっていた。
Webブラウザのコンソールを見てみると、以下のようなエラーが頻発していた。
ERR_CERT_DATE_INVALID
コミットを見ても怪しいものはないから、ソースに問題があるとは考えずらい。
心当たりがあるとすれば、最近ACMで発行されていたSSLの証明書が更新された旨のメールが来ていた。
調査したこと
同様に構築されているサイトの設定などと見比べつつ調査を行なった。
時系列に書くので、煩わしいことがあるかと思いますが、適宜読み解いてください。
静的ファイルの問題
Railsのproduction.rbを編集
image_pathとかで画像を表示させている部分などにもS3経由のパスがあたってしまっているので、production.rb
を確認することにした。
production.rb
内に
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
config.action_controller.asset_host = 'hogehoge'
という記述があったので、上記を以下のようにして、disableに変更
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = 'hogehoge'
これでひとまず、静的に読み込ませている部分のpathは、/assets/
からよんでくれるようになった。
動的ファイルの問題
S3
まじはS3内の画像があるかどうかを確認した。
画像は格納されていた。
Amazon Certificate Manager
SSLの更新が弾かれてる...?
確認すると、問題なく発行されていることが確認できた。
Cloudfront
画像の配信をhttpsで行なっているので、Cloudfrontの設定を確認してみることにした。
すると。「SSL Certificate」の項目が「arn...」と表示されていた。
正しく動作しているサイトは、ACMで登録している「ドメイン名」が表示されていた。
明らかに怪しい....
またS3
確認し忘れていたけど、S3に格納されている画像のURLを見てみた。
画像などが、表示されていないサイトの画像のパスをみると、「https://s3のバケット名...」 となっていたけど、S3の管理画面で確認できた画像のパスは、「https://s3-リージョン.amazonaws.com/バケット名...」 のようになっていた。
またproduction.rbを確認する
あまり詳しくは書けないけど、画像をS3経由でやりとりさせるための設定が書かれていた。
以下例:
# 変更前の記述
s3_host_alias: 'https://s3のバケット名...'
# 変更後の記述
s3_host_alias: 'https://s3-リージョン名.amazonaws.com/s3バケット名...'
以上でなんとか復旧することが出来たけど、根本原因はわかっていないし、今まで動いてた設定を変更しなければいけなくなったのも最悪の手段だった...
同様の問題に遭遇した方はコメントいただけますと幸いです。