1
1

AWS RDSの(クラスタ)パラメータグループの差分移行

Posted at

最初に謝辞

この記事の内容はサーバーワークスさんの記事と同等です。
アレンジした部分はありますが、やってることの本質はまるで変わってないです。
動作原理とかの細かい説明はそちらをご覧ください。

どなたかのお役に立てれば幸いです。

お役に立ちまくりましたありがとうございます。

デフォルトDBパラメータグループ

元記事では仮のDBグループを作ってから表示させていましたが、DBエンジン名の前に default. を付ければ使用したことがなくても表示させることができます。

DBエンジン名の一覧を出してー

aws rds describe-db-engine-versions \
--query "DBEngineVersions[].DBParameterGroupFamily" \
--output text | uniq

DBエンジン名の前に default. を付けて中身の表示

aws rds describe-db-parameters \
--db-parameter-group-name default.aurora-mysql5.7 \
--query "Parameters[].[ParameterName,ParameterValue]" \
--output text

デフォルトDBクラスタパラメータグループ

クラスタを作成できるDBエンジンであれば同等の処理で表示させることができます。
describe-db-parametersdescribe-db-cluster-parameters に、--db-parameter-group-name--db-cluster-parameter-group-name に変えるだけですね。

aws rds describe-db-cluster-parameters \
--db-cluster-parameter-group-name default.aurora-mysql5.7 \
--query "Parameters[].[ParameterName,ParameterValue]" \
--output text

差分の確認

元記事では一旦ファイルを作成して sdiff をしていましたが、bash ならこんな感じ

sdiff -s <(これ) <(それ)

でコマンドを渡せますので、そのままAWS CLIのコマンドを引き渡せます。

sdiff -s <(aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql5.7 --query "Parameters[].[ParameterName,ParameterValue]" --output text) <(aws rds describe-db-parameters --db-parameter-group-name my-custom-db-parameter --query "Parameters[].[ParameterName,ParameterValue]" --output text)
sdiff -s <(aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name default.aurora-mysql5.7 --query "Parameters[].[ParameterName,ParameterValue]" --output text) <(aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name my-custom-db-cluster-parameter --query "Parameters[].[ParameterName,ParameterValue]" --output text)

差分の反映

上記の差分確認を利用できます。

sdiff -s <(aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql5.7 --query "Parameters[].[ParameterName,ParameterValue]" --output text) <(aws rds describe-db-parameters --db-parameter-group-name my-custom-db-parameter --query "Parameters[].[ParameterName,ParameterValue]" --output text) | while read line
do
   pname=$(echo $line | awk '{print $1}')
   pvalue=$(echo $line | awk '{print $5}')
   aws rds modify-db-parameter-group \
   --db-parameter-group-name my-custom-new-db-parameter \
   --parameters ParameterName=$pname,ParameterValue=$pvalue,ApplyMethod=immediate
done
sdiff -s <(aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name default.aurora-mysql5.7 --query "Parameters[].[ParameterName,ParameterValue]" --output text) <(aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name my-custom-db-cluster-parameter --query "Parameters[].[ParameterName,ParameterValue]" --output text) | while read line
do
   pname=$(echo $line | awk '{print $1}')
   pvalue=$(echo $line | awk '{print $5}')
   aws rds modify-db-cluster-parameter-group \
   --db-cluster-parameter-group-name my-custom-new-db-cluster-parameter \
   --parameters ParameterName=$pname,ParameterValue=$pvalue,ApplyMethod=immediate
done

設定確認

入れ子が深いし長いしでアレなので元のままの方が良い気もしますが、テンポラリファイルを作るのが嫌いな人、他にもいますでしょ?
sdiff の時と同様に

diff <(これ) <(それ)

できるので、そこに新旧の sdiff を突っ込む感じでイケます。

diff <(sdiff -s <(aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql5.7 --query "Parameters[].[ParameterName,ParameterValue]" --output text) <(aws rds describe-db-parameters --db-parameter-group-name my-custom-db-parameter --query "Parameters[].[ParameterName,ParameterValue]" --output text)) <(sdiff -s <(aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql8.0 --query "Parameters[].[ParameterName,ParameterValue]" --output text) <(aws rds describe-db-parameters --db-parameter-group-name my-custom-new-db-parameter --query "Parameters[].[ParameterName,ParameterValue]" --output text))
diff <(sdiff -s <(aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name default.aurora-mysql5.7 --query "Parameters[].[ParameterName,ParameterValue]" --output text) <(aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name my-custom-db-cluster-parameter --query "Parameters[].[ParameterName,ParameterValue]" --output text)) <(sdiff -s <(aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name default.aurora-mysql8.0 --query "Parameters[].[ParameterName,ParameterValue]" --output text) <(aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name my-custom-new-db-cluster-parameter --query "Parameters[].[ParameterName,ParameterValue]" --output text))
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1