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