こんにちは、AWS チームの尾谷です。
昨日は、Amazon EFS のスループットモードの特徴と選び方などをまとめて ブログにまとめました 。今日は、バーストスループットモードとプロビジョンドスループットモードを AWS Lambda を使って自動で切り替える仕組みを考察しましたので、アウトプットします。
手動でモードを変更する
Lambda をコーディングする前に、手動によるモード変更のオペレーションと挙動を確認しておきます。
Elastic Throughput モードからバーストモードに変更
- EFS の [編集] ボタンをクリックし、スループットモードを [○ 拡張] から、
- [○ バースト] に変更しました。[変更を保存] ボタンをクリックすると、
- 数秒でスループットモードがバーストに変更されました。
バーストモードからプロビジョンドモードに変更
- バーストからプロビジョンドへの変更も試しておきました。[○ 拡張] を選択して、[○ プロビジョニング済み]、15MiB/秒 に変更しました。こちらも即時変更されました。
プロビジョンドモードからバーストモードに変更
- 最後に、プロビジョンドモードに変更した直後に、さらにバーストモードに変更しようとしたらエラーになりました。
昨日のブログにも記載しましたが変更回数に制限があります。
変更は即時可能ですが、一度プロビジョンドモードにすると次の変更まで 24 時間の間隔が必要です。
https://repost.aws/ja/knowledge-center/efs-max-throughput-mode-changes
Lambda でモードを変更する
挙動が確認できたので、手動の変更作業を Lambda で再現します。
- arm64 で Lambda 関数を作成しました。
- まずは、バースト → プロビジョンドのテストから。
- エラーなく実行できました。
- EFS がバーストから、プロビジョニング済み (15 MiB/秒) に変わりました。
- 次は、プロビジョンド → バーストのテスト。
- 24 時間の間隔をあけておらず、[TooManyRequests] エラーになりました。
CloudWatch アラームで Lambda をトリガー
Lambda の単体検証が終わったので、次は CloudWatch アラームを設定してみます。
SNS トピックの作成
Lambda トリガーに利用する SNS トピックから作成しました。
- スタンダードトピックで、任意の名前をつけてトピックを作成しました。
- [サブスクリプションの作成] ボタンをクリックし、
- Lambda の ARN を指定して、サブスクリプションを作成しました。
CloudWatch Alarm の設定
- CloudWatch Alarm は 5 分の最小を指定して、100,000,000,000 以下になったらトリガーするアラームを設定しました。
- アラームのトリガーのみを設定します。
- 復旧は、2,100,000,000,000 以下になったらというしきい値で、OK のみトリガーを設定しました。
- 以下のような形です。
Lambda 関数を作成
Lambda は以下のようにコーディングしました。
import boto3 import os client = boto3.client('efs') def lambda_handler(event, context): burst_on = False privisioned_on = False try: burst_on = 'OK' in event.get('Records')[0].get('Sns').get('Subject') privisioned_on = 'ALARM' in event.get('Records')[0].get('Sns').get('Subject') except: print('ERROR') return if burst_on: response = client.update_file_system( FileSystemId = os.environ['AMAZONEFS_FILESYSTEM_ID'], ThroughputMode='bursting' ) elif privisioned_on: response = client.update_file_system( FileSystemId = os.environ['AMAZONEFS_FILESYSTEM_ID'], ThroughputMode='provisioned', ProvisionedThroughputInMibps=15.0 )
EFS のファイルシステム ID は環境変数に入れました。
動作確認
最後に試験を行います。
- 100 GiB というしきい値は、再現させるのに時間がかかるため、OK: 2,200,000,000,000 と ALARM: 2,180,000,000,000 で試してみます。
- 現在、バーストモードですが、
- 昨日のブログ で作ったループ Shell スクリプトを実行すると、
- 開始 2 分程度でスループット利用率の上昇が確認でき
- アラーム状態になると、プロビジョンドスループットに変わりました。
まとめ
いかがでしたでしょうか。
Amazon EFS はフルマネージドなストレージサービスで、利用することに専念できる素晴らしいサービスです。
一方で、しっかり理解しないと高額請求になったり、パフォーマンスが落ちるなど落とし穴がたくさんある印象です。
昨日のブログ と本ブログが、ファイルサーバー運用の参考になれば幸いです。
ありがとうございました。