+ 作るログイン
1 / 23
AWS でサービスを作る ― 知識ゼロから、構成を自分で考えられるまで / 全32章

AWS 29:可用性と災害対策

発行
アニメモ公式
版
第2版
改訂
コマ
全23

「止まらないように」を数字にする章です。99.9% のような可用性の数字の意味、部品を直列・並列に並べたときの計算、単一障害点の探し方、障害の大きさごとの備え、RPO と RTO、バックアップと復元・パイロットライト・ウォームスタンバイ・マルチサイトの4つの災害対策、AWS Backup での複製と、復旧の練習までを、フォトログを例に説明します。

「止まらないようにして」は、どれくらい?

第28章では、信頼性の柱として「壊れても、すぐ戻る」構成を目指すと書きました。ところが、実際の仕事でこう言われたらどうでしょう。

「フォトログは、絶対に止めないでね」

言った人に悪気はありません。でも、作る側は困ります。絶対に止まらないシステムは作れないからです。機械はいつか壊れますし、データセンターが停電することも、地震で地域ごと使えなくなることも、誰かが操作を間違えることもあります。

止まりにくくする方法はいくらでもあります。けれど、止まりにくくするほど、お金も手間も増えます。どこまでやればいいのかは、「絶対」という言葉からは決まりません。

あいまいな言葉数字にすると
止めないで1か月に何分までなら止まってよいか
データを消さないで何時間分のデータまでなら、失っても受け入れられるか
すぐ直して障害が起きてから何時間で再開できればよいか
災害にも備えて東京が丸ごと使えなくなったら、どこで、いつまでに再開するか

この章では、この数字の決め方と、決めた数字を満たすための部品の組み方を学びます。前半で「どれくらい止まるのか」を計算する方法、後半で地域ごと使えなくなるような災害への備えを扱います。

※2026年9月時点の情報です。画面・料金・細部は変わることがあります。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 1 / 23
  • 「止まらないようにして」は、どれくらい?
  • 会社
  • どこまでやればいい?
  • ノートPC
  • 依頼する人
  • 作る人
  • 「絶対に止めないで」
  • いくらかけていい?
  • 「絶対は無理です…」
  • 目標
  • 言葉ではなく、数字で約束する
  • 1か月に何分まで止まってよい? 何時間分のデータまでなら失ってよい?
  • 第28章の信頼性の柱で「壊れても、すぐ戻る」と言った。でも「すぐ」とは何分か
  • ひらめき
  • 「絶対に止めない」は作れない。どれだけ止まってよいかを、数字で決めないと設計できない。

一言でいうと:お店の「営業の約束」と「火事の備え」

この章の2つのテーマを、お店にたとえてみます。

テーマお店でいうとAWS でいうと
可用性(アベイラビリティ)「年中無休。閉まるのは年に数時間まで」という約束。レジが壊れても予備のレジで続けるサーバーや AZ が壊れても、サービスを続ける割合
災害対策(DR:Disaster Recovery)店が火事で焼けたら、隣町の店で何日後に再開するか。帳簿の控えを別の場所に置いておくリージョンごと使えなくなったとき、別のリージョンで何時間後に再開するか

可用性は「使える時間の割合」です。1年のうち、利用者が使えた時間が何%かで表します。

災害対策は、ふだんの小さな故障ではなく、地域まるごとのような大きな障害から立ち直る計画です。

この2つは、つながっています。可用性を高くするには、まず小さな故障(サーバー1台、AZ 1つ)に強くします。それでも防げない大きな障害には、災害対策で備えます。

第2章で見たように、AWS ではサーバーがレジ、AZ(アベイラビリティゾーン、独立したデータセンターの集まり)が店、リージョン(東京・大阪などの地域)が町にあたります。この本ではここまで、「レジ」と「店」の故障に備えてきました。この章では、「町」の単位まで考えを広げます。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 2 / 23
  • 一言でいうと:お店の「営業の約束」と「火事の備え」
  • 店
  • 注意
  • 可用性(アベイラビリティ)
  • 災害対策(DR)
  • 「年中無休。閉まるのは年に数時間まで」
  • 「火事になったら、隣町の店で翌日再開」
  • OK
  • レジが壊れた → 予備のレジ
  • OK
  • 帳簿の控えを別の場所に置く
  • OK
  • 店員が休んだ → 他の店員
  • OK
  • 再開の手順を練習しておく
  • AWS では:レジ=サーバー、店=AZ(第2章)、町=リージョン
  • ひらめき
  • 可用性=開いている時間の割合。災害対策=店ごと使えなくなったときに、どこで何時間で再開するか。

可用性の数字:「9 がいくつ」で止まってよい時間が決まる

可用性は、よく 99.9% のように「9 がいくつ並ぶか」で表します。「スリーナイン」「フォーナイン」と呼ぶこともあります。

止まってよい時間に直すと、次のようになります(1年=365日、1か月=30日で計算)。

可用性1年で止まってよい時間1か月で止まってよい時間
99%約3.65日約7.2時間
99.9%約8.8時間約43分
99.95%約4.4時間約22分
99.99%約53分約4.3分
99.999%約5分約26秒

計算は簡単です。たとえば 99.9% なら、止まってよいのは 0.1%。1か月は 30日×24時間×60分=43,200分なので、その0.1%で約43分です。

表からわかる大事なことは、9 が1つ増えるごとに、許される時間が10分の1になることです。99.9% と 99.99% は数字の見た目はほとんど同じですが、「月に43分」と「月に4分」はまったく違います。4分では、人が障害に気づいて画面を開いている間に過ぎてしまいます。つまり 99.99% 以上を目指すなら、人の手を待たずに自動で切り替わる仕組みが要ります。

そして、9 を1つ増やすたびに、費用と手間はたいてい大きく増えます。フォトログのような写真の SNS なら 99.9% でも十分なことが多く、決済や医療のように止まると大きな損害が出るサービスなら、もっと上を目指します。

