AWS FISで実験のアクティビティログを保存できるようになったので試してみた

2022.03.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

AWS Fault Injection Simulator(FIS)では様々な実験を通して障害と意図的に発生させることが出来ます。

今回、実験アクティビティのロギング機能がサポートされましたので試してみました。

対応サービスと設定

本日時点でログ出力先として指定出来るのは、S3とCloudWatch Logsの2つです。
よって、FISの実行ロールには以下のログ出力権限が必要となります。

ポリシーが設定済みであれば実験テンプレートでログを有効化し、出力先を指定するだけです。
テンプレートを更新すれば既存の実験テンプレートでも有効化が出来ます。
ログ出力はデフォルトでは無効化になっており、新規でも既存でもテンプレートごとに有効化が必要です。

今回は、作成済みのS3バケットとCloudWatch Logsロググループを指定しました。

実験とログの確認

ここではシンプルにEC2を停止するだけの実験を作成します。

正常ログ

こちらは、1台のEC2をFISから問題なく停止させる場合のパターンです。

EC2を1台停止させるだけの実験なのですぐに完了します。

CloudWatch Logsから実験の開始から終了までの各アクティビティのログを確認します。
ログはJSON形式で出力されており、idが実験IDと紐付いている形です。log_typeとアクティビティの各フェーズが紐付いているのでどの段階で何が行ったのか確認しやすいです。

失敗ログ

失敗パターンも確認しておきます。
CI/CDパイプラインの失敗時の調査など、失敗時のほうが利用イメージはしやすいです。

2台のEC2インスタンスをターゲットとして指定し、1台は終了済みにさせておきます。

実験を開始してしばらくすると失敗で終了します。
マネジメントコンソールからはターゲットEC2が失敗出来なかったことが最終エラーとして確認出来ますね。ただし、どのステップで何が起きたのか、どこまで終了したのかなどはわからないです。

CloudWatchログを確認してみます。
ログを見てみると、action-startの前段階のtarget-resolutionで失敗していることがわかります。

さいごに

本日は単純なEC2インスタンスの停止のみの実験だったのでマネジメントコンソールから確認出来る程度の内容でしたが、複雑なステップで構成されている実験の場合はアクティビティごとの詳細ログを確認出来るとトラブルシューティングなど色々なシーンで活用出来そうです。

AWS FISは、最近ではAWS Resilience Hubとも統合されており、CI/CDパイプラインでも耐障害性確認のために利用されることがあります。
そういった中で実験の詳細な分析や監視を行うために、今後は保存したログの活用や分析を行うシーンも出てきそうですね。