Hirosaji Tech Blog 🍙

Web開発の記事が多め。絵師支援の記事も少し。

Green環境構築が終わらないRDS Blue/Green Deploymentsの原因と対応策

RDS の Blue/Green Deployments(以下、B/G Deploy)が re:Invent 2022 で発表されて約3ヶ月が経ちました。
ちょうど機会があったため業務で利用してみたところ、B/G Deploy には思わぬ落とし穴がいくつかありました。

この記事では過去に報告されている事例も含めて、私が今回ハマった落とし穴とその解決法をまとめました。

何が起きたか:Green環境の構築が終わらない

🍙「コンソール操作で B/G Deploy を実行した!」
🍙「エラーも出ないし、少し待てば Green 環境が構築されるはず」
(5時間経過...)
🍙「ステータスを見ても、一向に進捗がない...」
🍙「Green 環境の構築が!いつまでも!終わらない!!」

数時間ずっとこの画面のまま

エラーも表示されないので問題の原因がかなり難しく、🍙は途方に暮れてしまいました。

原因①: エンジンバージョンが非推奨(deprecated)になった

B/G Deploy を実行した RDS cluster のエンジンバージョンが、AWS上で"非推奨"とされたときにこの問題は起こります。

非推奨だとclusterの設定変更でこんな警告が出る

非推奨のエンジンバージョンは基本、古いバージョンです。
非推奨のバージョンは、次のドキュメントにまとめられています。

しかしゼロデイ対応など何らかの緊急対策で、ドキュメントの更新無しに突然使っていたエンジンバージョンが"非推奨"とされてしまうことがあります。
そして非推奨のエンジンバージョンの cluster / instance は、いくつかの設定の変更(インスタンスクラスの変更など)がロックされてしまいます。
これが B/G Deploy が実行できない原因にもなるようです。これを回避するには、推奨バージョンへのアップグレードが必要です。

緊急の即時対応ということもあってか、例外処理やエラーメッセージも用意されていないので、この原因特定にはかなり苦労しました。
(私はこの落とし穴にハマって、原因特定に1日溶かしました...)

追記: 2023/03/08

AWSのSAに聞いたところ、2023年4月3日に Aurora MySQL 2.09 と 2.10 系バージョンが廃止されることになったとのことでした。
それに伴って、廃止されるバージョンで新しいクラスターが作成できなくなったとのこと。

確か B/G Deploy は内的に、同じエンジンバージョンの新規クラスターを作成 → マイグレーション → エンジンバージョンアップ... という手順を踏んでるので、この手順の"新規クラスター作成"がロックされたことが B/G Deploy が使えない原因のようですね。

なお、4月3日以降は定期メンテナンスで自動的に 2.11 へアップグレードされる予定みたいなので、急ぎの用事がなければそのままでも良さそうです。
詳しくは、管理者宛に [Action Required] Upgrade Aurora MySQL to Aurora MySql 2.11.1 or Higher というタイトルの案内メールが届いてるそうなので要チェック。

原因②: clusterのサブネットグループが3AZ未満

一般に本番環境で稼働させるRDSの基本構成には、サブネットグループに3つの異なるAZを含めます。
この基本構成は、公式のチュートリアルでも案内されています。

DB クラスターで選択する DB サブネットグループは、少なくとも 3つのアベイラビリティーゾーンを対象とする必要があります。

マルチ AZ DB クラスターの作成 - Amazon Relational Database Service

これは高い可用性を前提とするRDSにおいて、(実際には配置しなくても)RDSインスタンスが配置されうるサブネットを事前に用意しておく必要があるためです。

そして RDS B/G Deploy では、このサブネットグループの用意+アタッチが必須になっているようです。

原因③: Green環境でアップグレードしたエンジンバージョンにインスタンスクラスが対応してない

例えば、Aurora3 (MySQL 8.0) は t3.small に対応していません。(対応表はこちら

この問題に対応するにはインスタンスクラスを変更する必要がありますが、当然価格も変わるので、請求時に泣きを見ないよう事前に変更後の料金を確認しておくと良いと思います。(料金表はこちら

その他の落とし穴

AWS公式から、次の機能が含まれる cluster はサポートしていないとのアナウンスがされています。

Aurora 用 Amazon RDS ブルー/グリーンデプロイの概要 - Amazon Aurora

他にも、

  • binlog を出力するパラメーター(binlog_format)の有効化
  • binlog_format の適応(インスタンスの再起動が必要)
  • Blue側での事前の binlog 生成

が必要とのことで、これらについては先人の方々がまとめてくれています。

  1. Amazon RDSのBlue/Green Deploymentsを実験して気づいたハマりポイントまとめ
  2. Amazon RDS Blue/Green Deployments利用時に躓いたエラーやハマりポイントなどをまとめてみた - コネヒト開発者ブログ
  3. AuroraMySQLのバージョンアップをBlue/Greenデプロイを利用して実施してみた | GROUP DEV BLOG | TECHNO DIGITAL

RDS B/G Deploy はまだリリースしたばかりの先駆的な機能なので、これを読んだ方ももし何かを発見したら、情報発信してくれたら嬉しいです。