Amazon EC2のインスタンスタイプ変更先によってはOS上のネットワークアダプタ設定がリセットされることがある
初めに
Amazon EC2を利用する際にインスタンスにどのIPを割り当てるかはAWS側の設定でENIに設定しDHCP経由で割り当てる形をとるのが一般的となります。
一方でOverlay IPと呼ばれる手法もあり、サーバサイドをアクティブスタンバイの冗長構成にしながらもクライアント側の仕様等の兼ね合いで向き先を1つのIPでしか指定しない場合に利用される場合もあります。
※ TGW等で向き先の変更も必要ですがOS側でも認識できるようにネットワークアダプタの設定が必要です
今回この構成をとっている環境において性能上の問題がありセカンダリに一度フェイルオーバーした上でプライマリをスペックアップ、その後プライマリにフェイルバックという形で切り替えを実施しました。
(フェイルオーバー・フェイルバックはTGW側のENIの向き先変更にて実施)
が、フェイルバック後にクライアントとプライマリの間で通信の再開が発生せずダウンタイムが発生(セカンダリ側に飛んでるわけでもない)という事象がありそれに関してトラブルシュートをした際のメモとなります
原因について
結論から言えばネットワークアダプタが切り替わるインスタンスタイプの変更にあたってしまったというのが原因となります。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/network-interface-attachments.html
ドライバーのネットワークアダプターを別のネットワークアダプターに切り替えると、オペレーティングシステムが新しいアダプターを作成したときに、ネットワークアダプターの設定がリセットされます。(中略)ネットワークアダプターを別のネットワークアダプターに切り替える例を次に示します。
AWS PV (T2 インスタンス) からインテル 82599 VF (M4 インスタンス)
インテル 82599 VF (ほとんどの M4 インスタンス) から ENA (M5 インスタンス)
ENA (M5インスタンス) から高帯域幅の ENA (M5nインスタンス)
どのインスタンスタイプがどのネットワークドライバが利用されているかは明示されてはないのですが、「インテル 82599 VF」が最大10Gbpsではあるので少なくともこれを跨ぐ場合は気をつけた方が良さそうです。可能であれば事前に作業用インスタンスを立ててそちらで実施するのが無難かと思います。
一例としてt3.microからm5.largeに変更した場合はネットワーク性能自体は変わるもののネットワークドライバの設定は維持されました。一方m5.largeからm6i.largeに切り替えた場合はネットワークドライバの設定は維持されずリセットされました。


実際に変更して確認してみる
実際のOS上でネットワークアダプタを設定しインスタンスタイプを切り替えてみます。
まずはt3.smallの状態で立ち上げ以下のように手動で設定を割り当てます。せっかくなので今回問題になった形と似たような形になるようにセカンダリIPも割り当てておきます。
...が、このVPCのネームサーバのIPは172.16.0.2であり本来これを指定すべきなのですが、サブネットのIPをベースに誤って172.16.3.2にしておりこの設定を確定したことによってSystems Managerとのエンドポイントの疎通が切れて接続できなくなります。


接続ができなくなりめちゃくちゃ焦るところですが、先ほどの記載を信じるのであればネットワークアダプタの変更がかかれば設定がリセットされるので復活するはずです。
この状態でm6i.largeに変更すると無事接続が復旧しました。ネットワークアダプタの設定を見ると「イーサネット"2"」で検出され初期で割り当てられているものと別物であることが確認できます。

あくまでネットワークアダプタが切り替わっているだけですので、元の設定もレジストリを見れば確認できます。¥HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥Tcpip¥Parameters¥Interfaces¥
こちらが今回切り替え後のイーサネット2の設定値です。

こちらが先ほど誤った設定をしたイーサネット1の設定値です。NameServerの値とDhcpNameServerで値がずれてしまってることもここで確認できます。

なおネットワークアダプタについてはこのまま元のt3.smallに戻すとこのイーサネット1が利用されます。そのためイーサネット2が利用されている状態でイーサネット1側の設定をレジストリ上で書き換えてインスタンスタイプを戻すこともできるので覚えておいても良いかもしれません。
なおインスタンスタイプを変更の上で変更先のネットワークアダプタ側で同じIPを割り当てようとすると以下のようなダイアログが出ます。

メッセージに記載の通りここで「はい」を選ぶと変更前のネットワークアダプタの設定が消えてレジストリ上からも確認できなくなるため元の設定情報が手元に残っていない...というような状態の時は注意しましょう。
終わりに
インスタンスタイプの変更によるネットワークアダプタのリセットは全ての変更において発生するのではなく、特定のタイプのみに発生します。なかなか知らないと気づきにくく見落としがちなパターンかと思いますので、ぜひこの記事を見た方は頭の片隅にでも残してもらえたらと思います。
(今回手元で再検証する際もt3.microからm5.largeで発生しない(設定が間違ったまま繋がらない)ので一瞬焦りました)
逆に今回記載したように設定がリセットされることを利用し、誤った設定を入れて繋がらなくなったインスタンスを復旧することもできますのでうまく活用していきましょう。







