概要
AWS Resilience Hub は、AWS 上のアプリケーションの耐障害性(レジリエンス)を定義・検証・追跡するためのマネージドサービスです。アプリケーションが目標とする復旧時間目標(RTO)と復旧時点目標(RPO)を満たせるかを評価し、改善のための推奨事項を提示します。
クラウド上でアプリケーションを運用する際、障害発生時にどの程度の時間で復旧できるか、どの時点までデータを復元できるかは重要な関心事です。Resilience Hub を使うことで、アプリケーションの構成を自動的に検出し、設定した耐障害性ポリシーに対してどの程度達成できているかを可視化できます。
本記事では、Resilience Hub にアプリケーションを登録し、耐障害性ポリシーを設定して評価を実行する手順を体験します。

クラウドおさる弊猿はこの記事で、CloudFormation のスタックを Resilience Hub に登録して、「このままで目標どおり復旧できるか」を採点してもらうでござる。障害が起きる前に弱点を知っておくのでござるよ。
この記事のメリット
- AWS Resilience Hub の基本概念と役割を理解できる
- RTO(復旧時間目標)と RPO(復旧時点目標)の考え方を把握できる
- マネジメントコンソールからアプリケーションを登録する手順を習得できる
- 耐障害性ポリシーの設定と評価の実行を体験できる
- 評価結果から推奨事項を確認し、改善ポイントを把握する方法を学べる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。


クラウドおさる



はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説
RTO と RPO とは



とひさん、Resilience Hub の話の前に、RTO と RPO という言葉がよく出てくるでござる。これは何でござるか?
いい質問だね。どちらも障害が起きたときの「目標」を表す指標なんだ。まずは表で整理してみよう。
| 指標 | 正式名称 | 説明 |
|---|---|---|
| RTO | Recovery Time Objective(復旧時間目標) | 障害発生からサービスが復旧するまでの目標時間 |
| RPO | Recovery Point Objective(復旧時点目標) | 障害発生時にどの時点までのデータを復元できるかの目標 |



うーむ、文字だけでは、弊猿の頭にはまだ絵が浮かばぬでござる……。
具体的な数字で考えるとわかりやすいよ。例えば RTO が 1 時間なら「障害が起きてから 1 時間以内にサービスを復旧する」っていう目標だし、RPO が 15 分なら「障害発生の 15 分前までのデータは復元できる」っていう目標なんだ。



なるほど、RTO は「どれだけ早く直すか」、RPO は「どこまでデータを戻せるか」でござるな。猿山のバナナ倉庫が崩れたら、何時間で倉庫を開け直すかが RTO、在庫帳をいつの時点まで戻せるかが RPO、というわけでござる。
そのとおり。この 2 つの指標が、Resilience Hub でアプリケーションの耐障害性を評価するときのベースになるんだよ。
AWS Resilience Hub の主な機能



では Resilience Hub は、具体的にどんなことができるのでござるか?
大きく 5 つの機能があるんだ。順番に紹介するね。
- アプリケーション構成の検出: CloudFormation スタック、Terraform State ファイル、リソースグループ、または EKS クラスターからアプリケーション構成を自動検出する
- 耐障害性ポリシーの定義: 障害タイプごとに RTO/RPO の目標値を設定する
- 耐障害性の評価: 現在の構成がポリシーを満たすかを評価し、結果をレポートする
- 推奨事項の提示: ポリシーを満たすための具体的な改善アクションを提案する
- ドリフト検出: アプリケーション構成の変更を検出し、耐障害性への影響を通知する



構成を自動で見つけ、評価し、改善点まで教えてくれるのでござるな。
そうなんだ。さらにドリフト検出っていう機能があって、構成が変わったときに耐障害性への影響を自動で通知してくれるから、継続的に監視できるのもポイントだよ。



一度評価して終わりではなく、変わったらまた知らせてくれるのでござるか。猿山の長老会も、誰かが勝手に見張り台を動かしたら、すぐ気づける仕組みが欲しいと言っておったでござる。
耐障害性ポリシー



さきほど「障害タイプごとに RTO/RPO を設定する」とおっしゃったでござるな。障害タイプには、どんな種類があるのでござる?
耐障害性ポリシーでは、4 つの障害タイプごとに目標を設定するんだ。ソフトウェア・ハードウェア・AZ の 3 つは必ず決めて、リージョンはマルチリージョンのアプリケーションのときに任意で足す形だよ。


| 障害タイプ | 説明 |
|---|---|
| ソフトウェア | アプリケーションソフトウェアの障害 |
| ハードウェア | 基盤インフラストラクチャのハードウェア障害 |
| AZ(アベイラビリティーゾーン) | 1つの AZ が利用不可になる障害 |
| リージョン | AWS リージョン全体が利用不可になる障害(設定は任意。マルチリージョンのアプリケーション向け) |



リージョン全体が落ちるところまで想定するのでござるか。猿山でいえば、倉庫ひとつでなく山ごと嵐にやられる話で、かなり大ごとでござるな。
そうだね。だからこそ障害の規模ごとに目標を分けて設定できるようになってるんだ。それと、Resilience Hub にはあらかじめ用意されたポリシーテンプレートがあるから、ゼロから設定しなくても大丈夫だよ。要件に合わせてカスタマイズもできるしね。



テンプレートがあるなら、弊猿でも始めやすそうでござる。
アプリケーションの入力ソース



Resilience Hub がアプリケーションの構成を検出する、という話でござったが、どこから情報を取ってくるのでござるか?
いくつかの入力ソースに対応しているんだ。以下の 5 つだよ。
- CloudFormation スタック: スタックで管理されているリソースを検出
- Terraform State ファイル: S3 に保存された State ファイルからリソースを検出
- リソースグループ: AWS Resource Groups で定義されたグループのリソースを検出
- myApplications: myApplications で定義したアプリケーション
- EKS クラスター: EKS で稼働するアプリケーションを検出



