[アップデート] AWS FIS で S3 Express One Zone へのレジリエンステストが可能になりました

[アップデート] AWS FIS で S3 Express One Zone へのレジリエンステストが可能になりました

2025.08.30

はじめに

AWS FIS(Fault Injection Service)が S3 Express One Zone のレジリエンステストに対応しました。S3 Express One Zone は S3 に対して高速アクセスが必要なワークロード向けのストレージクラスです。今回のアップデートで AWS FIS を使用して AZ 障害時のアプリケーションの動作を事前に検証できます。

https://aws.amazon.com/jp/about-aws/whats-new/2025/08/amazon-s3-express-one-zone-supports-resilience-testing-aws-fault-injection-service/

アップデート概要

AWS FIS の aws:network:disrupt-connectivity アクションで S3 Express One Zone ディレクトリバケットへの接続を遮断できます。例えば事前に以下の様な検証が可能になりました。

  • アプリケーションのフェイルオーバー機構が正しく動作するか
  • リカバリプロセスが適切に機能するか
  • モニタリングシステムで S3 Express One Zone のアクセス障害を検知できるか

私のユースケース

AWS ParallelCluster でスポットインスタンスを利用する際の例を紹介します。スポット中断時、ローカルで生成した中間ファイルを退避させる仕組みを導入することがあります。その退避先として S3 Express One Zone を利用することがあります。目的は計算途中の中間ファイルを残すことで、計算処理を再開できるようにするためです。

jbybrlamtozsm8lyrlef.png

中間ファイルは多数の小さいファイルになってることもあり、中断するまでの 2 分間で全ファイルを退避しなければ意味がないです。このようなケースで S3 Express One Zone のディレクトリバケットが有効です。

https://dev.classmethod.jp/articles/spot-instance-data-rescue-strategy-for-parallelcluster/

検証環境

EC2 インスタンスから S3 Express One Zone ディレクトリバケットへアクセスする環境を用意しました。

FIS-S3express.png

動作確認

AWS CLI でファイルアップロードが正常に動作することを確認します。

# アップロード
$ aws s3 cp ./test-file-1mb.dat s3://mountpoint-for-s3--apne1-az4--x-s3/
upload: ./test-file-1mb.dat to s3://mountpoint-for-s3--apne1-az4--x-s3/test-file-1mb.dat

# ファイル確認
$ aws s3 ls s3://mountpoint-for-s3--apne1-az4--x-s3/ --recursive
2025-08-30 01:18:10    1048576 test-file-1mb.dat

boto3 を使用したスクリプトでも動作を確認します。

upload.py
#!/usr/bin/env python3

import boto3
import uuid
from datetime import datetime

# Configuration
BUCKET_NAME = 'mountpoint-for-s3--apne1-az4--x-s3'
FILE_PATH = 'test-file-1mb.dat'

# Generate random prefix
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
random_id = str(uuid.uuid4())[:8]
prefix = f"{timestamp}_{random_id}"

# Upload file
s3 = boto3.client('s3', region_name='ap-northeast-1')
s3_key = f"{prefix}/test-file-1mb.dat"

with open(FILE_PATH, 'rb') as f:
    s3.put_object(
        Bucket=BUCKET_NAME,
        Key=s3_key,
        Body=f,
        StorageClass='EXPRESS_ONEZONE'
    )

print(f"Uploaded: s3://{BUCKET_NAME}/{s3_key}")

どちらも正常にアップロードできています。

# アップロード
$ ./upload.py
Uploaded: s3://mountpoint-for-s3--apne1-az4--x-s3/20250830_012702_9a514a75/test-file-1mb.dat

# ファイル確認
$ aws s3 ls s3://mountpoint-for-s3--apne1-az4--x-s3/ --recursive
2025-08-30 01:27:02    1048576 20250830_012702_9a514a75/test-file-1mb.dat
2025-08-30 01:18:10    1048576 test-file-1mb.dat

AWS FIS 参考シナリオテンプレート

