Cloud SQLインスタンスをあるリージョンから別のリージョンに移動させようとして20時間ほど悩んでいたのですが、答えがわかってみたら何てことない手順だったので、同じことで悩む人が2度と出ないようにとの思いで、解決法を紹介しておきます。
結論を言ってしまうと、「復元」機能を使います。
リージョンを超えてのクローン作成はできない
まず前提情報ですがCloud SQLは、同一リージョン内であればインスタンスをクローンして、別のインスタンスを作成することができます。
しかしクローン元のリージョンに対して別のリージョンにはクローンを作成することはできません。
復元機能を活用する
上述のように、リージョンを跨いでのクローン作成はできないのですが、次の手順を踏むことで意図した結果を得ることができます。
移行先にCloud SQLインスタンスを作成する
まず、移行先のリージョンにCloud SQLインスタンスを作成します。ここにデータを移行するのが目的です。
少しだけ話がそれますが、このとき、ついでにインスタンスの設定を見直しておくのはアリです。ストレージの構成をHDDからSSDに変更したりといったことは、このタイミングでしかできないので。
移行元インスタンスのバックアップから復元
移行先にインスタンスを作成したら、移行元インスタンスのバックアップ一覧を表示して、「復元」ボタンを押します。
すると、復元先のインスタンスを選択することがでいます。
リージョンが異なるインスタンスも復元対象として復元することができます。実質的には復元ではなく移行ですね。
復元時間はけっこうかかる
大阪リージョンから東京リージョンへ、ディスクサイズ10GBのインスタンスデータを復元するのに要した時間は、およそ10分ほどでした。
稼働しているシステムに対しての作業となると、ある程度のダウンタイムは見込んでおいたほうがよさそうです。
ちなみに、ダウンタイムなしで移行したい場合は、レプリカの機能を使うことで可能のようです。
あとがき
リージョン間でデータを移行するためにはmysqldumpコマンド(データベースエンジンにMySQLを選択しているので)を使ったバックアップとリストアが必要だと思ってこの辺りのことを調べていました。
20時間ほど調べた頃に、ふと「復元って別のインスタンスをターゲットにできるのでは?」と思って試してみたらすんなりできてしまい、どっと疲労感が出たのでした…😇