この記事は 【ReviCo】 Advent Calendar 2025 の 19日目 の記事です。
昨日はしげさんの「ECSネイティブのB/Gデプロイで古のバッチを(一部)駆逐した話」でした!
はじめに
こんにちは!ReviCoでエンジニアをしているむーたです。
今回は 「OpenSearchをアップデートしようとしてハマった話」 ということでOpenSearchのアップデートを実施しようとしたけど一筋縄ではいかなかった話を記事にしたいと思います!
環境
- アップデート前 OpenSearch バージョン:OpenSearch 2.19
- アップデート後 OpenSearch バージョン:OpenSearch 3.1
発生した問題
ReviCoでは、AWS環境をテスト環境/ステージング環境/本番環境で分けて運用しているので、テスト環境から順にアップデートを実施していきました。
テスト環境/ステージング環境では問題なくアップデートできたため、満を持して本番環境のアップデート・・・
失敗してしまいました。
あろうことか、アップデートに失敗するどころかロールバックすら失敗してしまいました。これでは、このスタックは最早進むことも戻ることもできません。
このままではまずいためまずは調査から始めました。
原因調査
ログを見る
なにはともあれまずはログを見ようということで、ログを見ました。
The following indices are not compatible with the target Elasticsearch version OS_3.1 - hoge.
Please refer to our documentation https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-version-migration.html for tips to address this issue
これが答えではあるのですが、hogeというインデックスがOpenSearch3.1と互換性がないよと言われています。
サポートを頼る
原因がわかったので、どのような対処をすればよいかサポートに聞いてみました。
以下サポートの回答から抜粋です。
上記エラーについて調査いたしましたところ、OpenSearch_1.3 以前のエンジンバージョンで作成されたインデックスを持っている場合、同様のエラーにより OpenSearch_3.1 へのアップグレードが失敗することを確認いたしました。
また、当該ドメインのアップグレード履歴を確認いたしましたところ、元々は OpenSearch_1.0 として作成し、その後アップグレードを重ね現在 OpenSearch_2.19 を使用されている認識でございます。上記を踏まえますと、エラーメッセージに登場する "hoge" というインデックスが OpenSearch_1.3 以前に作成されたものである可能性が高いかと存じております。もし OpenSearch_1.3 以前に作成されたものである場合、reindex などによりインデックスを再作成する必要がございます。
結論
OpenSearchのアップデートが失敗した原因は、古いバージョンで作成されたインデックスが本番環境に残っていたことです。
インデックスが作成されたエンジンバージョンによって、アップデート可否が決まるケースがあるというのは盲点でした。
ところで
テスト環境/ステージング環境ではアップデートが成功し、本番環境でのみ失敗したわけですがこれはいったいどうしてなのでしょうか。
なんと2023年末にテスト環境/ステージング環境のOpenSearchが壊れていたので一度作り直していました(!)
※当時の技術ブログがありました。
このときにインデックスも作り直されているため新しいものになっていたんですね。
おわりに
今回の件では、テスト環境/ステージング環境で問題なく通ったアップデートが、本番環境でのみ失敗するという怖い体験をしました。
しかし結果として、インデックスの世代差という見えづらいリスクに気づくことができ、今後の運用を見直す良いきっかけになりました。
現在は、本番環境でreindex実施の準備を進めています。
同じようにOpenSearchのアップデートを控えている方の参考になれば幸いです。
来週の月曜日(22日)はおとさんの「New RelicのWorkflowでEnrich Dataを使う」です!
お楽しみに!

