[アップデート] AWS Resilience Hub が Terraform, ECS などを追加サポート

Terraform S3のStateファイルで耐障害性を評価できるようになった!
2022.06.30

ちゃだいん(@chazuke4649)です。

少し前のアップデートになりますが、

AWS Resilience Hub が Terraform,Amazon ECS,Route53,AWS Elastic Disaster Recovery、AWS Backupのサポートを追加しました!

AWS Resilience Hub が Terraform、Amazon ECS、および追加サービスのサポートを追加

AWS Resilience Hub は、Amazon Elastic Container Service (Amazon ECS)、Amazon Route 53、AWS Elastic Disaster Recovery、AWS Backup、および Terraform をソースとしてアプリケーションをアップロードする機能をサポートするようになりました。このように対応リソースを拡大することで、Resilience Hub を利用して、より多くのアプリケーションを障害に備え、保護することができます。

上記以外にも下記アップデートが含まれています。

  • アプリケーションのレジリエンススコアの算出方法を更新
  • 新しいアプリケーションに対して自動的に日次評価を実行するようになった

新たにサポートされたサービスに加え、アプリケーションのレジリエンススコアの算出方法も更新されました。新しいレジリエンススコアには、運用上のレコメンデーションとポリシーのコンプライアンスの併用が反映されています。これにより、さまざまな混乱シナリオに対するアプリケーションの準備状況を、より包括的に示すことができます。

また、Resilience Hub は、新しいアプリケーションに対して自動的に日次評価を実行するようになりました。既存のアプリケーションでこの機能を手動で有効にし、いつでもこの機能を無効にすることができます。

上記URLに記載の Resilience Hub の概要説明は以下です。

Resilience Hub は、アプリケーションのレジリエンスを定義、検証、追跡するための単一の場所を提供し、ソフトウェア、インフラストラクチャ、または運用の中断による不要なダウンタイムを回避できるようにします。レジリエンスとは、目標復旧時間 (RTO) および目標復旧時点 (RPO) で測定される、指定されたターゲット内で可用性を維持し、障害から回復するアプリケーションの能力のことです。Resilience Hub を使用すれば、本番環境で問題が発生する前に問題を特定し、解決することができます。

そもそも Resilience Hub とは?

一言で言うと、「Security Hub のレジリエンス(耐障害性)版」と言えるでしょう。
re:Invent2021で発表された新サービスであり、RTO・RPOを中心とした耐障害性に対するポリシーを定義し、評価対象のリソースの構成・設定がそれら基準を満たしているかどうか、評価してくれるツールです。

詳細は、以下参考URLをどうぞ。

リリース時の公式ブログです。

AWS Resilience Hub でアプリケーションのレジリエンスを測定、改善 | Amazon Web Services ブログ

最近の公式ブログで、CI/CDパイプラインにResilience Hubを組み込み、継続的な耐障害性の評価方法を紹介しています。

Continually assessing application resilience with AWS Resilience Hub and AWS CodePipeline | AWS Architecture Blog

公式ドキュメントです。

What is AWS Resilience Hub? - AWS Resilience Hub

弊社ブログです。まだ数は少ないですがやってみたブログもあります。

AWS Resilience Hub の記事一覧 | DevelopersIO

何が嬉しい?

今までResilience Hubの検出対象である「アプリケーション構造」は以下のみでした。

  • CloudFormation スタック(SAM,CDK含む)
  • Resource Groups タグ
  • Service Catalog AppRegistry

今回のアップデートでTerraform S3Backend stateファイルが含まれました!

また、上記「アプリケーション構造」から検出するAWSリソースに ECS も加わりました!

この辺を今回試してみたいと思います。

やってみた

前提

  • Terraformで構築したAWSリソース一式
  • S3バックエンドとして保存されているstateファイル

手順

  1. Resilience Hub に登録する
  2. Resilience Hub で評価する

参考情報

Add an application to AWS Resilience Hub - AWS Resilience Hub

※ほぼ同じ趣旨の公式動画もありました。

1. Resilience Hubに登録する

Resilience Hubのコンソールを開き、Add Applicationに進みます。

Application AtructureにてAWSリソースを検出する対象(アプリケーション構造)を指定します。 ここに今回のアップデートである Terraform state files が追加されているので、これを選択します。

  • stateファイルは最大5つまで
  • 1つのファイルは最大4MGまで

S3コンソールのS3 URIをコピーして貼り付けます。

Resilience Hubでは評価するシステム一式をAppliationと呼びますが、そのリソースの名称を TestTerraformApp と指定します。

Scheduled assessmentの有効化が可能ですが、今回は本筋ではないため一旦無効で進めます。

次に進むと、指定したS3 stateファイルをスキャンし、Resilience HubのサポートしているAWSリソースを自動で検出してくれます。

検出に成功し、AWSリソース一覧が表示されました。
Logical ID列には、Terraformのresource名が列挙され、Physical IDでどのAWSサービスか概ね判定できそうです。
ちなみに今回は以下のようなAWSリソースとなります。

  • api: ECSタスク
  • cache: ECSタスク
  • rds: RDSインスタンス
  • origin: S3バケット
  • ec2-01: EC2インスタンス
  • nat-1a: NATGW

これら全てを評価対象としてチェックを入れ、次に進みます。

Create resiliency policy のセクションでは、主にRTO・RPOなどの耐障害性に対する指標を決めます。
カスタムで一から指定も可能ですが、今回はデフォルトで用意されているサンプルパターンから、Important Applicationを選択します。

ポリシーの設定が完了したら、最終確認を行い、Publishします。

これで登録は完了です。

2. Resilience Hubで評価する

登録が完了すると、次はAssess Resiliencyを実行します。

しばらくすると評価が完了します。評価の処理は成功し、コンプライアンスのステータスとしては、Policy breached(ポリシー違反)と表示されました。

詳細を開き、Resultsのタブは以下の通りです。RTOのApplicationとAvailability zoneの箇所、RPOのApplicationの箇所と合計3ヶ所にて unrecoverableと表示されています。

各カテゴリーのトグルを開くと以下の通り表示されました。

Resiliency recommendationsタブを開き、問題があったリソースを確認していきます。

まず、1つ目はNATGWでした。推奨事項の要点としては「シングルAZ構成だとAvailability ZoneのTargeted RTO 2d を満たせないので、NATGWのマルチAZ構成を推奨する」とのことです。

2つ目はS3バケットでした。推奨事項の要点としては「S3バケットのバージョニングが無効だと、Targeted RTO 2dと Targeted RPO 4h を満たせないので、バージョニングの有効化を推奨する」とのことです。

とりいそぎ今回の目的であるTerraformとECSのサポートは確認できたので今回は以上とし、具体的な内容は改めて調査していきたいと思います。

終わりに

AWS Reslilience Hub にて Terraform stateファイルからリソースの検出が可能となり、評価リソースにECSが追加されました。システムの耐障害性を最もポピュラーな指標であるRTO/RPOでわかりやすく、かつ、簡単に評価できるようになったのは画期的です。今後主力サービスの仲間入りするポテンシャルを十分に秘めていますね。興味ある方は簡単なのでぜひ触ってみてください。

それではこの辺で。ちゃだいん(@chazuke4649)でした。