目的
以下のような状況でパラメーターグループ(以下:PG)を変更した際の何かしらの影響をなくすために、比較をする必要が出てくるのでAWS CLIを利用して比較を実施する。
- メジャーバージョンアップを実施する兼ね合いでパラメータの増減を確認したい
例:PostgreSQL13から14に上げる - 意図しないPGを利用していて変更したいとき
例:defaultのPGを利用しているなど
なぜdefaultのPGから変更するの?
defaultPGを複数のインスタンスで適用しているとパラメーターを変更した際に適用しているインスタンス全てに影響が出てしまうためそれぞれにPGを作成・適用させることがおすすめです。
対応方法
スクリプトを作成しました。
-
pg_diff.sh
#!/bin/bash # パラメーターグループ名をコマンドライン引数から取得 base_param_group=$1 target_param_group=$2 # パラメーターグループの情報をCSVファイルに出力 aws rds describe-db-parameters --db-parameter-group-name $base_param_group | jq -r '.Parameters[] | [.ParameterName, .ParameterValue] | @csv' | sort > base.csv aws rds describe-db-parameters --db-parameter-group-name $target_param_group | jq -r '.Parameters[] | [.ParameterName, .ParameterValue] | @csv' | sort > target.csv # 差分を比較 diff_output=$(diff -y base.csv target.csv --suppress-common-lines) # 差分があればTXTファイルに出力、なければ標準出力に情報を伝える if [ -z "$diff_output" ]; then echo "No differences found between the parameter groups." else echo "$diff_output" > diff.txt echo "Differences found. See diff.txt for details." fi
スクリプトの利用方法
以下のようにコマンドを叩きます。
sh pg_diff.sh "<BASE_PG>" "<TARGETPG>"
## 例
sh pg_diff.sh "default.postgres11" "new-pg"
スクリプトを利用すると以下のファイルが出力されます。
- base.csv
現在利用しているPGのパラメーター一覧 - target.csv
変更後のPGのパラメーター一覧 - diff.txt
baseとtargetの比較した際に差分があるときのみ出力される
実例
defaultPGを利用しているため、new-pg
に変更したい。
$ sh pg_diff.sh "default.postgres11" "new-pg"
Differences found. See diff.txt for details.
$ cat diff.txt
"check_function_bodies", | "check_function_bodies","0"
"client_min_messages", | "client_min_messages","warning"
"default_transaction_read_only", | "default_transaction_read_only","0"
"escape_string_warning", | "escape_string_warning","0"
"lc_messages", | "lc_messages","C"
"lc_monetary", | "lc_monetary","C"
"lc_numeric", | "lc_numeric","C"
"lc_time", | "lc_time","C"
"standard_conforming_strings", | "standard_conforming_strings","0"
"statement_timeout", | "statement_timeout","0"
diff.txtには差分のみ表示されるようにしてます。
パイプの左側がbase、右側がtargetのパラメータです。
以下についてはdefault.postgres11
のcheck_function_bodies
には値が設定されていないが、
new-pg
のcheck_function_bodies
には0
という値が設定されているため差分が出ている。
"check_function_bodies", | "check_function_bodies","0"