Amazon Web Services ブログ
AWS Resilience Hub を使用して耐障害性ドリフトを検出する
多くの場合ディザスタリカバリは大きなイベントからアプリケーションを保護するメカニズムだと考えられています。しかしコードやインフラストラクチャが月に数回更新されるようなペースの速い開発では、アプリケーションの耐障害性体制への影響をプロアクティブに理解するメカニズムを導入することが重要です。
本記事では最近 AWS Resilience Hub に導入された耐障害性ドリフト検出を使用してアプリケーションの耐障害性体制の潜在的な変化を特定し、ドリフトの原因となった問題を解決する方法を説明します。アプリケーションの耐障害性とは可用性を維持し目標値内でソフトウェアやオペレーションの中断から回復する能力です。これらは一般的に目標復旧時間 (RTO) またはダウンタイムと、目標復旧時点 (RPO) またはデータ損失の観点で測定されます。耐障害性ドリフト検出を有効化する重要性、設定例、結果の読み方について説明します。
AWS Resilience Hub と 耐障害性ドリフト検出とは ?
AWS Resilience Hub は AWS アプリケーションの耐障害性を定義、検証、追跡するための単一の場所を提供するマネージドサービスです。AWS Resilience Hub は、アプリケーションへ意図的に障害を注入してその応答を確認できる AWS Fault Injection Service (FIS) と統合されています。AWS Resilience Hub を使ってアプリケーションを評価することで、アーキテクチャの耐障害性を高められる余地を明らかにします。これによりアプリケーションの RTO と RPO を検証して復旧コストを削減しながら事業継続性を最適化できます。AWS Resilience Hub は評価とテストのための API を提供しているため、これらを CI/CD パイプラインに組み込むことで継続的な耐障害性の検証が可能になります。
2023年8月2日、AWS Resilience Hub の新機能 耐障害性のドリフト検出 をリリースしました。耐障害性ドリフト検出を使用すると AWS 上のアプリケーションの耐障害性体制の変化に対してプロアクティブな検出と対処が可能になります。耐障害性ドリフト検出を有効化するとアプリケーションが耐障害性ポリシーに違反した (つまり RTO/RPO を満たさない) 場合に通知されます。またドリフトを検出した最新の耐障害性評価に誘導されて是正アクションが提供されます。
ソリューションの全体像
耐障害性ドリフト検出が提供するソリューションを例を使って説明します。この例では次の手順を実施します。 1. アプリケーションを定義する、2. 耐障害性ポリシーを定義する、3. 耐障害性ドリフト検出を有効にする、4. 耐障害性を評価する、5. 最後の安定状態からの耐障害性ドリフトを検出する。以下の例では 評価結果を AWS コンソールで表示し、ドリフト検出をコンソールとCLIの両方で示します。
アプリケーション
まず アプリケーションを AWS Resilience Hub に追加 します。アプリケーションは AWS リソースの集合です。リソースは複数の AWS リージョンに配置することもでき、複数の AWS アカウントにプロビジョニングすることもできます。AWS 上のアプリケーションは AWS CloudFormation、AWS Resource Groups、HashiCorp Terraform、AWS AppRegistry、または AWS Elastic Kubernetes Service (EKS) を使って記述できます。
次の図はこのブログで使用するアプリケーション (eコマースのウェブサイト) です。
Figure 1 – 本ブログで使用するAWS上のアプリケーションのアーキテクチャ
ステップ 1 – AWS Resilience Hub でアプリケーションを定義する
AWS Resilience Hub のコンソールページ で「アプリケーションを追加」をクリックします。
この例では AWS CloudFormation スタックとして定義したアプリケーションを使用します。サンプルアプリケーションに ‘DriftBlogDemoApplication’ という名前を付け CloudFormation スタック を選択します。
Figure 2 – AWS Resilience Hub でアプリケーションを定義
ステップ 2 – 耐障害性ポリシーを選択して権限を設定する
次にアプリケーションの耐障害性ポリシー (RTO と RPO) を選択します。RTO と RPO の設定について詳しくは当社のブログ Establishing RPO and RTO Targets for Cloud Applications をご覧ください。アプリケーションの耐障害性を評価できるように AWS Resilience Hub に適切なアクセス許可を設定します。
AWS Resilience Hub で耐障害性の評価 (以下のステップ 4) を実行すると、アプリケーションが耐障害性ポリシーに合致しているか違反しているかがわかります。’ポリシーに合致’ とはアプリケーションが推定ワークロード RTO/RPO 内で回復するように設定されていると AWS Resilience Hub が評価していることを示しています。 ‘ポリシー違反’ はその逆です。
AWS Resilience Hub では4つの異なる中断タイプごとに推定ワークロード RTO/RPO を提供します。4つの中断とはアプリケーション (要求されたソフトウェアサービスやプロセスの損失)、インフラストラクチャ (Amazon EC2 インスタンスなどハードウェアの損失)、アベイラビリティーゾーン (1つ以上のアベイラビリティーゾーンが利用不可)、リージョン (1つ以上のリージョンが利用不可) です。アプリケーションがポリシーを満たすためには全ての中断タイプで目標 RTO/RPO を満たしている必要があります(耐障害性ポリシーの管理を参照してください)。
この例ではソフトウェア、インフラストラクチャ、およびアベイラビリティーゾーンの中断について耐障害性ポリシーを RTO 1時間、RPO 1時間に設定しています。サンプルアプリケーションは単一リージョンにデプロイされているためリージョンの中断に対するポリシーは設定していません。
注: AWS Resilience Hub はアプリケーションが耐障害性ポリシーを満たすかどうかを示すだけでなく、耐障害性に関するレコメンデーション (e.g. AWS リソースの設定変更) とオペレーションに関するレコメンデーション (e.g. Amazon CloudWatch alarms、 AWS Fault Injection Service experiments、復旧のための標準作業手順) を生成します。レコメンデーションの目的はアプリケーションの耐障害性を高めて ‘ポリシー違反’ 状態から ‘ポリシーに合致’ 状態への改善を支援することです。
AWS Resilience Hub の耐障害性に関するレコメンデーションとオペレーションに関するレコメンデーションの詳細については ‘評価レポートの確認‘ をご覧ください。
Figure 3 – AWS Resilience Hub で耐障害性ポリシーをセットアップ
ステップ 3 – 耐障害性ドリフト検出を有効にする
Figure 4 に示すように ‘毎日自動的に評価’ と ‘レジリエンシーポリシー違反があれば通知を受ける’ の両方を選択して耐障害性ドリフト検出を有効にします。AWS Resilience Hub の耐障害性評価は24時間ごとに実行され、評価結果が ‘ポリシーに合致’ から ‘ポリシー違反’ に変わった場合に通知されます。
耐障害性ドリフト検出では Amazon Simple Notification Service (Amazon SNS) トピックを使用して、潜在的なドリフトを通知します (つまりメール通知 や Amazon Lambda 関数のトリガーを受け取ります)。そのため Amazon SNS トピックを作成し AWS Resilience Hub からパブリッシュする権限を設定します。
Figure 4 – AWS Resilience Hub で耐障害性ドリフト検出を設定
ステップ 4 – アプリケーションを発行して評価する
耐障害性ドリフト検出が有効になったらアプリケーションを発行し、評価したい全てのアプリケーションリソースを含めたか除外されているかを確認できます。サポートされている AWS リソースの完全なリストはこちらをご覧ください。 https://docs.thinkwithwp.com/ja_jp/resilience-hub/latest/userguide/supported-resources.html
Figure 5 – AWS Resilience Hub でアプリケーションの発行
次に耐障害性評価を実行します。結果を表示するには ‘評価’ タブにある評価名をクリックします。
ここから先このブログでは AWS コンソールと CLI の両ユーザー向けに例を提示します。AWS Resilience Hub の使用方法の詳細については API ガイドをご覧ください。https://docs.thinkwithwp.com/resilience-hub/latest/userguide/using-api.html
CLI ユーザーの場合 list-apps API と list-app-assessment API を実行すると次の出力が生成され、耐障害性ドリフトの状態が ‘Not drifted’ であることが分かります。
Figure 6 – 耐障害性ドリフトが検出されていないことを示す list-apps API の CLI 出力
ステップ 5 – 評価結果を確認してレコメンデーションを実装する
上で述べた通り AWS Resilience Hub の耐障害性評価ではアプリケーションが耐障害性ポリシーを満たしているかどうかが示されます。この例では推定ワークロード RTO が 30分、RPO が 1時間で、耐障害性ポリシーの RTO 1時間と RPO 1時間を満たしています。
Figure 7 – AWS Resilience Hub の耐障害性評価の結果はアプリケーションが耐障害性ポリシーを満たしていることを示している
CLI ユーザーは list-app-component-compliances API と list-app-component-recommendations API を使用して、ドリフト検出を示すメッセージが返されていないことを確認します。
Figure 8 – list-app-component-compliance API の CLI 出力結果は耐障害性ポリシーを満たしていることを示している
ステップ 6 – ドリフトの検出と調整
耐障害性ドリフト検出が有効になっている場合 (上記のステップ3を参照)、検出された ‘コンプライアンスステータス’ の状態変更 (‘ポリシーに合致’ から ‘ポリシー違反’ に変更) はアプリケーション状態の中で警告され、選択した SNS トピックへパブリッシュされます。
Figure 9 – AWS Resilience Hub はアプリケーションが耐障害性ポリシーからドリフトしていることを示す
CLI の場合 list-app-assessments API は以下の結果を返し、ドリフトが検出されたことを示しています。
Figure 10 – list-app-assessments API の CLI 出力は耐障害性のドリフトが検出されたことを示している
この例では Amazon Elastic Block Storage (EBS) のバックアップスケジュールが変更されたため、推定 RPO が 1時間から 2時間に変わっていました。
Figure 11 – AWS Resilience Hub の耐障害性評価は EBS バックアップスケジュールが耐障害性のドリフトを引き起こしたことを示している
list-app-component-compliances API は以下を出力し、耐障害性ポリシーに違反していることを示しています。
Figure 12 – list-app-component-compliances API の CLI 出力は 耐障害性ポリシーに違反していることを示している
そして list-app-assessment-compliance-drifts は各コンポーネント (例では EBS ボリューム) に対して RTO と RPO の期待する値と実際の値を示します。
Figure 13 – EBS ボリュームがドリフトの原因であることを示す list-app-assessment-compliance-drifts API の CLI 結果
さらに AWS Resilience Hub は アプリケーションを更新して ‘ポリシーに合致’ 状態に戻すのに役立つ耐障害性に関するレコメンデーションを生成します。この例では最小限の変更、コスト最適化、アベイラビリティーゾーン RTO/RPO に最適化した EBS ボリュームの変更方法が示されています。
Figure 14 – AWS Resilience Hub の耐障害性評価によりアプリケーションを ‘ポリシーに合致’ 状態に戻すためのレコメンデーションが生成されました
CLI ユーザーの場合 list-app-component-recommendations API を呼び出すと EBS ボリュームに関して推奨される修正方法が提示されます。この場合は “定義した RPO 目標を満たすように EBS ボリュームに関連付けられている AWS バックアッププランの頻度を変更してください” です。
要約
このブログでは AWS Resilience Hub の新機能である耐障害性ドリフト検出について紹介しました。耐障害性ドリフト検出により、アプリケーションの耐障害性体制に影響を与え、耐障害性ポリシーに違反する (RTO と RPO を満たさない) 可能性のあるアプリケーションの構成変更を特定してアラートを受け取ることができます。AWS コンソール と CLI を通して耐障害性ドリフト検出を有効にする方法とその使い方を紹介しました。
デフォルトでは耐障害性ドリフト検出は毎日または耐障害性評価を行うたびに実行されます。また 評価をCI/CD パイプラインに統合 することもできます。耐障害性ドリフト検出はアプリケーションの耐障害性体制の変化を検出します。ドリフトの修正に役立つように AWS Resilience Hub は耐障害性とオペレーションに関するレコメンデーションを生成します。
開始するには、次のURLにアクセスしてください
https://thinkwithwp.com/resilience-hub
本記事は 2024年3月12日に “AWS Cloud Operations & Migrations Blog” で公開された “Identifying resilience drift using AWS Resilience Hub” を翻訳したものです。翻訳はソリューションアーキテクトの三好史隆が担当しました。