このサイトは非公式の日本語訳です。Cloudflare・EmDashプロジェクトが運営するサイトではありません。

このページで決めること:問題が起きたときに使う巻き戻しの仕組みを、どこまで用意しておくか

決める前に知っておくこと

EmDashのサイトで「戻したいもの」は、性質の違う6つに分けられます。それぞれ、戻す仕組みが別です。

戻したいもの 起きること(例) 使える仕組み 提供元 戻せる範囲
1ページの本文 誤った内容を公開した リビジョンから前の版を復元 EmDash標準 保存された版
削除したページ 誤って削除した ゴミ箱から復元 EmDash標準 「完全に削除」するまで
データベース全体(本文、スキーマ、設定、ユーザー、プラグインのデータ) フィールドを削除した。大量の誤更新をした D1のTime Travel(1分単位で過去の時点に戻す) Cloudflare標準 有料プランで30日前まで、無料プランで7日前まで
動いているコード デプロイ後に表示が崩れた Workersのロールバック(管理画面または wrangler rollback Cloudflare標準 直近100版
コードの元のファイル(ソース) 改修を取り消して作り直したい Gitのコミット履歴 Gitのホスティング(GitHubなど) 保管した全履歴
画像・ファイル 差し替えた。削除した バケットのオブジェクトを別の場所にコピーしておく 自分で用意する コピーした時点

各仕組みには、次の性質があります。

  • リビジョンを復元すると、選んだ版の内容で新しいリビジョンが作られます。それまでのリビジョンは消えません。
  • ゴミ箱に移したエントリーは、管理者が「完全に削除」を選択すると、リビジョンごと消えて元に戻せません。
  • D1のTime Travelは、データベース全体を上書きして戻します。戻す前の状態に戻り直すためのブックマークも発行されます。R2のメディアファイルは戻りません。
  • Workersのロールバックは、デプロイ済みのコードだけを戻します。D1、R2、KVなどつながっているリソースは変わりません。KVやR2のバインディングを削除した版には戻せません。
  • EmDashのコアマイグレーション(本体更新時のデータベース構造の変更)は前にしか進まず、取り消す手順がありません。
  • 管理画面の「設定」→「バックアップ」から取れるJSONのバックアップでは、サイトを復元できません。EmDashにはJSONから復元する機能がありません。
  • Cloudflareに登録したシークレットは、登録後にWranglerや管理画面から値を読み出せません。

公式の推奨

  • 一括投入、スキーマ変更、大きな更新の前には、JSONのバックアップではなく、復元できるデータベースのバックアップ(D1ならTime Travelの時点)を用意します。(公式「バックアップと復旧」)
  • 危険な操作の前に、npx wrangler d1 time-travel info で現在のブックマークを取得し、デプロイや変更の記録と一緒に控えます。(公式「バックアップと復旧」)
  • データベースを戻すときは、先にサイトへの書き込みを止めます。戻したあとは、戻したデータベースに合う版のコードをデプロイし、ログイン、コンテンツの読み込み、書き込みを確認します。(公式「バックアップと復旧」)
  • SQLダンプを、稼働中の本番データベースにそのまま実行してはいけません。空のD1データベースを新しく作って読み込み、確認してから本番のバインディングを切り替えます。(公式「バックアップと復旧」)
  • R2やS3互換のバケットは、データベースとは別に、オブジェクト単位でバックアップします。バックアップは本番のアカウントや障害の範囲の外に置き、同じ時点のデータベースのバックアップやTime Travelの時点を記録します。(公式「バックアップと復旧」「メディアストレージの選択」)
  • EmDashの更新で問題が出て、前の版のコードが更新後のデータベースを使えない場合は、書き込みを止め、更新前のデータベースとコードを一緒に戻します。(公式「EmDashのアップデート」)

選択肢の比較

A. EmDash標準のみ B. EmDash標準+Cloudflare標準 C. Bに加え、保存期間を超える備え
概要 リビジョンとゴミ箱で、ページ単位の誤りだけを戻す Aに加え、D1のTime TravelとWorkersのロールバックで、データベース全体とコードを戻す Bに加え、データベースの定期的なSQLダンプ(wrangler d1 export)と、画像・ファイルのコピーを別の場所に保存する
向いている場合 記事の更新だけで運用し、コードやスキーマを変えない コードの改修やスキーマの変更をする 誤りに長く気づかない可能性がある。画像・ファイルも戻せるようにしたい
注意点 データベース全体の誤更新、スキーマの変更、コードの不具合は戻せない Time Travelの期間を過ぎた時点には戻せない。画像・ファイルは戻らない ダンプとコピーの保存先、実行の仕組み、戻す手順の確認が必要
費用と手間 最小(追加の設定なし) 小(Time Travelは自動。ブックマークを控える運用が加わる) 中(保存先のストレージ料金と、定期実行の仕組みが必要)
根拠にした公式ページ コンテンツの作成と公開 バックアップと復旧、Cloudflare「D1 Time Travel」「Rollbacks」 バックアップと復旧、メディアストレージの選択

本サイトでは、事態ごとに次の方法で戻します。

事態 戻し方
1ページだけおかしい リビジョンから復元する
デプロイ後にサイト全体の表示がおかしい Workersをロールバックする
EmDashの更新後に不具合が出た Workersを更新前の版にロールバックする。データベース構造の変更で動かない場合は、記録したブックマークの時点にD1を戻す
自動処理が大量に誤更新した 自動処理を止め、APIトークンを失効させ、D1を処理前の時点に戻す
画像を誤って消した・差し替えた R2のコピーから戻す
30日以上前の状態が必要 週1回のSQLダンプを新しいD1データベースに読み込む

別の選択肢が合う条件

記事の更新だけで運用し、コード・スキーマ・データベースの一括変更をしないサイトでは、Aの範囲で足りることもあります。コードの改修はするが、画像の差し替えが少なく、誤りにすぐ気づける体制なら、Bで運用する方法もあります。

根拠にした公式ページ