DB Parameter Groupでユーザによる設定を変更したものを、別のDB Parameter Groupにコピーしたかったのだが、AWS CLIのドキュメントを読んでいて、ワンライナーで簡単にコピー出来そうだと思って試行錯誤したら出来た。
% aws rds describe-db-parameters --db-parameter-group-name param1 | jq '[.Parameters[]|select(.Source == "user") + {"ApplyMethod": "immediate"}]' | tr -d 'n' | xargs -I{} aws rds modify-db-parameter-group --db-parameter-group-name param2 --parameters '{}'今回は行ごとに解説してみる。
- 1行目
- コピー元となるDB Parameter Group (param1) の設定を取得している。
- 2行目
- その結果からjqを使って、ユーザによって変更されたもののみをフィルタして取得し、その結果それぞれについて、”ApplyMethod”: “immediate”という項目を追加している。
- 3行目
- JSONに含まれる改行を全て削除している。
- 4行目
- コピー先となるDB Parameter Group (param2) にmodify-db-parameter-groupを実行する。xargsを使って–parametersオプションに、jqで加工したJSONを渡している。
describe-db-parametresで、ユーザによって変更されたパラメータの一覧をJSONで取得し、その内容をそのままmodify-db-parameter-groupに渡しているということになる。そのまま渡してもだめで、ApplyMethodの追加が必要となるので、それをjqで行なっている。
元記事は、こちら