なお、AWS の各サービスにも SLA(サービスレベル契約)として可用性の約束があります。値や条件はサービスごとに違うので、公式の SLA のページで確認してください。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 3 / 23
  • 可用性の数字:「9 がいくつ」で止まってよい時間が決まる
  • 可用性
  • 止まってよい時間(棒は目盛りを縮めて表示)
  • 1か月あたり
  • 99%
  • 年に約3.65日
  • 月に約7.2時間
  • 99.9%
  • 年に約8.8時間
  • 月に約43分
  • 99.95%
  • 年に約4.4時間
  • 月に約22分
  • 99.99%
  • 年に約53分
  • 月に約4.3分
  • 99.999%
  • 年に約5分
  • 月に約26秒
  • ※1年=365日、1か月=30日で計算。9 を1つ増やすと、たいてい費用と手間は大きく増える
  • ひらめき
  • 99.9% は「1か月に約43分まで止まってよい」。9 が1つ増えるごとに、許される時間は10分の1になる。

直列につなぐと、可用性は掛け算で下がる

では、いくつもの部品を組み合わせたシステム全体の可用性は、どうなるでしょうか。

図のように、利用者のリクエストが ALB → EC2 → RDS の順に通る構成を考えます。どれか1つでも止まれば、利用者から見るとサービスは止まります。このように全部が動いていないと働かない並び方を直列と呼びます。

直列のとき、全体の可用性は、それぞれの可用性の掛け算になります。説明のため、どの部品も 99.9% だとしてみます(実際の値ではなく、計算のための例です)。

部品可用性(例)
ALB99.9%
EC299.9%
RDS99.9%
全体(掛け算)0.999 × 0.999 × 0.999 ≒ 99.7%

99.7% を時間に直すと、1か月に約2.2時間止まりうることになります。1つ1つは「月に43分」でも、3つ並べると、そのほぼ3倍です。

ここから、設計の大事な教訓が1つ出てきます。部品を足すほど、どこかが止まる確率は上がるということです。キャッシュを足す、キューを足す、外部の API を呼ぶ。どれも便利ですが、それが直列に入る(それが止まると全体が止まる)なら、全体の可用性は下がります。

では、どうすれば上げられるのでしょうか。次に見る並列がその答えです。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 4 / 23
  • 直列につなぐと、可用性は掛け算で下がる
  • 人々
  • ネットワーク
  • サーバー
  • データベース
  • 全体
  • 約99.7%
  • 利用者
  • ALB
  • EC2
  • RDS
  • 99.9%(例)
  • 99.9%(例)
  • 99.9%(例)
  • 0.999 × 0.999 × 0.999 ≒ 0.997 → 1か月に約2.2時間止まりうる(それぞれ約43分の3倍)
  • 部品が増えるほど、どこかが止まる確率は上がる。「部品を足す」だけでは止まりにくくならない
  • ひらめき
  • どれか1つでも止まれば全体が止まる。99.9% を3つ並べると、全体は約99.7% になる。

並列に並べると、可用性は大きく上がる

今度は EC2 を2台にして、ALB がどちらにでも送れるようにします(第11章)。どちらか1台が動いていれば、サービスは続けられます。このようにどれか1つが動いていればよい並び方を並列と呼びます。

並列のとき、その段が止まるのは全部が同時に止まったときだけです。計算のため、EC2 1台の可用性をわざと低めの 99% としてみます。

状態確率
1台が止まっている1%(0.01)
2台とも同時に止まっている0.01 × 0.01 = 0.0001(0.01%)
EC2 の段が動いている1 − 0.0001 = 99.99%

99% の部品を2つ並べるだけで、99.99% になりました。これが冗長化(同じ役目の部品を複数置くこと)の力です。

ただし、この計算には大事な前提があります。2台が「別々の理由で」壊れることです。

2台が一緒に止まってしまう例対策
2台とも同じ AZ にある。AZ が停電した別々の AZ に置く(第12章)
2台に同じ間違った設定を配った変更を少しずつ出す(第19章)
2台とも同じ DB につながっていて、DB が止まったDB も冗長化する(第13章)

最後の例のように、サーバーを並列にしても、その後ろに直列の部品が残っていれば、そこが全体を止めます。次に、その「残った1か所」を探します。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 5 / 23
  • 並列に並べると、可用性は大きく上がる
  • サーバー
  • 人々
  • ネットワーク
  • EC2 1台目
  • 99%(例)
  • データベース
  • EC2 の段
  • 約99.99%
  • 利用者
  • ALB
  • 99.9%(例)
  • サーバー
  • RDS
  • 99.9%(例)
  • EC2 2台目
  • 99%(例)
  • 1 −(0.01 × 0.01)= 0.9999 ※2台が「別々の理由で」壊れる場合。同じ AZ・同じ設定ミスなら一緒に止まる
  • ひらめき
  • 2台のどちらかが動いていればよいなら、止まるのは「2台とも同時に」止まったときだけ。

単一障害点を探す:「これが止まったら全部止まる」はどこ?

単一障害点(SPOF:Single Point Of Failure)とは、そこが1つ止まるだけで、全体が止まってしまう部品のことです。可用性を上げる作業の多くは、この単一障害点を見つけて潰すことです。

図は、フォトログの途中の構成です。EC2 は2つの AZ に1台ずつあり、ALB も両方の AZ にまたがっています。一見、冗長化できていそうです。

ところが、赤い部品を見てください。

部品なぜ単一障害点か
RDS(AZ a に1つだけ)AZ a が止まると、DB が消える。AZ c の EC2 は動いていても、データを読めない
NAT ゲートウェイ(AZ a に1つだけ)両方の AZ のサーバーが、外へ出るときに AZ a の NAT を通っている(第7章)。AZ a が止まると、AZ c のサーバーも外の API を呼べない

単一障害点を探すには、構成図の部品を1つずつ指さして、「これが止まったら、利用者に何が起きる?」と聞いていくのが確実です。