CloudFormation だけでなく、Terraform にも対応しているのでござるな。猿山の設計図が巻物でも石板でも、読み取ってくれるようなものでござる。
そうなんだ。Terraform の場合は S3 に保存された State ファイルを読み取る形になるよ。IaC で管理しているリソースなら、入力ソースとして指定するだけで構成を自動検出してくれるから便利なんだ。



では、今回の実践では CloudFormation スタックで試すのでござるな。楽しみでござる!
実践
前提条件
- リージョン:
ap-northeast-1(東京) - 以下のリソースが作成済みであること
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| CloudFormation スタック | resilience-hub-lab-stack | 評価対象(VPC・サブネット・セキュリティグループ・EC2 インスタンス 1 台を含む) |
| IAM ロール | resilience-hub-lab-role | Resilience Hub が評価に使うロール(信頼先 resiliencehub.amazonaws.com、AWS 管理ポリシー AWSResilienceHubAsssessmentExecutionPolicy をアタッチ) |
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| Resilience Hub アプリケーション | my-test-app | 評価対象アプリケーション |
| 耐障害性ポリシー | non-critical-policy | RTO/RPO の目標値定義 |
アプリケーションを登録する
- AWSマネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
Resilience Hubと入力し、表示された「AWS Resilience Hub」を選択します - トップページの「アプリケーションを追加」をクリックします。アプリケーション名・リソース・耐障害性ポリシー・IAM ロールを、1 つの「アプリケーションを追加」画面でまとめて設定します
- 「アプリケーション名」に
my-test-appと入力します - 「このアプリケーションの管理方法を選択」で「リソースコレクション」を選択します
- 「リソースコレクションを追加」で「CloudFormation スタック」を選択します


入力ソースを追加する
- 「スタックを選択」のドロップダウンを開き、
resilience-hub-lab-stackを選択します。選んだスタックが欄の下に表示されます


耐障害性ポリシーを設定する
- 「RTO と RPO を設定」セクションで「新しい耐障害性ポリシーを作成」を選択します
- 「名前」に
non-critical-policyと入力します - 「RTO/RPO ターゲット」は、デフォルト値(RTO
4時間、RPO1時間)のままにします。この値が、インフラストラクチャ・アベイラビリティーゾーン・リージョンの各障害タイプに適用されます。「その他の推奨値を表示します。」から、用途に合わせたほかの推奨値も確認できます


- 「アクセス許可」セクションで「IAM ロールを使用」を選択し、
resilience-hub-lab-roleを選択します。「現在の IAM ユーザーのアクセス許可を使用」のままでは、ロールの選択を求めるエラーで先に進めません - その他の項目はデフォルトのままにして、ページ下部の「アプリケーションを追加」をクリックします
アプリケーションを発行する
- アプリケーションの詳細画面が表示されます。スタックのリソースは自動でインポートされ、「アプリケーション構造」タブの「リソース」に EC2 インスタンスが「評価可能」として表示されます
- 評価の前にアプリケーションを発行する必要があります。「ワークフロー」の「アプリケーションを発行」をクリックします。発行すると、ドラフトとは別に
Version-1が作られます





ここまでで、スタックからリソースを取り込み、耐障害性ポリシーをひも付けて、発行まで済ませたでござる。評価の土台がそろったのでござるな。
耐障害性の評価を実行する
- 「ワークフロー」の「アプリケーションを評価」をクリックします
- レポート名の入力ダイアログが表示されます。名前は自動で入っているので、そのまま「実行」をクリックします
- 「評価」タブに評価レポートが追加され、ステータスが「進行中」になります。今回は 1 分ほどで「成功」に変わりました


評価結果を確認する
- 評価レポートの名前をクリックして詳細を開きます
- レポート名の横に、ポリシーを満たしているかどうかが表示されます。今回は「ポリシーに合致」でした。満たしていない場合は、ポリシー違反として表示されます
- 「結果」タブでは、RTO と RPO それぞれについて、中断タイプ(アプリケーション・インフラストラクチャ・アベイラビリティーゾーン・リージョン)ごとに、ポリシーのターゲットと、現在の構成から推定した値が並びます


- 「耐障害性に関するレコメンデーション」タブを選択します。AppComponent ごとに、現在の構成と、耐障害性を高める構成の案(オプション)が、推定 RTO/RPO や追加費用の目安とあわせて表示されます





評価結果は、ポリシーを満たしているかどうかと、中断タイプごとの推定値で出てくるでござる。満たしていなければレコメンデーションを見て構成を直し、もう一度評価する、この繰り返しでござるよ。
まとめ
- AWS Resilience Hub はアプリケーションの耐障害性を評価・追跡するマネージドサービス
- RTO(復旧時間目標)と RPO(復旧時点目標)を障害タイプごとに定義できる
- CloudFormation スタックや Terraform State ファイルからアプリケーション構成を自動検出する
- 耐障害性ポリシーに対する準拠状況を評価し、改善のための推奨事項を提示する
- 事前定義されたポリシーテンプレート(MissionCritical、NonCritical など)を活用でき、カスタマイズも可能
- 構成変更のドリフト検出により、耐障害性の継続的な監視が可能
参照先
- AWS Resilience Hub とは
- AWS Resilience Hub の概念
- Resilience Hub でのアプリケーションの作成
- 耐障害性ポリシーの定義
- このアプリケーションの管理方法を選択
- 耐障害性の評価の実行














