ことのはじまり
Amazon RDS にて利用しているMySQL、MariaDB、PostgreSQLなどのDBエンジンの
一部バージョンのサポート終了期限が 2025年3月末となっております。
対象のDBエンジンバージョンとサポート期限終了の情報は、
下記AWSドキュメントをご参照ください。
(※日本語版と英語版で差異がある場合は、英語版が正しいものとなります)
このDBエンジンのアップデート方法の一つに「ブルー/グリーンデプロイ」が利用できます。
こちらを利用することで「約1分のダウンタイムで、新バージョンのDBエンジンが利用可能になる」
という機能となります。
とはいえ、その内容の複雑さが故に、ご提案後にお客様から多数ご質問をいただくことがございました。そこで本稿では、「ブルー/グリーンデプロイ」の技術的な内容のご紹介と、実際のアップデート方法の流れ、注意点をご紹介します。
実際の画面操作等は、下記のブログ記事をご参照ください。
Amazon RDS Blue/Green Deployments を使ってみた | クラウド・AWSのIT技術者向けブログ SKYARCH BROADCASTING
目次
RDSにおける 「ブルー/グリーンデプロイ」の構成
一般的な「ブルー/グリーンデプロイ」とRDSにおける「ブルー/グリーンデプロイ」は、
多少仕組みが異なります。まずはこちらからご紹介していきます。
公式ドキュメント :Amazon RDS ブルー/グリーンデプロイの概要 - Amazon Relational Database Service
上記ドキュメントにある ブルー/グリーンデプロイのワークフロー の部分が、
RDSにおける「ブルー/グリーンデプロイ」の正体となります。
Amazon RDSのコントロールパネルから作成できる「ブルー/グリーンデプロイ」を実行すると、
現在稼働しているインスタンスと同じインスタンスタイプ・構成をした
リードレプリカ 環境が作成されます。
下記画像における 「青色の背景(blue = 本番稼働中。以下blue環境)」 に追加して、
「緑色の背景(green = 新規環境。以下green環境)」が作成され、
blue環境 → green環境には、レプリケーションによってデータ同期がされています。