問い答えが「全部止まる」なら
このサーバーが止まったら?単一障害点。2台以上にする
この AZ が止まったら?その AZ にしかない部品が単一障害点
この DB が止まったら?単一障害点。Multi-AZ にする
この人が休んだら?手順を知っている人が1人だけなら、それも単一障害点

最後の行のとおり、単一障害点は機械だけではありません。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 6 / 23
  • 単一障害点を探す:「これが止まったら全部止まる」はどこ?
  • 人々
  • VPC
  • ネットワーク
  • ALB(両方の AZ)
  • 利用者
  • AZ a
  • AZ c
  • サーバー
  • EC2
  • サーバー
  • EC2
  • データベース
  • RDS
  • ルーター
  • NAT
  • 1つだけ
  • 全員が通る
  • 赤い部品が単一障害点(SPOF)。AZ a が止まると、DB も、外へ出る道(NAT、第7章)も一緒に消える
  • AZ c の EC2 は動いていても、DB に届かず外にも出られない
  • ひらめき
  • サーバーを2台にしても、全員が通る1か所が残っていれば、そこが止まった瞬間に全体が止まる。

見つけたら、2つにするか「止まっても待てる」形にする

見つけた単一障害点には、2つの対策があります。

対策例
2つにする(冗長化)RDS を Multi-AZ にして、AZ c に待機系を置く。NAT ゲートウェイを AZ ごとに置く
止まっても待てる形にする写真の縮小処理はキュー(第24章)に積んでおけば、処理役が止まっても、戻ったときに続きから処理できる

図では、RDS の待機系を AZ c に置き(第13章の Multi-AZ)、NAT ゲートウェイも AZ ごとに1つずつ置きました。NAT については、各 AZ のプライベートサブネットのルートテーブル(第6章)を、同じ AZ の NAT に向けるようにします。こうしないと、NAT を2つ置いても、片方の AZ に通信が集まったままになります。

RDS の Multi-AZ では、主の DB が止まると、AWS が自動で待機系に切り替えます。切り替えには通常1〜2分ほどかかり、その間は DB に接続できません。アプリは接続が切れたら、少し待って再接続するように作っておきます。

気をつけたいのは、機械以外の単一障害点です。

見落としやすい単一障害点対策
サーバーに手で置いた設定ファイル設定は Parameter Store や Secrets Manager(第20章)に置く
1人しか知らない手順手順を書き、IaC(第18章)にする
手動で更新している証明書ACM(第14章)で自動更新にする
1つのアカウント・1人の管理者管理者を複数にし、MFA を付ける(第1章)
  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 7 / 23
  • 見つけたら、2つにするか「止まっても待てる」形にする
  • 人々
  • VPC
  • ネットワーク
  • ALB(両方の AZ)
  • 利用者
  • AZ a
  • AZ c
  • サーバー
  • EC2
  • サーバー
  • EC2
  • データベース
  • RDS
  • ルーター
  • NAT
  • データベース
  • RDS
  • ルーター
  • NAT
  • 主
  • a 用
  • 待機系
  • c 用
  • DB は待機系へ自動で切り替わる(第13章)。NAT は AZ ごとに置き、ルートも AZ ごとに分ける
  • 見落としやすい単一障害点:手で置いた設定ファイル、1人しか知らない手順、1枚しかない証明書の更新
  • ひらめき
  • DB は Multi-AZ、NAT は AZ ごとに1つ。1つの AZ が丸ごと止まっても、残った AZ だけで動き続ける。

何が壊れるのか:障害の大きさで、備え方が変わる

ここまでの対策は、主にサーバーや AZ の故障への備えでした。障害には大きさがあり、大きさによって効く対策が違います。

障害の大きさ例備え章
サーバー1台ディスクの故障、OS が固まったAuto Scaling で自動で入れ替え第12章
AZ 1つデータセンターの停電・冷却の故障複数の AZ に置く(Multi-AZ)第2・12・13章
リージョンまるごと大きな地震、広い範囲の障害別のリージョンに備えるこの章
人の操作誤って DB を消した、間違った設定を配った、乗っ取られた過去の時点に戻れるバックアップこの章

AWS のリージョンは、それぞれが独立するように作られています。東京リージョンが丸ごと使えなくなることはとても珍しいですが、ゼロではありません。そこで、サービスによっては、別のリージョン(日本なら大阪など)に備えを置きます。

そして、図の右側のとおり、実際にいちばんよく起きるのは「人の操作」です。AZ やリージョンの障害に比べて、誤削除や設定ミスは、ずっと頻繁に起きます。

ここで注意が要るのは、冗長化は人の操作ミスを防がないことです。Multi-AZ の待機系は、主の DB への変更をすぐに写します。誤って消したデータは、待機系からも消えます。これについては、後で詳しく見ます。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 8 / 23
  • 何が壊れるのか:障害の大きさで、備え方が変わる
  • リージョン(東京)
  • サーバー
  • Auto Scaling で入れ替え(第12章)
  • AZ
  • AZ
  • 複数の AZ に置く(Multi-AZ)
  • サーバー
  • サーバー
  • 人
  • リージョン
  • 別リージョンに備える(この章)
  • 人の操作
  • 誤削除・設定ミス
  • 人の操作
  • 過去に戻れるバックアップ
  • よく起きるのは上の段。いちばん多いのは、実は人の操作
  • ひらめき
  • サーバー1台・AZ 1つ・リージョンまるごと・人の操作ミス。大きさごとに、効く対策が違う。

RPO と RTO:「どこまで戻るか」と「何時間で戻るか」

災害対策を考えるときは、まず2つの数字を決めます。

言葉意味図では
RPO(Recovery Point Objective、目標復旧時点)障害のとき、どの時点のデータまで戻れればよいか。言い換えると、失ってよいデータの時間幅赤い区間
RTO(Recovery Time Objective、目標復旧時間)障害が起きてから、何時間で再開できればよいか。止まっていてよい時間青い区間

図の例で見てみます。毎晩2時にバックアップを取っていて、朝5時に DB が壊れたとします。

