広報サーバーワークス0この記事は1年以上前に書かれたものです。内容が古い可能性がありますのでご注意ください。ご存知の方も多いとは思いますが、RDSにはスナップショットを異なるリージョンにコピーする機能があります。スナップショットを別リージョンにコピーしておいて、プライマリリージョンが利用不可能になるような障害が起こった場合に、コピー先リージョンでスナップショットからRDSをリストアする、といったディザスタリカバリ用途での活用が期待されています。コピー先リージョンでRDSスナップショットをリストアするためには事前にいくつか準備が必要になります。最低限必要なところだと、セキュリティグループの作成DBサブネット・サブネットグループの作成DBパラメータグループの作成DBオプショングループの作成といったところでしょうか。これらは作成したリージョンに固有のものですので、リストア前に形だけでも作っておく必要があります。DBパラメータグループはリージョン間コピーできません、でもコピーしたいいざコピー先リージョンでスナップショットからリストアする、というときにパラメータの差異があるのは具合が悪いです。アプリケーションが想定外の挙動をしかねないですし、パフォーマンスの問題にも直結します。基本的に、DBパラメータグループはコピー元リージョンとコピー先リージョンとで同じになるよう設定しておく必要があります。いえ設定項目数も多いので、手で設定するのはしんどいです。いうわけで、DBパラメータグループもリージョン間コピーしたいよね、というのが今回のざっくりした目的です。本日時点ではまだ、標準機能として「DBパラメータグループのコピー」という機能は実装されていません。これをどうにかして実現する方法を考えます。Consoleの画面と睨めっこする、トラディショナルなアプローチです。「手で設定するのはしんどいです」って言っておいてこれかよ、っていう。Console上で編集できるパラメータは288個。1440、実に24分もかかることになります。職人の神経もそれなりにすり減りますし、パラメータグループを変更するたびにこの不毛極まりない作業が発生するのかと思うと気が遠なってくるのでこのへんで考えるのをやめておきます。CLIを使う結局これが書きたかっただけなんですけどね。CLIでサラッとやります。出力したデータを元に、コピー先DBパラメータグループの設定変更と、これだけです。CLIのオプションをフル活用して実現してみます。いうMySQL5.6用のDBパラメータグループを作成して、ざっくりと以下のような設定変更を行いました。30試しに1つパラメータ取ってみます。&quot;Parameters[?ParameterName==`character_set_server`]&quot;レスポンスは以下の通り。&quot;dynamic&quot;}]このJSON構造をふわっと覚えておきます。サブコマンドで行います。--generate-cli-skeleton以下のスケルトンが標準出力に書き出されます。配列の中のオブジェクトはほぼ同じですね。出力するJSONをほとんど加工せずに食わせられそうです。ApplyMethod。(pending-reboot)」を指定する項目で、パラメータグループの設定変更時には指定必須の項目です。コピー元DBパラメータグループの情報を出力というわけで、まずは元のDBパラメータグループを適当なファイルに出力します。いうファイルに書き出しています。mysqlparams.json先ほど確認しましたが、改めてきちんと中身を見て全体の構造を確認します。存在しないので、ここはひとまずjqでゴニョゴニョして書き足してやります。mysqlparams.json一応確認しときますか。&quot;immediate&quot;},(以下略)"ApplyMethod"が追記されていればOK。コピー先の器となるDBパラメータグループを作る初回のみ、コピー先のDBパラメータグループを作成します。コピー先となるDBパラメータグループが存在する場合には不要。いうDBパラメータグループを作成しました。DBパラメータグループ間でパラメータコピーするだけなので、別にリージョン変える必要はないんですが、どうせなら「東京からヴァージニアにコピーしたったで!」の方が盛り上がるし、そもそも冒頭でリージョン間コピーやりたい、って書いちゃったから引き下がれない感じです。