今日は昨日正常に動いていたアプリケーションがRDSに接続できなくなっていたので原因を調査していました。
結論から書くと、GolangでDB接続情報を書く箇所でエンドポイントにタイポがあっただけだったのですが、トラブルシューティングが迷走してしまい、かなり時間がかかってしまいました。
最近は勉強しながらブログを書いているので、完全に間違った方向に調査している自分を文章にまとめてしまっていたのですが、消すのももったいないので投稿しようと思います。
そして今後の成長に活かしていければ良いなと。
先に全体のまとめを書いておくと、ブラウザからアプリにアクセスしたときCORSでのエラーのメッセージが出ていたため見慣れないエラーに焦ってCloudFrontとS3の設定が怪しいんじゃないかと調べてました。が、DB接続情報のタイポを直したら全て解決しました。
解決したからよかったけど、CORSのエラーメッセージは一体なんだったんだろう?
以下迷走したトラブルシューティングの記録です。
ちょっとした変更を加えて何度かECSタスクをバージョンアップしている内になぜかアプリが落ちるようになった。
調べたところRDSに接続しないAPIは正常に返ってきて、RDSに接続するAPIは502エラーになっていた。
ブラウザのコンソールを見てみるとCORSに関するエラーが発生しているよう。
バックエンドで動いているGolangのEchoフレームワークでCORSの設定しているはずだし、昨日の時点ではエラーになっていなかったのでコンソールの文言だけでははっきりした原因はわからなかった。
どこから手をつけて良いかパッと思いつかなかったのでとりあえず「No 'Access-Control-Allow-Origin' header is present on the requested resource.」でググってみるとちょっとCloudFrontが怪しい気がしてきた。
CloudFrontが怪しいと思った根拠は
昨日までは動いていた->実装はたぶんCORS設定問題ない(考慮が足りないところはあるかも知れないけど)->AWSリソースのどこかで想定外の動きが発生している?->想定外の動きが起きるのはだいたいキャッシュ周り(いきなりトラブルシューティグが雑になる)
以下は確認済み
- GoのアプリからRDSに接続する際のパスワードは正しい->EC2から同じパスワードでRDSに接続できているため
疑問点
トラブルシューティング
とりあえず手を動かしてみないと進まないのでフロントエンドのAWSリソース(S3、CLoudFront)から調査していった。
すると以下の記事が見つかった。
どうやらS3のPermissionsタブにCORSの設定があるらしく、記事の設定をコピーして設定してみました。
マネジメントコンソールから見たらたしかにCORSの設定があり、自分の場合は何も設定されていませんでした。
記事の中でAWS公式のドキュメントへのリンクがあったのでチェックしました。
ここまで書いたあたりで、フロント以前にECSタスクの前に置いてるALBでRDSに接続できるようにした方が良いんじゃないの?と気づき、DBの接続情報が間違っていることに気づき全て解決しました。
ただ見当違いではあったもののS3でのCORSの設定について考える機会にはなったのでよかったです。