LoginSignup
18
5

More than 1 year has passed since last update.

突然Auroraに接続できなくなった!!と同僚から相談を受けたときの話

Last updated at Posted at 2023-04-21

はじめに

こんにちは、クマ松です。

ある日の朝に同僚から、彼が所属するプロジェクトで発生した障害に関して、こんな相談を受けました。

障害の内容

===========ここから============

AWSアカウントAのAWS DMSから
AWSアカウントBのAurora.Mysqlクラスターのデータを取得できなくなった。
取得できなくなったタイミングは、深夜作業中にMySQLをr5.12xlargeからr5.8xlargeへ変更したあとくらいから。
AWS DMSのあるVPCとAuroraのVPCはVPCピアリングで接続されており、ネットワーク構成は変更していない。

エラー文言はこんな感じ。
AWS DMSのタスクを何度再開してもダメ。


Test Endpoint failed: Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider ODBC general error., Application-Detailed-Message: RetCode: SQL_ERROR SqlState: HY000 NativeError: 2003 Message: [unixODBC][MySQL][ODBC 8.0(w) Driver]Can't connect to MySQL server on 'xxxxx.ap-northeast-1.rds.amazonaws.com' (110)


===========ここまで============

いかがでしょう。原因分かりますか?

取得できなくなったタイミングは、MySQLをr5.12xlargeからr5.8xlargeへ変更したあとくらいから

当初は、パラメータグループの設定値が悪さをしているのかと思いました。
インスタンスタイプのサイズを小さくしたことが直接的な原因のように思えたので、パラメータとして設定可能な値が変わってしまったのではないかと考え、そういう事象が発生した例が無いかエラー文言を頼りに調査しました。

Can't connect to MySQL server on 'xxxxx.ap-northeast-1.rds.amazonaws.com'

しかしこのエラーについてどんなに調べても、「Security Group、ACLの設定を見直せ」と指南するブログしか出てきません。
信じられないけどネットワークの問題なんだろうと思って調査をし直しました。

結論

直接の原因は単純で、DMSの参照先であるPrimaryインスタンスが配置されたサブネットのルートテーブルに、DMSインスタンスからのルートが許可されていなかったからでした。
インスタンスのサイズを変える前までは接続できていたのに、何故急に接続できなくなったのでしょう?

Auroraの可用性

Amazon Auroraには自動フェイルオーバーという機能があります。
Primaryインスタンスに障害が発生すると、Aurora ReplicaがPrimaryインスタンスに昇格します

自動フェイルオーバーが発生してもDMSのアクセス先になるエンドポイントは変わりません。

Qiita-AmazonAurora.png

そしてAuroraでは、DBサブネットグループを作成することで、PrimaryやReplicaなどのインスタンスが作成されるサブネットを指定することができます。
このDBサブネットグループには2つ以上のサブネットを指定する必要があり、かつ1つのアベイラビリティゾーン内のサブネットのみで構成することはできません。

subnet.png

image.png

何が起こったか

DMSが継続的レプリケーションを実施するためにはPrimaryに接続する必要があります。
参考:How do I troubleshoot binary logging errors that I received when using AWS DMS with Aurora MySQL as the source?

インスタンスのサイズ変更をした際に、Auroraがフェイルオーバーをし、元々ReplicaだったインスタンスがPrimaryに変わってしまっていました。

そして結果的に、Primaryインスタンスが配置されたサブネットと、Replicaインスタンスが配置されたサブネットが変わってしまいました。
更に悪いことに、それぞれのサブネットのルートテーブルの設定値が異なっており、新Primaryインスタンス側のサブネットのルートテーブルに、DMSからのアクセスを可能にするルートが設定されていませんでした。

Qiita-ページ2.png

実はこのAWSアカウントは、昨年別ベンダーから弊社が譲り受けたものらしく、アカウント運用者がネットワーク設計の詳細を把握できていませんでした。(もちろん、「だからうちに責任はない」とは言いません)

譲り受けた後に、コスト最適化の観点でリソース過多になっているEC2やRDSが無いか調査をした結果、インスタンスのサイズ変更をすることになりました。

かつ深夜作業中の本番障害であり、この担当者は「ネットワークに関しては、既存の設定を何も変えていない」という焦りから、「ネットワークの問題ではないはずだ」という先入観を持ってしまっていました。

新Primaryインスタンスが配置されたサブネットのルートテーブルに必要なルートを追加したところ、無事DMSのタスクが動き始めました。

当初は自分が全く関わっていないプロジェクトの障害なんてヘルプできる気がしなかったのですが、原因に気づいたときパズルが解けたみたいで嬉しかったです。

image.png

ここから得られる教訓

  • RDSはフェイルオーバーする前提で、サブネットのネットワーク設計をする
  • AWS資格の為の勉強は、いざと言うときの知識の引き出しになる
  • 調査に悩んだら、基本に立ち返る
18
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
5