AWS FIS コンソールには「AZ の可用性:電源の中断」というシナリオが用意されています。このシナリオに S3 Express One Zone の障害が含まれたとのことです。中身を確認してみましょう。

AWS_FIS___ap-northeast-1-2.png

Pause-netowrk-connectivityアクション内に S3 Express One Zone の障害シミュレーションの設定がありました。

AWS_FIS___ap-northeast-1-4.png

公式ドキュメント

ドキュメントによれば、aws:network:disrupt-connectivityアクションは AZ 内のサブネットと S3 Express One Zone 間の接続を中断します。これによりデータプレーン API 操作がタイムアウトするとのことです。

Disrupt connectivity to S3 Express One Zone directory buckets
During an AZ power interruption, data stored in S3 Express One Zone directory buckets in the AZ is not accessible. AZ Availability: Power Interruption includes aws:network:disrupt-connectivity to disrupt connectivity between subnets and One Zone directory buckets in the affected AZ for the duration of the experiment, resulting in timeouts to Zonal endpoint data plane API operations. Use this action to test disruption when compute is co-located with storage in an AZ. This action targets subnets. By default, it targets subnets with a tag named AzImpairmentPower with a value of DisruptSubnet. You can add this tag to your subnets or replace the default tag with your own tag in the experiment template. By default, if no valid subnets are found this action will be skipped.
引用: AZ Availability: Power Interruption - AWS Fault Injection Service

FIS 実験テンプレートの作成してみた

AWS FIS で S3 Express One Zone への接続を遮断する実験を作成します。

実験テンプレートの設定

実験テンプレートの作成手順を説明します。

AWS_FIS___ap-northeast-1-5.png

設定項目は以下のとおりです。

  • アクション: aws:network:disrupt-connectivity
  • スコープ: S3 Express
  • ターゲット: サブネット(詳細設定は後述)

Cursor_と_AWS_FIS___ap-northeast-1.png

ターゲットに設定したサブネット設定を変更します。

AWS_FIS___ap-northeast-1-7.png

リソース ID 指定で検証用の EC2 インスタンスが起動するサブネット ID を選択しました。

AWS_FIS___ap-northeast-1-6.png

FIS 実験実行用の IAM ロールは新規作成しました。

AWS_FIS___ap-northeast-1-8.png

実験テンプレートの完成です。

AWS_FIS___ap-northeast-1-9.png

実験の実行と結果

作成した実験テンプレートから実験を開始します。

AWS_FIS___ap-northeast-1-10.png

実験が開始中はRunning表記です。

AWS_FIS___ap-northeast-1-11.png

指定した 5 分を経過すると完了しました。

AWS_FIS___ap-northeast-1_🔊.png

実験中の動作確認

実験中に S3 Express One Zone へのアクセスを試みます。

AWS CLI の場合

$ aws s3 cp ./test-file-1mb.dat s3://mountpoint-for-s3--apne1-az4--x-s3/
# 結果が返ってこない
# Ctrl+C で中断

次に Python スクリプトの場合

$ ./upload.py
# 結果が返ってこない
# 実験完了後に転送が成功
Uploaded: s3://mountpoint-for-s3--apne1-az4--x-s3/20250830_014328_04ba0f27/test-file-1mb.dat

実験中は S3 Express One Zone への接続できずプロンプトが返ってきませんでした。実験終了後は接続が復旧しリトライ処理によりファイルのアップロードが成功しました。

まとめ

AWS FIS による S3 Express One Zone のレジリエンステストで、AZ 障害時の挙動を検証できるようになりました。モニタリングシステムの検知テストや、フェイルオーバー機構を検証できます。復旧プロセスも実際の障害発生前に動作確認可能です。

S3 Express One Zone を利用したシステムの可用性向上にぜひ活用してください。

おわりに

Mountpoint for Amazon S3 には S3 Express One Zone をキャッシュとして利用する設定が用意されています。この設定のときの AZ 障害時の挙動を確認したいなとなりました。次回試してみます。

https://dev.classmethod.jp/articles/small-file-fast-mountpoint-s3-shared-cache/

参考

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.