時刻起きたこと
2:00最後のバックアップ
5:00障害
9:00バックアップから戻して、再開

このとき、2時から5時までの3時間分のデータ(その間に投稿された写真やいいね)は失われます。これが RPO にあたります。5時から9時までの4時間、サービスは止まっていました。これが RTO にあたります。

「RPO 3時間・RTO 4時間でよい」と決めてあれば、この結果は約束どおりです。逆に「データは5分以上失いたくない」なら、毎晩1回のバックアップでは足りません。

このように、RPO と RTO が決まると、必要なバックアップの間隔や、予備をどこまで用意すべきかが決まります。数字が先、部品は後です。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 9 / 23
  • RPO と RTO:「どこまで戻るか」と「何時間で戻るか」
  • RPO 失うデータ(3時間分)
  • RTO 止まっている時間(4時間)
  • ディスク
  • 電気
  • OK
  • バックアップ 2:00
  • 障害が起きた
  • 再開 9:00
  • 時間 →
  • 5:00
  • RPO(Recovery Point Objective)=目標復旧時点。どの時点のデータまで戻れればよいか
  • RTO(Recovery Time Objective)=目標復旧時間。障害から何時間で再開できればよいか
  • ひらめき
  • RPO=失ってよいデータの時間幅。RTO=止まっていてよい時間。災害対策は、この2つの数字から始まる。

RPO と RTO を小さくするほど、費用は増える

RPO と RTO は、小さいほど利用者にとってはうれしい数字です。ただし、小さくするには費用がかかります。図では、赤と青の区間が縮みました。

縮めたいもの方法かかるもの
RPO(失うデータ)バックアップの間隔を短くする。さらに、データを別の場所へ常に複製し続ける保存の容量、複製の通信、複製先の DB
RTO(止まる時間)予備を前もって用意しておく。切り替えを自動にする予備のサーバーや DB を動かし続ける料金、仕組みを作る手間

たとえば RDS の自動バックアップを使うと、保存期間の中の好きな時点に戻せるポイントインタイムリカバリ(PITR)ができ、RPO は数分程度にできます(第13章)。一方、戻すには新しい DB を作るので、RTO はそのぶんかかります。

大事なのは、この数字を技術の側だけで決めないことです。

サービスの持ち主に聞くこと例
1時間止まったら、いくら損をするか売上、問い合わせ対応、信用
1時間分のデータが消えたら、何が起きるか利用者の投稿が消える、注文が消える
そのために、月いくらまで払えるか予備の費用と、止まったときの損を比べる

「止まったときの損」が「備えの費用」より大きければ、備える価値があります。データの種類ごとに数字を変えるのもよい考えです。フォトログでは、後でデータごとに RPO と RTO を分けます。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 10 / 23
  • RPO と RTO を小さくするほど、費用は増える
  • RPO
  • RTO
  • ディスク
  • 電気
  • OK
  • 数秒前まで複製
  • 障害が起きた
  • 数分で再開
  • 時間 →
  • 5:00
  • 縮めるには:RPO は「複製・バックアップの間隔」、RTO は「予備をどこまで用意しておくか」
  • 数字は技術で決めない。「止まったら・失ったらいくら損か」をサービスの持ち主と話して決める
  • ひらめき
  • データの複製を常に流せば RPO は短く、予備を常に動かせば RTO は短い。どちらもお金で買う。

災害対策の4つの戦略:安くて遅い ⇔ 高くて速い

リージョンまるごとの障害に備える方法として、AWS の災害対策のホワイトペーパー(公式の解説文書)は、次の4つの戦略を紹介しています。違いは、予備のリージョンに「何を」「どれだけ動かしておくか」です。

戦略予備のリージョンに置くものRPO の目安RTO の目安費用
1 バックアップと復元バックアップだけ数時間数時間低
2 パイロットライトデータの複製(常時)。サーバーは作っていない数分数十分中
3 ウォームスタンバイ小さいが全部そろった構成が常に動く数秒数分中〜高
4 マルチサイト本番と同じ構成が常に動き、両方で利用者に応えるほぼ0ほぼ0高

右へ行くほど(表の下へ行くほど)、速く戻れますが、費用も作る手間も増えます。

目安の数字は、あくまで目安です。実際の RPO と RTO は、構成と、どれだけ手順を自動化し、練習しているかで決まります。

次から、東京リージョンを普段使い、大阪リージョンを予備にする例で、4つを順に見ます。同じ舞台で、大阪側の部品が少しずつ「起きて」いく様子を追ってください。

どの戦略でも共通して要るのが、構成をコードにしてあること(IaC、第18章)です。予備のリージョンに同じ構成を作るとき、手作業では時間がかかり、間違いも入ります。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 11 / 23
  • 災害対策の4つの戦略:安くて遅い ⇔ 高くて速い
  • ディスク
  • ひらめき
  • 太陽
  • インターネット
  • バックアップと復元
  • パイロットライト
  • ウォームスタンバイ
  • マルチサイト
  • RPO 数時間・RTO 数時間
  • RPO 数分・RTO 数十分
  • RPO 数秒・RTO 数分
  • RPO ほぼ0・RTO ほぼ0
  • 費用と手間が増える →
  • 戻るまでの時間が短くなる →
  • RPO・RTO の目安は AWS の災害対策のホワイトペーパーによる。実際の値は構成と練習で決まる
  • ひらめき
  • 別リージョンに「何を」「どれだけ動かしておくか」で4段階。右へ行くほど速く戻れるが、高くなる。

戦略1 バックアップと復元:予備はデータだけ

いちばん基本の戦略がバックアップと復元(Backup and Restore)です。

普段は、東京で取ったバックアップを、大阪リージョンにも複製しておくだけです。大阪にはサーバーも DB も動いていません。

