[アップデート] AWS FIS でディスク容量不足を発生させることが出来るようになったので、Amazon Linux 2023 と CloudWatch アラームで構築した簡単な監視・通知が機能しているか確認してみました

2023.05.19

いわさです。

AWS Fault Injection Simulator (FIS) を使うことで、AWS 上で様々な問題を再現させて、監視や復元性のテストを行うことが出来ます。
AWS FIS では定期的なアップデートによって、利用出来るアクションが増えていっていますが、先日のアップデートでディスクフィルアクションが追加されました。

これによって、特定の EC2 のディスク容量が不足した場合などのアプリケーションのパフォーマンスや回復性を確認することが出来るようになりました。

本日は基本的な使い方を確認しつつ、Amazon Linux 2023 上で実験を行って CloudWatch アラームが期待どおり動作しているか確認してみたいと思います。

AWS FIS のアクションタイプと SSM ドキュメントに AWSFIS-Run-Disk-Fill が追加された

FIS のアクションタイプを確認

今回のアップデートで次のように FIS の実験テンプレート作成時に「aws:ssm:send-command/AWSFIS-Run-Disk-Fill」が選択出来るようになりました。
カテゴリから推察出来ると思いますが、実態としては FIS を経由して SSM ドキュメントが実行され、EC2 上でディスク容量不足がシミュレートされるというものになっています。

ターゲットに指定するのは EC2 インスタンスです。
ここではリソース ID で直接指定していますが、通常どおりタグベースでの指定なども可能です。

実験テンプレート作成後、SSM ドキュメントを使うので SSM エージェント有効ですかーというメッセージが表示されています。
なお、このメッセージは有効でも表示されます。

SSM (AWS Systems Manager) ドキュメントを確認

今回のアップデートでは FIS のアクションが追加されていますが、そのアクションは実態としては SSM ドキュメントが実行されています。
そしてその SSM ドキュメントも今回のアップデートのタイミングで追加されたようです。

次の「AWSFIS-Run-Disk-Fill」です。

ドキュメント履歴を確認してみると、初版は 2023-04-27 に追加されていることが確認出来ます。

% aws ssm list-document-versions --name AWSFIS-Run-Disk-Fill
{
    "DocumentVersions": [
        {
            "Name": "AWSFIS-Run-Disk-Fill",
            "DocumentVersion": "6",
            "CreatedDate": "2023-05-18T23:12:19.968000+09:00",
            "IsDefaultVersion": true,
            "DocumentFormat": "YAML",
            "Status": "Active"
        },
        {
            "Name": "AWSFIS-Run-Disk-Fill",
            "DocumentVersion": "5",
            "CreatedDate": "2023-05-18T22:59:51.517000+09:00",
            "IsDefaultVersion": false,
            "DocumentFormat": "YAML",
            "Status": "Active"
        },
        {
            "Name": "AWSFIS-Run-Disk-Fill",
            "DocumentVersion": "4",
            "CreatedDate": "2023-05-18T22:12:41.547000+09:00",
            "IsDefaultVersion": false,
            "DocumentFormat": "YAML",
            "Status": "Active"
        },
        {
            "Name": "AWSFIS-Run-Disk-Fill",
            "DocumentVersion": "3",
            "CreatedDate": "2023-05-18T09:23:27.258000+09:00",
            "IsDefaultVersion": false,
            "DocumentFormat": "YAML",
            "Status": "Active"
        },
        {
            "Name": "AWSFIS-Run-Disk-Fill",
            "DocumentVersion": "2",
            "CreatedDate": "2023-05-18T07:08:54.067000+09:00",
            "IsDefaultVersion": false,
            "DocumentFormat": "YAML",
            "Status": "Active"
        },
        {
            "Name": "AWSFIS-Run-Disk-Fill",
            "DocumentVersion": "1",
            "CreatedDate": "2023-04-27T23:39:15.916000+09:00",
            "IsDefaultVersion": false,
            "DocumentFormat": "YAML",
            "Status": "Active"
        }
    ]
}

この記事では割愛しますが、SSM ドキュメントの中身を確認してみると、指定した容量を計算後に fallocate が使われていることがわかります。

Amazon Linux 2023 で試してみる

今回の SSM ドキュメントは Windows はサポート対象プラットフォームとなっていないようですが、Amazon Linux 2023 も対象になっていたので今回は Amazon Linux 2023 でディスク容量の監視設定を行い、FIS から実験を行った際に期待どおりアラームが動作するかを確認してみます。

