1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

【RDS】パラメーターグループの比較方法

Posted at

目的

以下のような状況でパラメーターグループ(以下: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.postgres11check_function_bodies には値が設定されていないが、

new-pgcheck_function_bodiesには0という値が設定されているため差分が出ている。

"check_function_bodies", |	"check_function_bodies","0"
1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?