[アップデート] AWS Resilience Hub のアセスメント内でオペレーションに関するレコメンデーション項目を任意で除外設定出来るようになりました

2023.08.28

いわさです。

AWS Resilience Hub にアプリケーションを統合することで、耐障害性に関する評価を実施したり推奨事項を得ることが出来ます。

評価ごとに回復力を示すスコア(Resiliency Score)が計算され、Security Hub などと同様にこのスコアを指標にしてワークロードの改善を行います。
これまでは対象のワークロードで Resilience Hub によってレコメンドされる項目が既に実装済みだったり、あるいは対象ワークロードの場合でも未対応の推奨事項は対応出来ていないものとしてスコアに反映されていました。

これが、先日のアップデートでオペレーションに関するレコメンデーションのアラーム、標準作業手順書、故障注入実験テンプレートについて個別に除外することが出来るようなりました。

これによってこれまで対応の必要性と耐障害性スコアに乖離が出やすかったのですが、対応不要なものを除外した上で正しいスコアを判断しやすくなりました。

レコメンデーション生成後に使える

まずは Resilience Hub から推奨事項を得る必要があるので、ワークロードが必要です。
今回は次の記事を参考にササッと耐障害性に問題のあるワークロードをデプロイします。

デプロイ後にワークロードの評価を実施します。

アセスメント結果からレコメンデーションを取得することが出来ました。
Resilience Hub のレコメンデーションは耐障害性に関するレコメンデーションとオペレーションに関するレコメンデーションの 2 つがあります。

アプリケーションのコンポーネントを選択した耐障害性ポリシーに準拠させるための推奨事項が前者で、後者は回復速度を向上させるための推奨事項です。
今回追加された推奨事項の除外機能は後者のオペレーションに関するレコメンデーションで利用することが出来ます。

除外してみる

アラームを例に試してみましょう。
推奨事項をいくつか選択し、アクションメニューから「選択したものを除外」を選択します。

「レコメンデーションを除外」ダイアログが表示され、除外の理由を選択することが出来ます。(理由選択せずに除外も可能)
「除外理由:その他」の場合は理由に関するメモを入力することも出来ます。

除外された推奨事項は「除外」件数としてカウントされます。
また、アイテムとしては状態が「Excluded」のものとなります。

なお、同様の手順で除外済みの項目を再びレコメンデーションに含めることが出来ます。

色々な除外理由を選択してみた

除外設定時には理由を設定することもしないことも出来ます。
設定した理由がどのように反映されるのかをマネジメントコンソールや AWS CLI を使って確認してみました。

除外ルールを設定する

4 つの推奨事項の除外ルールに「既に実装済み」を設定します。

2 つの推奨事項の除外ルールに「関係なし」を設定します。

1 つの推奨事項の除外ルールに「実装の複雑さ」を設定します。

4 つの推奨事項の除外ルールに「その他」として任意の文字列を設定します。

マネジメントコンソールからは除外されたかどうかのみ確認出来る

マネジメントコンソールでは、全て「除外」としては扱われているのですが、選択した理由を確認することが出来ませんでした。
状態ラベルなどでツールチップ表示などもされず、またこのリスト上に追加できる列もありませんでした。

AWS CLI であれば設定した理由が確認できるが...

前述の一覧画面と同様の情報は次の AWS CLI のコマンドで取得が出来ます。

上記ドキュメントを確認したところ、除外理由を取得することが出来そうです。試してみましょう。

% aws resiliencehub list-alarm-recommendations --assessment-arn arn:aws:resiliencehub:ap-northeast-1:123456789012:app-assessment/66477b42-d270-4f15-8825-5d036f8ea521 | jq -r '.alarmRecommendations[].items[] | [.resourceId, .excluded, .excludeReason] | @csv'
"ap-northeast-1",true,"AlreadyImplemented"
"arh-lab-workload-canarybucket-19rhr7ye27krv",true,"AlreadyImplemented"
"arh-la-ALBTa-UI7S07ZNZM9C",true,"AlreadyImplemented"
"arh-lab-workload-dbinstance-yyqoriltxjwg",true,"NotRelevant"
"arh-lab-bucket-7a4e83e0",true,"NotRelevant"
"arh-lab-bucket-7a4e83e0",true,"ComplexityOfImplementation"
"arh-lab-workload-canarybucket-19rhr7ye27krv",true,
"arh-lab-workload-dbinstance-yyqoriltxjwg",true,
"arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/arh-lab-ALB-16SA2NG41Z8GX/3009221a38ee3617",true,
"arh-lab-workload-dbinstance-yyqoriltxjwg",true,
"arh-la-ALBTa-UI7S07ZNZM9C",false,
"arh-lab-workload-dbinstance-yyqoriltxjwg",false,
"arh-lab-workload-AutoScalingGroup-94P3HUSIRKGI",false,
"nat-031a49559c9bfc457",false,
"arh-lab-workload-canarybucket-19rhr7ye27krv",false,
"arh-lab-bucket-7a4e83e0",false,
"arh-la-ALBTa-UI7S07ZNZM9C",false,
"arh-lab-workload-AutoScalingGroup-94P3HUSIRKGI",false,
"arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/arh-lab-ALB-16SA2NG41Z8GX/3009221a38ee3617",false,
"arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/arh-lab-ALB-16SA2NG41Z8GX/3009221a38ee3617",false,
"nat-031a49559c9bfc457",false,
"arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/arh-lab-ALB-16SA2NG41Z8GX/3009221a38ee3617",false,
"nat-031a49559c9bfc457",false,

excludeReasonに除外理由が設定されていますね。
どうやら次のように設定されているようです。

  • 既に実装済み:AlreadyImplemented
  • 関係なし:NotRelevant
  • 実装の複雑さ:ComplexityOfImplementation

「その他」の理由が取得出来ないようだ

ただし、上記結果を見て頂くとわかるのですが「その他」については理由が設定されていないということがわかりました。
除外対象であることがexcludedから確認は出来るのですが、excludeReasonに何も設定されていないですね。

不具合なのか仕様なのかわからないですが、不具合なのか仕様なのかわからないですが、その他以外の用意されているものから選択する形としたほうが情報が管理しやすくなりそうです。

さいごに

本日は AWS Resilience Hub のアセスメント内で、オペレーションに関するレコメンデーション項目を任意で除外設定出来るようになったので確認してみました。

Security Hub などでも抑制設定などすることがあると思いますが、同様に使うことが出来そうです。
本日時点での注意点としては耐障害性に関するレコメンデーションでは使用出来ないのと、「その他」を選択した際に内部的に値が保持されていないのか取得が出来なかったので取り扱い方法に注意したほうが良さそうです。