普段災害のとき
DB のバックアップ(スナップショット)を大阪に複製大阪で、IaC を使ってネットワーク・サーバーを作る
S3 の写真を大阪のバケットに複製バックアップから DB を作り直す
AMI(第10章)も大阪に複製Route 53 の向き先を大阪に変える
良いところ困るところ
いちばん安い。料金はバックアップの保存と複製の通信くらい戻すのに数時間かかる
仕組みが単純作り直す手順を練習していないと、もっとかかる

RPO は、バックアップの間隔で決まります。1日1回なら最大1日分、1時間ごとなら最大1時間分を失います。

この戦略の成否は、IaC があるかどうかでほぼ決まります。コンソールで手作業で作った構成を、災害の混乱の中で、別のリージョンに思い出しながら作り直すのは、とても難しいからです。

多くのサービスにとって、まずはこの戦略から始めるのが現実的です。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 12 / 23
  • 戦略1 バックアップと復元:予備はデータだけ
  • 場所
  • Route 53
  • 東京リージョン(普段)
  • 大阪リージョン(予備)
  • サーバー
  • Web
  • データベース
  • サーバー
  • DB
  • ディスク
  • Web
  • バックアップ
  • いちばん安い。料金はバックアップの保存分と複製の通信分くらい
  • RPO はバックアップの間隔、RTO は数時間。IaC(第18章)が無いと作り直しに何日もかかる
  • ひらめき
  • 普段は別リージョンにバックアップを複製しておくだけ。災害のときに、そこから全部を作り直す。

戦略2 パイロットライト:データは常に複製、サーバーは消してある

パイロットライトは、ガス器具の種火(口火)という意味です。種火だけは常に燃やしておき、必要なときにすぐ大きな火をつけられるようにしておきます。

災害対策では、種火にあたるのがデータです。

普段から動かしておくもの普段は動かしていないもの
DB の複製(大阪で常に最新に近いデータを受け取る)Web サーバー(図の「止めてある」)
S3 の写真の複製ALB など、DB 以外の多くの部品

DB の複製には、たとえば Aurora のグローバルデータベース(別リージョンに読み取り用の複製を持つ仕組み)や、RDS の別リージョンのリードレプリカ(第13章)を使います。データが常に流れているので、RPO は数分程度にできます。

災害のときは、次の順で動きます。

順番やること
1大阪の DB の複製を、書き込みできる主の DB に昇格させる
2Web サーバーを起動し、必要な台数まで増やす
3Route 53 で、利用者の向き先を大阪に切り替える

RTO は数十分ほどです。「バックアップと復元」との違いは、一番時間のかかるデータの復元を、前もって済ませてあることです。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 13 / 23
  • 戦略2 パイロットライト:データは常に複製、サーバーは消してある
  • 場所
  • Route 53
  • 東京リージョン(普段)
  • 大阪リージョン(予備)
  • サーバー
  • データベース
  • サーバー
  • Web
  • データベース
  • DB の複製
  • 止めてある
  • サーバー
  • DB
  • ディスク
  • Web
  • バックアップ
  • DB の複製は常時動く(Aurora のグローバルデータベースやリードレプリカなど)。サーバーは起動していない
  • RPO は数分、RTO は数十分。サーバーの起動と増やす手順を自動にしておく
  • ひらめき
  • ガスの種火のように、DB だけは常に動かして複製し続ける。災害のとき、サーバーを起動して増やす。

戦略3 ウォームスタンバイ:小さく、でも動く予備

ウォームスタンバイは「温めて待っている」という意味です。予備のリージョンに、小さいけれど全部そろった構成を、常に動かしておきます。

図では、大阪の Web サーバーが1台起きました。まだ台数は少ないですが、リクエストを受ければ、ちゃんと応えられます。

パイロットライトウォームスタンバイ
予備のサーバー作っていない小さく動いている
災害のときにすること起動して、増やして、切り替える増やして、切り替える
すぐにリクエストをさばけるかできない少ない量ならできる
RTO の目安数十分数分

ウォームスタンバイには、もう1つ大きな利点があります。予備が本当に動くかを、普段から確かめられることです。パイロットライトでは、予備のサーバーを起動するまで、本当に動くかどうかはわかりません。ウォームスタンバイなら、予備に少しだけ試しのリクエストを流して、確かめ続けられます。

注意点は、災害のときに予備を増やせるかどうかです。大阪で急に何十台も起動しようとして、アカウントの上限(Service Quotas)に引っかかることがあります。上限は前もって確認し、必要なら引き上げを申請しておきます。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 14 / 23
  • 戦略3 ウォームスタンバイ:小さく、でも動く予備
  • 場所
  • Route 53
  • 東京リージョン(普段)
  • 大阪リージョン(予備)
  • サーバー
  • データベース
  • サーバー
  • まずは 小さく1台
  • Web
  • データベース
  • DB の複製
  • Web
  • サーバー
  • DB
  • ディスク
  • Web
  • バックアップ
  • パイロットライトとの違い:予備がすぐに(少ない量なら)リクエストをさばける
  • RPO は数秒、RTO は数分。予備が本当に動くかを、普段から確かめられるのも利点
  • ひらめき
  • 予備のリージョンでも、小さな構成が常に動いている。災害のときは台数を増やして、切り替えるだけ。

戦略4 マルチサイト(アクティブ/アクティブ):両方で本番

いちばん強い戦略がマルチサイト アクティブ/アクティブです。東京と大阪の両方が本番として動き、両方が同時に利用者に応えます。図では、Route 53 から両方のリージョンへ太い矢印が出ています。

良いところ困るところ
片方が止まっても、もう片方がそのまま続ける。RTO はほぼ0費用は倍以上
利用者の近いほうのリージョンで応えられる作りが難しい

いちばん難しいのはデータです。両方のリージョンで同時に書き込みを受けると、「東京で A に変えた」と「大阪で B に変えた」が同時に起きたとき、どちらを正しいとするかを決めなければなりません。

データの置き場両方のリージョンで書き込むには
DynamoDBグローバルテーブルで、複数のリージョンに自動で複製し、どのリージョンでも読み書きできる
Auroraグローバルデータベースは基本的に「書き込みは1つのリージョン」。書き込みを別のリージョンから転送する機能もある
S3リージョン間の複製(レプリケーション)を双方向に設定できる