そのため、green環境を作成した後、blue環境にてデータの更新があった際には、
自動的にgreen環境にデータが同期(レプリケーション)されることになります。
実際に確認してみた
今回は簡単に、データの同期がされているかを EC2(Linux)とRDS for MySQL を使って確認してみます。
同一のVPC内に EC2とRDS for MySQLを用意し、EC2には mysql のクライアントを導入しております。
RDS for MySQL は、blue環境を 8.0.34 、green環境を 8.0.41 と指定して作成しています。
まずは blue環境へ接続し、状態を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
MySQL [(none)]> status; -------------- mysql Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 45 Current database: Current user: admin@10.0.1.38 SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MySQL Server version: 8.0.32 Source distribution Protocol version: 10 Connection: bg-test.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com via TCP/IP Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb3 Conn. characterset: utf8mb3 TCP port: 3306 Uptime: 1 hour 21 min 16 sec Threads: 4 Questions: 15085 Slow queries: 2 Opens: 387 Flush tables: 3 Open tables: 267 Queries per second avg: 3.093 -------------- |
現在の本番機となっているので、特段問題はないですね。
続いて、green環境へ接続します。
セキュリティグループなども特段設定は不要で、接続が可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
MySQL [(none)]> status; -------------- mysql Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 23 Current database: Current user: admin@10.0.1.38 SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MySQL Server version: 8.0.41 Source distribution Protocol version: 10 Connection: bg-test-green-jq9eux.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com via TCP/IP Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb3 Conn. characterset: utf8mb3 TCP port: 3306 Uptime: 44 min 44 sec Threads: 9 Questions: 3863 Slow queries: 0 Opens: 175 Flush tables: 3 Open tables: 94 Queries per second avg: 1.439 -------------- |
ここで、リードレプリカとなっていることを確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
MySQL [(none)]> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.23.2.40 Master_User: rdsrepladmin Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin-changelog.000021 Read_Master_Log_Pos: 157 Relay_Log_File: relaylog.000047 Relay_Log_Pos: 279 Relay_Master_Log_File: mysql-bin-changelog.000021 Slave_IO_Running: Yes Slave_SQL_Running: Yes (中略) 1 row in set, 1 warning (0.00 sec) ERROR: No query specified |
show slave status;
のコマンドが表示されますね。
これで、リードレプリカ状態であるのが確認できると思います。
ということは、green環境への書き込みもできないということなので、確認しましょう。
1 2 |
MySQL [(none)]> create database test; ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement |
上書きが許可されていないため、エラーになりました。
逆に、blue環境に接続し、DBを作成してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
root@ip-10-0-1-38 ssm-user]# mysql -u admin -p -h bg-test.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 49 Server version: 8.0.32 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.03 sec) MySQL [(none)]> create database test; Query OK, 1 row affected (0.02 sec) MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows in set (0.00 sec) |
その後、green環境に接続し、内容を見てみると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@ip-10-0-1-38 ssm-user]# mysql -u admin -p -h bg-test-green-jq9eux.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 25 Server version: 8.0.41 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows in set (0.01 sec) |
というように、しっかりとデータがレプリケーションされ同期しています。
環境作成時の注意点
作成にはいくつか注意点があります。
基本は下記のAWSドキュメントをご参照ください。
Amazon RDS のブルー/グリーンデプロイの制限と考慮事項 - Amazon Relational Database Service
特に気をつけているポイントを下記に記載いたします。
- ブルー/グリーンデプロイの環境構築ができない場合がある
- 特にメジャーバージョンアップであり。エラーログを確認してエラーを解消してください。
- RDS for MySQLのインスタンスにて、オプショングループがdefaultではなくカスタマイズされたものを利用している場合
- メジャーバージョンアップが実施できません
- RDS for PostgreSQL のレプリケーション方式に指定あり
- メジャーバージョンアップの際には、論理レプリケーション
- 利用可能なバージョンにそれぞれ指定あり。参考情報はこちら
- マイナーバージョンアップの際には、物理レプリケーション
- サポートされている全バージョンで利用可能
- メジャーバージョンアップの際には、論理レプリケーション
本稿の冒頭で記載しているブログ記事当時では、利用可能なバージョンに指定がありましたが、
本稿記載現在では、基本的にはサポートされているすべてのバージョンで
ブルー/グリーンデプロイが利用可能となっております。
過去に「バージョンの制約で利用できなかった」という場合でも、
現在は利用可能になっている場合がありますので、ご確認してみてください!
また、「ブルー/グリーンデプロイ」で作成される環境はリードレプリカ環境のため、
green環境に書き込みは基本不可 であることに注意が必要です。
※設定で書き込み可能に変更は可能だが、切り替え前提の場合は非推奨です。
動作確認用の環境は別に用意する必要があります。
RDSにおける 「ブルー/グリーンデプロイ」の切り替えを利用したアップデートの流れ
DBによるレプリケーションを組んでいる状態でgreen環境のDBエンジンをアップデートすると、
blue環境 = 旧バージョン / green環境 = 新バージョン
という構成で、「ブルー/グリーンデプロイ」環境が整います。
バージョンアップ用の環境を作成後、実際に「ブルー/グリーンデプロイ」環境が具体的にどのような処理をしているのかを簡単にご紹介します。
(※ AWSドキュメントの「ワークフロー」の5に当たる部分になります。)
Amazon RDS ブルー/グリーンデプロイの概要 - Amazon Relational Database Service
AWSマネジメントコンソールなどで、「ブルー/グリーンデプロイの切り替え」を実行すると、
内部的にはざっくりと下記の動作が実行されます。
(参考 : Amazon RDS でのブルー/グリーンデプロイの切り替え - Amazon Relational Database Service)
- 環境全体への接続が停止
- green環境のレプリケーションが同期するまでスタンバイ
- green環境のリードレプリカを昇格(書き込み可能な状態にさせる)
- blue環境のインスタンス識別子が、末尾に
-old1
という文字列が付与されたものになります。 - green環境のインスタンス識別子が、本番環境利用と同じ識別子 (1のblue環境の変更前のインスタンス識別子) に変更されます

RDSにおける「インスタンス識別子」の変更を実施するということは、
接続するための「エンドポイント名」の変更と同義になります。
つまり、RDS側で「ブルー/グリーンデプロイの切り替え」を実施することで、
アプリケーション内の接続先情報を変更することなく、新バージョンのインスタンスが
利用可能になります。
実際に確認してみた
環境構築時に使用したのと同じ環境で、今度はブルー/グリーンデプロイの切り替えを実施してみることで、実際に接続先環境が変わることを確認しましょう。
まずは、現在のエンドポイント(blue環境) を名前引きしたときのIPアドレスを確認します。
1 2 |
[root@ip-10-0-1-38 ssm-user]# dig bg-test.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com +short 10.0.2.248 |
これは、サブネットグループで設定しているサブネットにて定義している
IPアドレスレンジが表示されています。
パブリックアクセスが有効ではない限り、基本はプライベートIPアドレスになっていますね。
続いて、green環境のエンドポイントを名前引きした際のIPアドレスを確認します。
1 2 |
[root@ip-10-0-1-38 ssm-user]# dig bg-test-green-jq9eux.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com +short 10.0.2.250 |
こちらもgreenと同様のIPレンジを持っていますね。
もちろん環境が違うので、IPアドレスが別のものになっています。
それでは切り替えのボタンを押しまして・・・
AWSマネジメントコンソール上では、切り替えが完了しました。
それでは色々と情報を確認してみましょう。

