リードレプリカを使ってRDS(MySQL)をアップグレードする手順を自動化した

RDS(MySQL)を10台以上アップグレードする必要が出てきたのでこちらの手順をスクリプト化しました。

以下の公式手順を自動化したものになります。

MySQL DB エンジンのアップグレード - Amazon Relational Database Service

こちらの記事も参考にさせていただきました。

AWS RDS for MySQL5.5 => 5.6 アップグレード手順 (CLI) (2017年検証) - Qiita

処理の流れ

断が少ないといっても数分はアクセスでき無い状態になってしまいます。リードレプリカ作成作業を事前に行っておいて、準備ができたら後続処理を流すようにするのが現実的だと思われます。

最初のリードレプリカ作成はデータ容量によりますが、数十分から数時間はかかります。

使い方

引数はRDSのIDとアップグレード後のバージョンの二つです。

./upgrade_rds.sh your-rds-name 5.6.37

Readreplicaの作成開始前と、Readreplicaの昇格前(ここからダウンタイムに繋がります)に以下のようなプロンプトを表示するようにしています。

-------------------
master          : test-rds
read replica    : test-rds-slave
current version : 5.6.27
target  version : 5.6.37
az              : ap-northeast-1c
-------------------
start to create read replica (y/N):> 

作業後には旧バージョンのDBが以下のようにバージョンをsuffixに加えた形で残っていますので、確認作業等終わって必要なくなったら削除します。

your-rds-name-5-6-27

タグ情報はコピーされないので、後でつけます。API使えば一気にタグを付与することも可能です。

while read rdsid taginfo
do
  arn=$(aws rds describe-db-instances --db-instance-identifier ${rdsid} --query 'DBInstances[].DBInstanceArn' --out text)
  aws rds add-tags-to-resource --resource-name ${arn} --tags ${taginfo}
done <<EOF
your-rds-1 Key=Name,Value=your-rds-1 Key=Project,Value=AAA 
your-rds-2 Key=Name,Value=your-rds-2 Key=Project,Value=BBB 
your-rds-3 Key=Name,Value=your-rds-3 Key=Project,Value=CCC
EOF

スクリプト

gist.github.com