マルチサイトは、止まると大きな損害が出るサービス(決済、大規模な通販など)で選ばれます。フォトログのような規模では、ほとんどの場合、ここまでは要りません。

要件の数字が、ここまでを求めているかを必ず確かめてから選びます。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 15 / 23
  • 戦略4 マルチサイト(アクティブ/アクティブ):両方で本番
  • 場所
  • Route 53
  • 東京リージョン(普段)
  • 大阪リージョン(予備)
  • サーバー
  • データベース
  • サーバー
  • サーバー
  • Web
  • データベース
  • DB の複製
  • Web
  • Web
  • サーバー
  • DB
  • ディスク
  • Web
  • バックアップ
  • RPO・RTO はほぼ0に近づく。ただし費用は倍以上、作りも難しい
  • 両方で書き込むと、同じデータの食い違いをどう解くかが問題になる(DynamoDB グローバルテーブルなど)
  • ひらめき
  • 両方のリージョンが同時に利用者に応える。片方が止まっても、もう片方がそのまま続ける。

複製では守れないもの:誤削除と壊れたデータ

ここまでの戦略は、どれも「データを別の場所に写す」ことを土台にしていました。ところが、複製には弱点があります。

複製は、間違いもすぐに写すのです。図のように、誰かが誤って本番の DB のデータを全部消すと、その削除は待機系にも、別リージョンの複製にも、すぐに伝わります。アプリのバグで壊れたデータを書き込んだときも同じです。

起きることMulti-AZ・リージョン間の複製時点ごとのバックアップ
機械の故障、AZ の停電守れる守れる(戻すのに時間はかかる)
リージョンの災害守れる(別リージョンに複製していれば)別リージョンにコピーしてあれば守れる
誤削除、壊れたデータの書き込み守れない(一緒に消える)守れる(消す前の時点に戻す)
アカウントの乗っ取り、身代金目的の暗号化守れない別アカウント・消せない設定なら守れる

ですから、時点を選んで戻せるバックアップが必要です。RDS の PITR(第13章)、S3 のバージョニング(上書き・削除しても前の版を残す機能、第15章)がその例です。

さらに、攻撃者にアカウントを乗っ取られると、バックアップごと消されるおそれがあります。そこで、次の2つが有効です。

対策効果
AWS Backup Vault Lockバックアップの保管庫に鍵をかけ、決めた期間は誰も(管理者でも)消せなくする
バックアップ用のアカウントを分ける本番のアカウントが乗っ取られても、別のアカウントのバックアップには届かない(第27章の Organizations)
  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 16 / 23
  • 複製では守れないもの:誤削除と壊れたデータ
  • 錠
  • データベース
  • 本番の DB
  • すぐ複製
  • データベース
  • 複製(待機系)
  • 時点ごとのバックアップ
  • 別アカウント・消せない鍵付き
  • 誤って全削除
  • 削除も写る
  • OK
  • 昨日の3時に戻せる
  • OK
  • 乗っ取られても消されない
  • Multi-AZ や別リージョンへの複製は「機械の故障・災害」への備え。「間違い」への備えは、時点を選べるバックアップ
  • AWS Backup の Vault Lock でバックアップを消せなくする。バックアップ用のアカウントを分けるとさらに強い(第27章)
  • ひらめき
  • 複製は「間違い」もすぐ写す。過去の時点に戻れるバックアップを、別の場所に鍵をかけて持つ。

作り方:AWS Backup で、毎日のバックアップを大阪にも複製する

バックアップは、RDS・EBS・DynamoDB・S3 など、サービスごとに設定することもできますが、AWS Backup を使うと1か所でまとめて管理できます。

AWS Backup では、次の3つを作ります。

作るもの意味
バックアップ保管庫(ボールト)バックアップをしまう入れ物。東京と大阪に1つずつ作る
バックアップ計画いつ取るか・どれだけ残すか・どこへ複製するか
リソースの割り当てどの部品を対象にするか。タグ(第4章)で選ぶと、新しい部品も自動で対象になる

図の JSON は、バックアップ計画の例です。

項目意味
ScheduleExpressionいつ取るか。cron(時刻の書き方)で書く。既定では UTC(協定世界時)なので、18:00 UTC は日本時間の翌3:00
Lifecycle.DeleteAfterDays何日たったら消すか
CopyActions取ったバックアップを、どの保管庫へ複製するか。ここに大阪の保管庫を指定する

CLI で作る場合は、次のようになります。

bash
aws backup create-backup-plan --backup-plan file://plan.json
aws backup create-backup-selection --backup-plan-id <計画ID> \
  --backup-selection file://selection.json

selection.json には、対象を選ぶタグと、AWS Backup が使う IAM ロール(第3章)を書きます。

作ったら、必ず一度、大阪の保管庫から実際に戻してみます。次にその練習の話をします。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 17 / 23
  • 作り方:AWS Backup で、毎日のバックアップを大阪にも複製する
  • {
  • "BackupPlanName": "photolog-daily",
  • いつ
  • 毎日 18:00 UTC(日本の3時)
  • "Rules": [{
  • "RuleName": "daily",
  • "TargetBackupVaultName": "photolog-vault",
  • 残す
  • 35日たったら消す
  • "ScheduleExpression": "cron(0 18 * * ? *)",
  • "Lifecycle": { "DeleteAfterDays": 35 },
  • "CopyActions": [{
  • 複製
  • 大阪の保管庫へ
  • "DestinationBackupVaultArn": "…大阪の保管庫…"
  • }]
  • }]
  • 対象
  • タグ backup=daily の部品
  • }
  • ひらめき
  • バックアップの計画(いつ・どれだけ残す・どこへ複製)を1つ作り、対象の部品をタグで選ぶ。

復旧の練習:試していない復旧手順は、動かないと思え