エンドポイントとIPアドレスの組み合わせ
接続元のEC2より、本番環境のエンドポイント名のIPアドレスを確認します
1 2 |
[root@ip-10-0-1-38 ssm-user]# dig bg-test.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com +short 10.0.2.250 |
先ほどのgreen環境のIPアドレスが表示されていますね。
続いては -old1
のエンドポイント名のIPアドレスを確認します。
1 2 |
[root@ip-10-0-1-38 ssm-user]# dig bg-test-old1.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com +short 10.0.2.248 |
こちらは先程のblue環境のIPアドレスが表示されますね。
つまり、切り替えを実行したことで 本番環境のエンドポイント名で接続した際に
green側の環境に接続できるようになっているということです。
では、本番環境のエンドポイント名にログインして、バージョンを確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
[root@ip-10-0-1-38 ssm-user]# mysql -u admin -p -h bg-test.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 28 Server version: 8.0.41 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> status; -------------- mysql Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 28 Current database: Current user: admin@10.0.1.38 SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MySQL Server version: 8.0.41 Source distribution Protocol version: 10 Connection: bg-test.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com via TCP/IP Server characterset: utf8mb4 Db characterset: utf8mb4 Client characterset: utf8mb3 Conn. characterset: utf8mb3 TCP port: 3306 Uptime: 52 min 50 sec Threads: 3 Questions: 4709 Slow queries: 0 Opens: 203 Flush tables: 3 Open tables: 120 Queries per second avg: 1.485 -------------- |
green環境側、つまりアップデートされたバージョンが表示されました。
DNSのレコード変更を使った仕組みで、エンドポイント名を変更させることなく、
接続先の機器情報が変更できるという仕組みですね!
リードレプリカの状態
切り替え後のgreen環境に接続して、リードレプリカの状態を見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@ip-10-0-1-38 ssm-user]# mysql -u admin -p -h bg-test.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 32 Server version: 8.0.41 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show slave status\G; Empty set, 1 warning (0.01 sec) ERROR: No query specified |
この結果から、green環境はリードレプリカではなく、
書き込み可能なスタンドアロン状態であることが確認できます。
実際に、DBに書き込みをしてみましょう
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
MySQL [(none)]> create database testAfterBG; Query OK, 1 row affected (0.02 sec) MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | | testAfterBG | +--------------------+ 6 rows in set (0.00 sec) |
先程は新バージョンのDBではできなかった書き込みが可能になっています。
このことからも、リードレプリカが解除され、昇格した状態であることが確認できますね。
旧環境とのデータ連携
では最後に、 -old1 という名前がついた旧環境にログインして、
先ほど書き込んだデータが連携されているかを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@ip-10-0-1-38 ssm-user]# mysql -u admin -p -h bg-test-old1.cb9igfuf8ogi.ap-northeast-1.rds.amazonaws.com Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 55 Server version: 8.0.32 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 5 rows in set (0.01 sec) |
切り替えが完了したあとは、ブルー/グリーンの関係性は解除され、
それぞれがスタンドアロンで動作します。
そのため、green環境で書き込んだ内容は、blue側に書き込まれることはありません。
この時点で、blue環境は、バージョンアップしたgreen環境にて動作不良があった際の切り戻し用のインスタンスの役割を担います。
(※切り戻しは、手動でインスタンス識別子を変更することで対応可能。)
ただし、greenで書き込んだ内容は反映されないため、仮に切り戻した後には、
greenで書き込まれた内容は別途blue側に書き込む必要がありますので注意が必要です。
そして、特に問題がなくなった際には、blue環境はお役御免ということで、
インスタンスの削除を実施しましょう。
(残しておくと、インスタンスの料金が2台分課金され続けることになります)
切替時の注意点
ブルー/グリーンデプロイの切り替え時における注意点をいくつかご紹介します。
詳細は、こちら↓のAWSドキュメントに記載がありますのでご参照ください。
Amazon RDS でのブルー/グリーンデプロイの切り替え - Amazon Relational Database Service
-
切り替えのタイムアウト
- 基本は5分以内に切り替わるまで待ちます。もし切り替わらない場合はデプロイは実行されず、ロールバックされます。
-
レプリケーションのラグ
- レプリケーションのラグが大きい場合は、切り替えまでに時間がかかる、もしくは切り替えに失敗する可能性があります。負荷のかからない時間帯に切り替えを実施するのがおすすめです。
-
アプリケーションの動作確認
- 切り替え後のDBエンジンバージョンで問題なく動作するかの確認を実施してください。
まとめ
今回は、「ブルー/グリーンデプロイ」を利用したバージョンアップの
技術的な仕様を中心にお届けしました。
ダウンタイムも短く非常に便利な半面、技術的には複雑な内容が含まれていたかと思います。
この記事が、そのような状況の皆様の理解の手助けになれば幸いです。
また、弊社でRDSの保守運用契約があるお客様におかれましては、
お気軽にサポート担当者へお気軽にご相談ください。
投稿者プロフィール
-
16年5月からアルバイトとして入社。
様々な新しい発見や個人的に興味を持ったことを
わかりやすくお伝えできればと思います。
最新の投稿
AWS2025年3月12日Amazon RDS のDBエンジンアップデートとブルー/グリーンデプロイ
AWS2025年1月10日BuilderCards 遊んでみた
会社紹介2025年1月3日しまなみ海道を原付で走ってみた
Systems Manager2025年1月2日AWS Systems Manager の Patch Manager を使って Windows Update を自動化した話