データ基盤
Snowflake レプリケーションとは?別リージョンに複製して切り替える
シリーズSnowflake 入門全13回
- 第1回Snowflakeとは?仕組み・料金・使い方をわかりやすく解説
- 第2回Snowflakeのウェアハウスとは?サイズとクレジット・自動停止
- 第3回Snowflakeの料金の仕組みとは?計算・保存・転送とコスト管理
- 第4回Snowflake マイクロパーティションとは?プルーニングとクラスタリング
- 第5回Snowflake VARIANTとは?JSONを扱う半構造化データの仕組み
- 第6回Snowflake Time Travel(タイムトラベル)とは?保持期間と復元
- 第7回Snowflake レプリケーションとは?別リージョンに複製して切り替える
- 第8回Snowflake ロールとは?権限をロールに与えて階層で渡す仕組み
- 第9回Snowflake Dynamic Tablesとは?SELECTだけで結果の表を最新に保つ
- 第10回Snowflake データ共有とは?コピーせずに取引先と同じ表を使う
- 第11回Snowflake Icebergテーブルとは?同じデータを他のエンジンでも読む
- 第12回Snowflake Cortexとは?データを外に出さずにSQLでAIを使う
- 第13回Snowflake Well-Architectedとは?5つの柱で自分の判断を見直す
- レプリケーション
- Snowflake
- フェールオーバー
- フェールオーバーグループ
- 複製グループ
- Client Redirect
- リージョン
- Business Critical
- REPLICATION_SCHEDULE
- セカンダリ
- プライマリ
- RPO
- 接続 URL
- フェールバック
- 障害復旧
- データ転送
- RPO Assurance
- Well-Architected
- データ基盤
目次
クラウドのデータベースは、一つのリージョン(クラウドの事業者がデータセンターを置く地域)の中で動く。リージョンの全体が止まると、そのリージョンのサービスは、障害が直るまで使えない。Snowflake でも、リージョンのクラウドサービスを止める大きな障害が起きると、直るまで Snowflake に入れない1。
Snowflake では、別のリージョンやクラウドにあるアカウントへ、データベースやユーザー、ロールなどを写しておける。この機能をレプリケーションという。日本語の公式ドキュメントでは「複製」と訳している2。
Snowflake のレプリケーションとは何で、リージョンが止まったときに利用者はどう切り替えるのか。
レプリケーションは、データベースやユーザー、ロールなどを、同じ組織の別のリージョンやクラウドのアカウントに、決めた間隔で写す機能である。リージョンが止まったら、利用者は写した側のフェールオーバーグループを昇格させ(プライマリに格上げし)、読み書きできる本番にする。
レプリケーションは非同期で写すので、決めた間隔で写す場合、写した側は最大で更新の間隔の 2 倍遅れる。データベースの複製はどのエディションでも使えるが、ユーザーやロールなどアカウントのオブジェクトの複製、フェールオーバー、接続先の切り替えは Business Critical Edition 以上が要る。複製は、人の誤りやデータの破損への備えの代わりにはならない。
フェールオーバーグループを写し、接続を切り替える
元のアカウントのデータを別のリージョンのアカウントに写しておき、接続を切り替えると、アプリは同じ接続 URL(Uniform Resource Locator)のまま、写した先のアカウントにつながる。Snowflake の公式ドキュメントの例をもとに示す34。
組織 myorg に、アカウント myaccount1 と、別のリージョンの myaccount2 があるとする。myaccount1 で、写すデータベースと写す先を決めたフェールオーバーグループ myfg を作り、myaccount2 にその写しを作る3。写した元の myfg をプライマリ、写しをセカンダリという。アプリは、アカウントの URL ではなく、接続オブジェクト myconnection の URL でつなぐ。この接続も、myaccount2 に写しておく4。
- myaccount1myaccount21. myfg のデータベースを 10 分ごとに写す
- アプリmyaccount12. myconnection の URL でつなぐ
- myaccount13. リージョンが止まる
- 管理者myaccount24. myfg と接続を昇格させ、プライマリにする
- アプリmyaccount25. 同じ URL でつなぐ
切り替えは、写す先のアカウントで、フェールオーバーグループと接続を一つずつ昇格させる45。
-- 切り替える先のアカウント(myaccount2)で実行する
ALTER FAILOVER GROUP myfg PRIMARY;
ALTER CONNECTION myconnection PRIMARY;
昇格させると、myaccount2 の接続がプライマリになり、接続の URL は変わらない4。アプリは設定を変えずに、別のリージョンのアカウントにつながる。
なぜ別のリージョンに写すのか
Snowflake は、一つのリージョンの中では、三つの独立したアベイラビリティゾーン(同じリージョンの中の、別々のデータセンターの集まり)にサービスを分けている。一つのゾーンが止まっても、追加の費用なしに自動で立て直す6。
リージョンごと止まる場合は、これでは守れない。Snowflake の Well-Architected Framework は、一つのリージョンを超える可用性が要るなら、別のリージョンや別のクラウドへの障害復旧の備えを足すよう勧めている6。Snowflake は、大事なアカウントのオブジェクトを、組織の中の別のリージョンのアカウントへ写すよう勧めている1。
2016 年に、Snowflake の創業者を含む著者らが論文を発表した。発表の場は、データベースの国際会議 SIGMOD(Special Interest Group on Management of Data)である。論文は、データは Amazon S3 が、メタデータは Snowflake が複数のアベイラビリティゾーンに写して、ゾーンの障害に耐える設計を説明した。ただし、仮想ウェアハウスはゾーンをまたがず、ゾーンが丸ごと止まると、利用者が別のゾーンで作り直す必要があるとしていた。論文の障害への備えの節が扱ったのは、一つのリージョンの中の障害である。論文は、データを失わない備えの一つに別のリージョンへのバックアップを挙げていたが、リージョンをまたぐ切り替えは書いていない7。
Snowflake のサービスレベル契約(SLA、Service Level Agreement)は、使えなかった時間をクラウドのリージョンごとに測り、決めた水準を下回ったときの補償を、サービスのクレジットだけとしている8。補償を受けても、止まったサービスが戻るわけではない。
何を写すのか:複製グループとフェールオーバーグループ
写す単位には、複製グループとフェールオーバーグループの二つがある。どちらも、元のアカウントのオブジェクトを一まとまりとして、同じ組織の一つ以上のアカウントへ写す2。
- 複製グループ(replication group): 写した側は読み取り専用である2。
- フェールオーバーグループ(failover group): 切り替えもできる複製グループである。写した側は読み取り専用だが、昇格させると読み書きできる本番になる2。
グループごとに更新の間隔を決められる1。一つのオブジェクトは、一つのフェールオーバーグループにしか入れられず、フェールオーバーグループと複製グループの両方には入れられない9。リージョンもクラウドもまたげ、Amazon Web Services、Google Cloud、Microsoft Azure のすべてのリージョンで使える。ただし、商用のリージョンと政府向けなどのリージョンの間で写すには、Snowflake のサポートに頼む2。
写せるのは、データベースと共有(シェア)のほかに、ユーザー、ロール、ウェアハウス、リソースモニター、連携(インテグレーション)、ネットワークポリシーなどのアカウントのオブジェクトである210。
- 写したオブジェクトは、すべて読み取り専用である。ユーザーを写していると、写した側では新しいユーザーを作れない。
- 写す対象に選んだ種類のオブジェクトを写した側で別に作っても、次の更新で消される。
- ウェアハウスは止まった状態で写る。動いているかどうかは写らない。
- 多要素認証(MFA、Multi-Factor Authentication)の登録は写らない。利用者は、写した側でもう一度登録する。
写らないオブジェクトもある。写らないオブジェクトは更新のときに飛ばされ、切り替えた後の本番には無い2。
- 外部テーブル、ハイブリッドテーブル、一時的な表(TEMPORARY)などは写らない2。
- Time Travel と Fail-safe の履歴は写らない。写した側は自分の履歴を別に持ち、更新は表の最新の版だけを写す9。
- 問い合わせやログインの履歴は写らない。アカウントごとに持つ9。
- 外部ステージのファイルは写らない。内部ステージのファイルは、ディレクトリテーブルを有効にしたときだけ写る9。
- マテリアライズドビューは定義だけが写り、中身は写した側で作り直す9。
- グループに対する REPLICATE と FAILOVER の権限は写らない。両方のアカウントで与える23。
Snowflake には、データベースだけを写す、機能の限られた仕組み(データベースの複製)もある。Snowflake は、グループを使うアカウントの複製を使うよう強く勧めている11。
エディション:切り替えは Business Critical 以上
使える機能は、Snowflake の契約の種類(エディション)で決まる21。
| 機能 | 要る |
|---|---|
| データベースと | すべての |
| ほかの | Business Critical Edition 以上 |
| フェールオーバーグループ | Business Critical Edition 以上 |
| Client Redirect | Business Critical Edition 以上 |
フェールオーバーグループは、Business Critical Edition 以上のアカウントでしか作れず、写す先も Business Critical Edition 以上のアカウントでなければならない2。Business Critical Edition に上げたばかりのアカウントでは、切り替えの機能が使えるまで最大 12 時間かかることがある10。
写す間隔と遅れ:写した側は最大で間隔の 2 倍遅れる
更新は、REPLICATION_SCHEDULE で決めた間隔で自動で走らせるのがよいと、Snowflake は勧めている2。更新では、前の更新から変わった分だけを写す3。一度に走る更新は一つだけである2。更新のたびに、写したファイルのハッシュ値を元と写しで比べ、合わなければ更新は失敗する3。
写すのは非同期なので、写した側は元より遅れる。遅れは、最大で更新の間隔の 2 倍である。30 分ごとに写すなら、障害のときに写した側は最大 60 分遅れている1。ただし、更新が間隔より長くかかると、次の更新は前の更新が終わるまで遅れる2。
そのため、計画外の切り替えでは、最後の更新より後に元へ書いたデータは、新しい本番に無い。Snowflake は、切り替えた後に、新しい本番で直近のデータを突き合わせてから読み取りを受け付ける進め方を挙げている1。Snowpipe Streaming(行を少しずつ流し込む取り込み)で入れたデータは、写る前に切り替わったら、新しい本番に同じデータを入れ直す必要がある9。計画した訓練や移行では、データを失わないように、先に元への書き込みを止めて、最後の更新をしてから切り替える手順がある5。
どこまでのデータを失ってよいかを、RPO(Recovery Point Objective、目標復旧時点)という。どれだけの時間で戻すかを、RTO(Recovery Time Objective、目標復旧時間)という。Snowflake の Well-Architected Framework は、大事な処理ごとに RTO と RPO を決めて書いておき、RPO に合わせて更新の間隔を短くするよう勧めている6。
Snowflake では、フェールオーバーグループの RPO を契約で保証する仕組みを RPO Assurance という。2026 年 9 月に一般提供になった12。RPO の目標は、契約で別に決めない限り 30 分である。SLA が対象にするのは、同じクラウドの、Snowflake が決めたリージョンの組だけで、対象の組では月の対象時間の 99.9% 以上で遅れをこの目標の内に保つとしている。使うには Snowflake の担当者に申し込む13。RPO Assurance では更新の間隔を決めず、変わった分を続けて写す。Snowflake は、既定の更新方式である Replication Classic から、別の更新方式の Optimized Refresh か RPO Assurance へ移るよう勧めている13。
切り替える:フェールオーバーとフェールバック
切り替えは、写す先のアカウントで、セカンダリのフェールオーバーグループをプライマリに昇格させて行う14。グループの中のオブジェクトはまとめて読み書きできるようになり、元のアカウントのオブジェクトは読み取り専用になる15。
- 更新が走っている間は、昇格できない。更新が終わるのを待つか、更新を止めてから昇格させる。途中で止めた更新のせいで写した側が食い違い、直す必要が出ることがある15。
- 切り替えると、すべてのセカンダリのグループで予定された更新が止まる。自動の更新を戻すには、セカンダリのグループがあるアカウントごとに ALTER FAILOVER GROUP … RESUME を実行する15。
- 切り替えた後は、データの取り込みや変換の処理を流し直して、写しを今の状態に近づける15。
障害の長さで、選び方が変わる1。
- 短い障害なら、写した側を読み取り専用で使うことが多い。
- 長い障害で最新のデータが要るなら、写した側を読み書きできる本番にする。
障害が直ったら、まず元のアカウントのグループを更新して、障害の間に新しい本番へ書いたデータを写す。その後、元のアカウントのグループをもう一度プライマリに昇格させ、接続も元のアカウントへ戻す。これをフェールバックという1。
接続先を切り替える:Client Redirect
Snowflake では、アプリの接続先を切り替える機能を Client Redirect という。アプリの接続の設定を変えずに、別のリージョンのアカウントへつなぎ替える4。
- 接続オブジェクトを使う。接続 URL は「組織名-接続名.snowflakecomputing.com」の形で、どのアカウントかを含まない4。
- この URL でつなぐと、プライマリの接続を持つアカウントにつながる4。
- プライマリとセカンダリの接続は、別々のリージョンのアカウントに置く必要がある4。
- 切り替えは自動ではない。セカンダリの接続を持つアカウントで ALTER CONNECTION … PRIMARY を実行して、プライマリに昇格させる4。
- ブラウザは、キャッシュのため、つなぎ替わるまで数分かかることがある4。
訓練:手順を書き、定期的に切り替えてみる
Snowflake の Well-Architected Framework は、切り替えの SQL(Structured Query Language)を手順書に書き、実行できる権限を少数の人に限るよう勧めている。本番でない環境を切り替える訓練を定期的に行い、手順と RTO、RPO を確かめるよう勧めている6。
計画した訓練では、元のフェールオーバーグループを読み取り専用にしてから、最後の更新をして、写した側を昇格させる5。接続だけを切り替えて、データのグループはセカンダリのままにする訓練もできる5。
費用:写した側のアカウントに請求される
複製の料金は、データ転送と計算の二つに分かれ、どちらも写した側のアカウントに請求される。ほかに、写した側の保存の料金と、写した側でマテリアライズドビューと検索最適化を自動で保守する料金もかかる16。
- データ転送: 別のリージョンや別のクラウドへデータを出すと、バイトごとに料金がかかる。同じリージョンの中の転送は無料である17。転送の単価は、元のアカウントの場所で決まる16。
- 計算: 更新で写す差分を求め、写すための計算である。Replication Classic では、Snowflake が用意する計算リソースの量で請求される。Optimized Refresh と RPO Assurance では、写したデータの量と、変わったオブジェクトの数で請求される16。
- 保存: 写した側のデータベースには、写した側のアカウントで保存の料金がかかる16。
最初の複製や更新が失敗しても、料金はかかる。ただし、失敗する前に写したデータは、14 日以内の次の更新で使い直され、もう一度は写されない16。よく書き換わる大きな表は、複製の費用が大きくなるので、そうした表を持つデータベースは更新の間隔を長くするよう、Snowflake は勧めている9。費用は、写すデータベースやオブジェクトと、更新の間隔を選ぶことで抑えられる。更新を止めれば、転送と計算の料金は止まる16。
ACCOUNT_USAGE の REPLICATION_GROUP_USAGE_HISTORY ビューは、グループごとに使ったクレジットと転送したバイト数を 365 日分持つ。ビューへの反映には、最大 3 時間かかる18。
複製は、人の誤りへの備えではない
Snowflake の Well-Architected Framework は、リージョンの障害に耐えるには別のリージョンへの複製が要るが、人の誤りやデータの破損への備えの代わりにはならないとしている6。複製は元の表の最新の版を写し、写した側の Time Travel の履歴は別に持つ9。誤って変えた表は、本番のアカウントの Time Travel で戻す。Well-Architected Framework も、データを戻す第一の手段を Time Travel としている6。そのうえで、大事なデータベースのゼロコピークローンを定期的に自動で作り、別のリージョンへの複製と組み合わせるよう勧めている。クローンの代わりに、Snowflake Snapshots で変更できないバックアップを定期的に作り、期限が来たら消す方法も挙げている6。
出典18件
-
Snowflake「Introduction to business continuity & disaster recovery | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/replication-intro — 遅れの幅、切り替えの選び方。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8
-
Snowflake「Introduction to replication and failover across multiple accounts | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/account-replication-intro — 写るオブジェクトと写らないオブジェクト、エディション。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15
-
Snowflake「Replicating databases and account objects across multiple accounts | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/account-replication-config — 設定の手順と例、変わった分だけ写す、ハッシュ値での確かめ。 ↩ ↩2 ↩3 ↩4 ↩5
-
Snowflake「Redirecting client connections | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/client-redirect — 接続 URL、別々のリージョン、接続の昇格。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10
-
Snowflake「Quiesce a primary failover group | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/account-replication-quiesce-primary — 計画した訓練と移行の手順。 ↩ ↩2 ↩3 ↩4
-
Snowflake「Reliability」Snowflake Well-Architected Framework、2026年6月17日更新、2026年10月27日取得. https://www.snowflake.com/en/developers/guides/well-architected-framework-reliability/ — アベイラビリティゾーン、別のリージョンへの備え、手順書と訓練、RTO と RPO。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Benoit Dageville ほか「The Snowflake Elastic Data Warehouse」SIGMOD 2016、2016年6月、2026年10月27日取得. https://info.snowflake.net/rs/252-RFO-227/images/Snowflake_SIGMOD.pdf — 4.2 節、障害への備え。 ↩
-
Snowflake「Support Policy and Service Level Agreement」2026年9月28日更新、2026年10月28日取得. https://www.snowflake.com/legal/support-policy-and-service-level-agreement/ — 使えなかった時間の測り方と、クレジットによる補償。 ↩
-
Snowflake「Replication considerations | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/account-replication-considerations — 読み取り専用、Time Travel の履歴、ステージ、Snowpipe Streaming。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9
-
Snowflake「CREATE FAILOVER GROUP | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/sql-reference/sql/create-failover-group ↩ ↩2
-
Snowflake「Introduction to database replication across multiple accounts | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/db-replication-intro ↩
-
Snowflake「Sep 30, 2026: Optimized Refresh and RPO Assurance for failover groups (General availability) | Snowflake Documentation」2026年9月30日、2026年10月28日取得. https://docs.snowflake.com/en/release-notes/2026/other/2026-09-30-optimized-refresh-rpo-assurance-ga ↩
-
Snowflake「Optimized Refresh and RPO Assurance | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/account-replication-optimized-refresh — 日本語版は無い(2026 年 10 月 28 日時点)。 ↩ ↩2
-
Snowflake「ALTER FAILOVER GROUP | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/sql-reference/sql/alter-failover-group ↩
-
Snowflake「Failing over account objects | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/account-replication-failover-failback — 更新中は昇格できない、予定された更新の再開、切り替えた後の流し直し。 ↩ ↩2 ↩3 ↩4
-
Snowflake「Understanding replication cost | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/account-replication-cost — 日本語版の題は「複製コストについて」。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Snowflake「Understanding data transfer cost | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/user-guide/cost-understanding-data-transfer ↩
-
Snowflake「REPLICATION_GROUP_USAGE_HISTORY view | Snowflake Documentation」日付なし、2026年10月28日取得. https://docs.snowflake.com/en/sql-reference/account-usage/replication_group_usage_history ↩
この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。