災害対策でいちばん大事で、いちばん忘れられがちなのが練習です。「バックアップはあった。でも戻し方がわからなかった」「戻したら、アプリが古い設定のまま動かなかった」という事故はとてもよく起きます。

第28章で出てきたゲームデー(本番さながらの練習日)を、図の順で行います。

順番やること
1 日を決める関係者と時間をそろえる。最初は本番ではなく、同じ構成の検証環境で
2 わざと壊すEC2 を止める、AZ が使えない状態にする、DB を切り替える、バックアップから別リージョンに戻す
3 戻るまで測る実際の RTO と RPO を測る。決めた数字に収まったか
4 手順を直す詰まった所、誰も知らなかった所を書き残し、手順と自動化を直す

AWS には練習を助ける道具があります。

道具できること
AWS Fault Injection Service(FIS)EC2 の停止、ネットワークの遅延、AZ の障害などを、決めた範囲で安全に起こす実験ができる。止める条件も決められる
AWS Resilience Hubアプリの構成を読み込み、決めた RTO・RPO を満たせそうかを評価し、改善や練習の提案を出す

わざと壊すのは怖く感じます。でも、本番の障害は、練習より都合の悪いときに来ます。夜中に初めて手順書を開くより、昼間に練習で詰まるほうがずっと安全です。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 18 / 23
  • 復旧の練習:試していない復旧手順は、動かないと思え
  • 日付
  • 電気
  • 時計
  • 書類
  • 日を決める
  • わざと壊す
  • 戻るまで測る
  • 手順を直す
  • 関係者と時間をそろえる
  • AZ を止める・DB を落とす
  • RTO・RPO を実測
  • 詰まった所を書き残す
  • 電気
  • AWS Fault Injection Service
  • 目標
  • AWS Resilience Hub
  • EC2 停止・AZ の障害などを、安全に起こす
  • 目標の RTO・RPO を満たせそうかを評価
  • ひらめき
  • バックアップがあることと、戻せることは違う。わざと壊して、戻るまでの時間を測る。

フォトログで決める:データごとに RPO と RTO を分ける

では、フォトログ(会社のサービスとして運営している想定)で、実際に数字を決めてみます。ポイントは、全部を同じ強さで守らないことです。

守るもの失ったら・止まったらRPORTO選んだ備え
投稿・いいね(DB)利用者の投稿が消える。いちばん困る5分1時間Multi-AZ+PITR。毎日のバックアップを大阪へ複製
写真(S3)思い出が消える1日1日S3 は同じリージョンの中で複数の AZ に保存される。バージョニングで誤削除に備え、大阪へ複製
Web(EC2)サービスが止まるなし1時間2つの AZ に置き、IaC で作り直せるようにする
アクセスの記録分析ができなくなる1日数日失っても致命的ではない。特別な備えはしない

リージョンまるごとの災害には、バックアップと復元の戦略を選びました。理由は次のとおりです。

考えたこと結論
リージョン全体が長く止まる確率とても低い
止まったときの損大きいが、数時間〜1日で戻れば許容できると合意した
パイロットライト以上の費用DB の複製を常に大阪で動かす費用が、今の売上に見合わない

この判断は、利用者が増えたら見直します。決めた理由は、第28章で見たように書き残しておきます。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 19 / 23
  • フォトログで決める:データごとに RPO と RTO を分ける
  • 守るもの
  • RPO / RTO と、選んだ備え
  • データベース
  • 投稿・いいね(DB)
  • RPO 5分 / RTO 1時間:Multi-AZ+PITR+大阪へ毎日複製
  • フォルダ
  • 写真(S3)
  • RPO 1日 / RTO 1日:バージョニング+大阪へ複製
  • サーバー
  • Web(EC2)
  • RPO なし / RTO 1時間:2つの AZ+IaC で作り直す
  • 書類
  • アクセスの記録
  • RPO 1日 / RTO 数日:失っても致命的ではない
  • ひらめき
  • 全部を同じ強さで守らない。失うと困る物・止まると困る所から、強く守る。

お金:何に課金されるか

災害対策のお金は、予備として何をどれだけ動かしておくかに比例します。

課金されるもの何に対して目安
バックアップの保存保存した量(GB)と期間安い。古いものを消す設定を忘れずに
リージョン間の複製送ったデータの量(通信料)複製する量が多いと、無視できない
DB の待機系・複製待機系・複製のインスタンスの時間Multi-AZ は DB の料金がおよそ倍
予備リージョンのサーバー動かしている時間ウォームスタンバイ以上で常にかかる
練習FIS の実験を動かした分と、練習で起動した部品練習の後は片付ける

戦略ごとに、費用の傾向は次のとおりです。

戦略普段かかるお金
バックアップと復元バックアップの保存と複製の通信
パイロットライト上に加えて、予備リージョンの DB
ウォームスタンバイ上に加えて、予備リージョンの小さな構成
マルチサイト本番2つ分以上

細かい単価は、各サービスの料金ページで確認してください。戦略を決めるときは、Pricing Calculator(第4章)で戦略ごとの月額を出して並べ、「止まったときの損」と比べるのがおすすめです。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 20 / 23
  • お金:何に課金されるか
  • バックアップの保存
  • 保存した量(GB)と期間。別リージョンへの複製は通信料も
  • DB の複製・待機系
  • 待機系のインスタンス料金。Multi-AZ はほぼ倍
  • 予備リージョンのサーバー
  • ウォームスタンバイ以上で常時かかる
  • リージョン間の通信
  • 複製で流れる量に応じてかかる(第4章)
  • 練習(FIS など)
  • 実験を動かした分。練習で起動した部品も
  • 単価はそれぞれの料金ページで確認。見積もりは Pricing Calculator(第4章)で、戦略ごとに比べる
  • ひらめき
  • 予備にかかるお金は、「動かしておく量」に比例する。バックアップは安く、常時稼働の予備は高い。

よくある落とし穴

災害対策で、実際によく起きる失敗です。

