cloudpack磯辺です。

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で行なっている。

元記事は、こちら