上記のように EC2 インスタンスを作成します。
SSM が動作するように通信経路やインスタンスプロファイルに注意します。

CloudWatch エージェント

EC2 のディスク容量の監視は CloudWatch の標準メトリクスではサポートされていません。
そこで、対象の EC2 インスタンスに CloudWatch エージェントをインストールすることでディスクやメモリに関する追加のメトリクスにアクセスすることが出来るようになります。

Amazon Linux 2023 ですが、以下に従ってインストールします。

yum を dnf に置き換えただけです。SSM ドキュメントからのセットアップではなく、セッションマネージャーで手動でセットアップしています。
CloudWatch Logs 構成などは不要だったのでエージェント構成ファイルはデフォルトのままです。

[ec2-user@ip-172-31-39-74 bin]$ sudo dnf install amazon-cloudwatch-agent
Last metadata expiration check: 0:52:11 ago on Fri May 19 01:00:45 2023.
Dependencies resolved.
========================================================================================================================================================================================
 Package                                             Architecture                       Version                                           Repository                               Size
========================================================================================================================================================================================
Installing:
 amazon-cloudwatch-agent                             x86_64                             1.247358.0-1.amzn2023                             amazonlinux                              29 M

Transaction Summary
========================================================================================================================================================================================
Install  1 Package

Total download size: 29 M
Installed size: 129 M
Is this ok [y/N]: y
Downloading Packages:
amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64.rpm                                                                                                 41 MB/s |  29 MB     00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                    37 MB/s |  29 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                1/1
  Running scriptlet: amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64                                                                                                           1/1
create group cwagent, result: 0
create user cwagent, result: 0

  Installing       : amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64                                                                                                           1/1
  Running scriptlet: amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64                                                                                                           1/1
  Verifying        : amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64                                                                                                           1/1

Installed:
  amazon-cloudwatch-agent-1.247358.0-1.amzn2023.x86_64

Complete!

インストール出来たらエージェントを起動しておきます。

[ec2-user@ip-172-31-39-74 bin]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s
****** processing amazon-cloudwatch-agent ******
I! Trying to detect region from ec2 D! [EC2] Found active network interface Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/default.tmp
Start configuration validation...
2023/05/19 01:55:08 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/default.tmp ...
2023/05/19 01:55:08 I! Valid Json input schema.
I! Detecting run_as_user...
I! Trying to detect region from ec2
D! [EC2] Found active network interface
No csm configuration found.
No log configuration found.
Configuration validation first phase succeeded
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Configuration validation second phase succeeded
Configuration validation succeeded
amazon-cloudwatch-agent has already been stopped
Created symlink /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service → /etc/systemd/system/amazon-cloudwatch-agent.service.

CloudWatch アラーム設定

エージェントをインストール・起動するだけですが、次のように拡張したメトリクスが CloudWatch メトリクスとして取得出来ることが確認出来ました。

続いて CloudWatch アラームを作成します。
ここでは/disk_used_percentの 1 分間の平均値をターゲットにして、80 % を超えた場合にアラーム状態としたいと思います。

そこから色々な自動復旧アクションなども考えられますが、今回はシンプルに SNS トピックへ通知して E メールでメッセージを受信するだけにしたいと思います。

FIS アクションを実行

実験テンプレートでは先程のアクションを指定しつつ、SSM ドキュメントで定義されている必須パラメータDurationSecondsとオプションパラメータのPercentを指定しています。

実験を開始しました。後は待つだけです。

数分後、次のような E メールを受信しました。

CloudWatch アラームの詳細情報を確認してみると、静的閾値を超えて期待どおり設定したアクションを実行してくれていることが確認出来ました。

さいごに

本日は AWS FIS でディスク容量不足を発生させることが出来るようになったので使ってみました。
Amazon Linux 2023 でも期待どおり機能していることが確認出来ましたね。

以前に EBS の I/O 停止アクションが利用出来るようになり、そちらは完全に EBS へ組み込まれているアクションでしたが、今回は SSM ドキュメントタイプのものでしたね。

なお、公式アナウンスによると FIS が使用する SSM ドキュメントは全て Amazon Linux 2023 にも対応したそうなので、Amazon Linux 2023 でも AWS FIS を利用出来ますね。