落とし穴何が起きるかどうするか
一度も戻したことがないいざというとき、戻し方がわからない。戻しても動かない定期的に復元の練習をする
バックアップが本番と同じ場所にだけあるリージョンの障害や乗っ取りで、本番と一緒に失う別リージョン・別アカウントにも置く
予備リージョンの上限を確認していない災害のときに、必要な台数を起動できないService Quotas を前もって確認・引き上げ
切り替えの判断を誰がするか決めていない「もう少し待てば直るかも」で時間が過ぎる何分止まったら切り替えるか、誰が決めるかを先に決める
Multi-AZ だから誤削除も大丈夫だと思う削除が待機系にも写る時点を選べるバックアップを別に持つ
リージョンごとに要る物を忘れる大阪で起動しようとしたら、AMI・証明書・秘密が無いAMI の複製、ACM の証明書、Secrets Manager の複製を用意

最後の行は特に見落としがちです。ACM の証明書(第14章)や、AMI(第10章)、Secrets Manager の秘密(第20章)などは、リージョンごとに用意が要ることが多い部品です。練習で予備リージョンに実際に作ってみると、こうした抜けが見つかります。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 21 / 23
  • よくある落とし穴
  • NG
  • バックアップを取っているが、一度も戻したことがない
  • NG
  • バックアップが本番と同じアカウント・同じリージョンにだけある
  • NG
  • 予備リージョンで、必要な台数の上限(Service Quotas)を上げていない
  • NG
  • 切り替えの判断を誰がするか、決めていない
  • NG
  • Multi-AZ にしたから、誤削除も大丈夫だと思っている
  • 予備リージョンで使う AMI・証明書(ACM)・秘密(第20章)は、リージョンごとに用意が要ることが多い
  • ひらめき
  • いちばん多いのは「バックアップはあったが、戻せなかった」。戻す練習までが災害対策。

片付け:練習で作った計画・保管庫・予備を消す

この章の練習で作ったものを片付けます。AWS Backup は、計画 → 復旧ポイント → 保管庫の順に消します。保管庫は、中に復旧ポイント(バックアップ1つ1つ)が残っていると消せません。

順番消すもの注意
1バックアップ計画消さないと、毎日バックアップが増え続ける
2復旧ポイント東京と、複製先の大阪の両方の保管庫を確認する
3バックアップ保管庫空になってから消せる
4予備リージョンの部品練習で作った DB の複製・サーバー・スナップショット
5FIS の実験テンプレート練習で作ったもの

Vault Lock には注意してください。Vault Lock には「確定」させる段階があり、確定させた後は、決めた保存期間が過ぎるまで、復旧ポイントも保管庫も誰にも消せません。練習では、確定させずに試すだけにします。

また、コンソールは画面の右上でリージョンを切り替えて表示します。東京で片付けても、大阪に残っていることがよくあります。予備リージョンに切り替えて、残っていないか確認しましょう。第4章の Cost Explorer で、リージョン別の料金を見るのも有効です。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 22 / 23
  • 片付け:練習で作った計画・保管庫・予備を消す
  • # 1. バックアップの計画を消す(これ以上バックアップを取らない)
  • aws backup delete-backup-plan --backup-plan-id <計画ID>
  • # 2. 保管庫の中の復旧ポイントを消す(大阪の保管庫も忘れずに)
  • aws backup delete-recovery-point --backup-vault-name photolog-vault \
  • --recovery-point-arn <復旧ポイントのARN>
  • # 3. 空になった保管庫を消す
  • aws backup delete-backup-vault --backup-vault-name photolog-vault
  • Vault Lock を「確定」させた保管庫は、期間が過ぎるまで消せない。練習では確定させない
  • 予備リージョンで作ったサーバー・DB の複製・FIS の実験テンプレートも、リージョンを切り替えて確認して消す
  • ひらめき
  • 消す順番は「計画 → 復旧ポイント → 保管庫」。予備リージョンの部品の消し忘れにも注意。

まとめ:止まってよい時間とデータを、先に数字で決める

この章で見たことをまとめます。

項目内容
可用性の数字99.9% は月に約43分。9 が1つ増えると、許される時間は10分の1
直列と並列直列は掛け算で下がる。並列(冗長化)で上がる。ただし一緒に壊れない場合に限る
単一障害点「これが止まったら全部止まる」1か所。機械だけでなく、人や手順にもある
障害の大きさサーバー・AZ・リージョン・人の操作。いちばん多いのは人の操作
RPO / RTO失ってよいデータの幅 / 止まっていてよい時間。小さくするほど高い
4つの戦略バックアップと復元・パイロットライト・ウォームスタンバイ・マルチサイト
誤削除への備え複製ではなく、時点を選べるバックアップを、消せない形で別の場所に
練習戻したことのないバックアップは、無いのと同じ

第28章と第29章で、「良い構成」を比べるものさし(6本の柱)と、止まらなさを数字で扱う方法がそろいました。

次の第30章では、いよいよ要件だけが書かれた課題から、構成を自分で組み立てる演習をします。小さなブログ、予約サービス、動画の変換という3つの題材で、要件を読み、数字にし、困りごとを並べ、部品を選び、図にし、見直すまでを、順にたどります。

  • AWS でサービスを作る 29 ― 可用性と災害対策
  • 23 / 23
  • まとめ:止まってよい時間とデータを、先に数字で決める
  • 可用性
  • 99.9%=月に約43分。9 が1つ増えると許される時間は10分の1
  • 直列と並列
  • 直列は掛け算で下がり、並列(冗長化)で上がる
  • 単一障害点
  • 全員が通る1か所。2つにするか、待てる形にする
  • RPO / RTO
  • 失ってよいデータの幅 / 止まっていてよい時間
  • 4つの戦略
  • バックアップ → パイロットライト → ウォーム → マルチサイト
  • 練習
  • 戻したことのないバックアップは、無いのと同じ
  • ひらめき
  • 次の第30章では、ここまでの全部を使い、要件から構成を自分で組み立てる演習をする。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]