Amazon Web Services ブログ

Amazon EventBridge と AWS Lambda を使用して Amazon FSx ファイルシステムのステータスを監視する

このブログは 2022 年 12 月 12 日に Bill Pfeiffer(Sr. Solutions Architect)によって執筆された内容を日本語化したものです。原文はこちらを参照してください。

マネージドサービスを利用しているストレージ管理者は、リソースの健全性を監視し、注意や介入を必要とするリソースの健全性やアクセス性の変化を検出する方法を必要としています。大量のリソースを管理する管理者にとって、この監視は効率的かつスケーラブルで、アラートが適切なチームに適切な優先順位でルーティングされることで、ビジネスへの影響を防ぐ必要があります。

Amazon FSx を使用すると、機能豊富で高性能なクラウドのファイルシステムを簡単かつ費用対効果の高い方法で作成、実行、スケールすることができます。Amazon FSx のすべてのファイルシステムには、管理者がファイルシステムのステータスを可視化できるネイティブのモニタリング機能とロギング機能が備わっています。重要な健全性の指標の 1 つは、ファイルシステムのライフサイクルステータスです。このステータスは Amazon FSx コンソール、または AWS CLI よりクエリすることで確認できます。ただし、一部のお客様は、多数のファイルシステムのステータスを効率的に監視し、ファイルシステムのステータスの変化に基づいて通知またはルールを設定する必要があります。

このブログでは、ファイルシステムのステータス変更に関する通知を設定して、任意の数の Amazon FSx ファイルシステムのステータスを効率的に監視するための手順とコードを提供します。このソリューションにより、ファイルシステムが正常に機能していないかどうかを迅速に検出して対策を講じることができるため、事業継続性を確保できます。

Monitoring the health of Amazon FSx with Amazon EventBridge

図 1 : Amazon EventBridge と AWS Lambda を使用して Amazon FSx ファイルシステムのステータスを監視

各コンポーネントがどのように構成されているかを確認できるように手動での実装について説明しますが、簡単にデプロイができるように、記事の最後に 2 つの自動化ソリューションについても説明します。

ワークフロー

Amazon FSx ファイルシステムで広く利用されている 4 つのタイプ:Windows File Server、Lustre、NetApp ONTAP、OpenZFS から選択できます。使用するファイルシステムタイプは、特定のファイルシステムに精通しているか、機能セットや、パフォーマンスプロファイル、データ管理機能がワークロードの要件にマッチしているかで選択してください。(本ソリューションでは FSx for NetApp ONTAP のストレージ仮想マシンのステータスは評価されないので、ご注意ください)

本ソリューションでは、Amazon FSx for Windows File Server を使用します。Lambda 関数を使用して、定義したスケジュールで FSx API へクエリを実行し、特定のリージョンでプロビジョニングされた Amazon FSx ファイルシステムのステータスを評価し、自分宛にメール通知を送信します。このソリューションは以下のサービスを使用します。

  • Amazon FSx for Windows File Server
  • Amazon SNS
  • AWS Lambda
  • Amazon EventBridge
  • IAM

ソリューションを実装するワークフローは以下のとおりです。

  1. Amazon SNS トピックと、E メールのサブスクリプションを作成する
  2. AWS Lambda 実行ロールを作成し、FSx のステータスをクエリするためのカスタムポリシーをアタッチする
  3. Python コードを実行するための AWS Lambda 関数を作成する
  4. Amazon SNS トピックのサブスクリプションを確認する
  5. Amazon EventBridge ルールを作成する
  6. Lambda 関数を手動で実行して、ステータス通知の配信をトリガーする

1. Amazon SNS トピックと、E メールのサブスクリプションを作成する

Amazon Simple Notification Service(SNS)は、フルマネージドのメッセージングサービスです。SNS を使用して、Lambda 関数の出力をキャプチャし、ファイルシステムのステータスに基づいて、運用チームにメッセージを送信します。この設計では、通知メカニズムとして E メールを利用しますが、SNS を使用するため、事実上あらゆるプラットフォームと統合することができます。

  1. AWS マネジメントコンソールにログインし、SNS コンソール を参照します。
  2. 左側のパネルを展開し、トピックを選択します。
  3. トピックの作成を選択します。
  4. タイプはスタンダードで設定します。
  5. 名前と表示名は fsx-health で設定します。
  6. トピックの作成を選択します。

次に、SNS サブスクリプションを作成します。SNS サブスクリプションは汎用性があり、あなたの組織は Amazon FSx ファイルシステムの健全性ステータスを以下のような様々なダウンストリームサービスへ連携し、組織へ通知させることができます。

  • SMS
  • Amazon Kinesis Data Firehose
  • AWS Lambda
  • AWS Chatbot

トピックのサブスクリプションを設定するために、以下の手順を実行してください。

  1. コンソールで fsx-health トピックを選択します。
  2. サブスクリプションタブを選択します。
  3. サブスクリプションの作成を選択します。
  4. プロトコルは E メールを選択します。
  5. エンドポイントに宛先の配布リストまたは個人の E メールアドレスを設定します。
  6. サブスクリプションの作成を選択します。
  7. SNS コンソールから移動する前に、詳細にて SNS トピックの ARN を取得します。

以上で、Lambda 関数が使用する IAM ロールを作成する準備が整いました。

2. FSx のステータスをクエリするカスタムポリシーの AWS Lambda 実行ロールを作成する

Lambda 関数の実行ロールは、関数に AWS サービスやリソースへのアクセス許可を与える AWS Identity and Access Management(IAM)ロールです。関数を作成するときにこのロールを提供し、関数が呼び出されたときに Lambda がそのロールを引き受けます。このソリューションでは、カスタム SNS トピックや、CloudWatch LogsAmazon FSx にアクセスする必要があります。

  1. AWS マネジメントコンソールに移動し、IAM コンソールを参照します。
  2. 左側のパネルよりロールを選択し、ロールを作成を選択します。
  3. 信頼されたエンティティタイプは AWS のサービスで設定します。
  4. ユースケースは Lambda を設定し、次へを選択します。
  5. 許可を追加ポリシーを作成を選択し、JSON タブを選択します。
  6. 以下を入力し、ご利用のリージョンアカウント ID の個所を編集します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:<REGION>:<ACCOUNTID>:log-group:/aws/lambda/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "fsx:DescribeFileSystems"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "sns:Publish"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
  1. 次のステップ:タグを選択し、次のステップ:確認を選択します。名前に fsx-lambda-sns を入力し、最後にポリシーの作成を選択します。許可を追加 コンソールに戻り、ポリシーを作成の隣にあるリフレッシュアイコンを選択してください。

a. 許可ポリシーの下の検索窓で、先ほど作成した fsx-lambda-sns を検索し、選択してください。

b. 次へを選択し、ステップ2:許可を追加するより、fsx-lambda-sns許可ポリシーがアタッチされていることを確認します。

c. ロール名に fsx-lambda を入力し、ロールを作成を選択してください。

3. Python コードを実行するための AWS Lambda 関数を作成する

この手順では、AWS Lambda を使用して、サーバーをプロビジョニングおよび管理する必要なくコードを実行します。これによって、Amazon FSx ファイルシステムの健全性をクエリし、レポートするためのシンプルでカスタマイズ可能なプラットフォームを提供します。コードは Python で記述されており、1 回の実行で複数のファイルシステムを評価し、ファイルシステムのステータスが健全でない場合は通知を送信します。また、ファイルシステムごとに個別の通知を送信します。

1. AWS マネジメントコンソールに移動し、Lambda コンソールを参照します。

2. 関数の作成を選択します。

a. 一から作成を選択します。

b. 関数名に fsx-healthを入力します。

c. ランタイムに Python 3.8 を設定します。

d. アーキテクチャに x86_64 を設定します。

3. デフォルトの実行ロールの変更を展開し、実行ロール既存のロールを使用するを選択して、fsx-lambda ロールを選択します。

4. 関数の作成を選択します。

5. コードソースのウィンドウで、サンプルのコードを削除し、次のコードに置き換えてください。

import json
import boto3
import os

def lambda_handler(event, context):
    LAMBDASNSTOPIC = os.environ['LambdaSNSTopic']

    fsx = boto3.client('fsx')
    filesystems = fsx.describe_file_systems()
    for filesystem in filesystems.get('FileSystems'):
        status = filesystem.get('Lifecycle')
        filesystem_id = filesystem.get('FileSystemId')
        sns_client = boto3.client('sns')
        if status != 'AVAILABLE':
            print("The file system: {} needs attention.".format(filesystem_id))
            sns_client.publish(TopicArn=LAMBDASNSTOPIC,Message="File System: " + filesystem_id + " needs attention. The status is: " + status, Subject = "FSx Health Warning!")
        else:
            print("The file system: {} is in a healthy state, and is reachable and available for use.".format(filesystem_id))

6. 設定タブを選択し、環境変数にて編集を選択してください。そして、環境変数の追加を選択し、キーに LambdaSNSTopic、値に fsx-health の SNS トピック ARN を入力し、保存を選択してください。

a. AWS CloudShell を使用して、SNSトピックとその ARN をリストすることを検討してください。

Lambda関数をデプロイする

  1. SNSトピックのコード編集を行った後、Deploy を選択します。
  2. Test を選択し、イベント名に Test を入力し、保存を選択します。
  3. Test を選択して実行します。テスト結果は Execution results タブに表示されます。コードの実行が成功するはずです。

Lambda execution results

図 2 : Lambda 実行結果

4. Amazon SNS トピックのサブスクリプションを確認する

この手順は、FSx ファイルシステムの健全性チェックの通知を受信するように設定された E メールアドレスを SNS がサブスクライブするために必要です。

  1. E メールに開き、SNS から新しい E メールが届いているかどうかを確認します。

SNS subscription confirmation

図 3 : SNS サブスクリプションの確認

  1. Confirm Subscription を選択します。
  2. これで、Lambda 関数からメールを受信できるようになりました。

5. Amazon EventBridge ルールを作成する

Amazon EventBridge ルールを使用して、Amazon FSx ファイルシステムの健全性チェックの実行をスケジュールします。別案として、組織の要件に応じて、Systems Manager メンテナンスウィンドウを使用することもできます。

1. AWS マネジメントコンソールに移動し、Amazon EventBridge コンソール を参照します。

2. 左側のパネルよりルールを選択し、ルールを作成を選択します。

a. 名前fsx-health-trigger を入力します。

b. イベントバスdefault のままにして、選択したイベントバスでルールを有効にするは有効のままにしてください。

c. ルールタイプスケジュールに変更し、続行してルールを作成するを選択します。

d. スケジュールパターンで、通常のレートで実行されるスケジュール(10 分ごとなどを選択します。

e. レートは合理的な間隔で設定します。Lambda 関数を頻繁に呼び出すと、アカウント内で不要なコストが発生する可能性があります。

f.ターゲットを選択AWS のサービス を選択し、Lambda 関数を選択し、 fsx-health を選択します。

g. 設定はデフォルトのままにして、次へを 2 回選択します。

3. スケジュールを作成を選択します。

FSx Health EventBridge rule

図 4 : Amazon FSx ファイルシステム健全性チェックの EventBridge ルール

設定した Lambda 関数が定期的に実行されるようにスケジュールされました。

6. Lambda 関数を手動で実行して、ステータス通知の配信をトリガーする

この手順では、メッセージが配信されていることを確認するため、手動で fsx-health 関数を実行します。FSx ファイルシステムのステータスが AVAILABLE 以外の場合に E メールが通知される点に注意ください。

  1. AWS マネジメントコンソールに移動し、Lambda コンソールを参照します。
  2. 左側のパネルより関数を選択し、先ほどの fsx-health 関数を選択します。
  3. Test を選択して Lambda 関数を手動で実行し、Amazon FSx インスタンスの健全性を評価します。
  4. E メールを確認して、通知を受け取ったことを確認します。

SNS email notification

図 5 : SNS E メール通知

料金

このソリューションは軽量のため、チェック間隔が日次の場合であれば使用量は無料の Lambda ティアに収まると思います。本ソリューションの例では、1 時間ごとに実行しています。しかし、E メール統合の場合は、データを解釈して受信者に提示するサービスがなければノイズになります。このソリューションのコストに影響を与える要素はたくさんあります。別の監視プラットフォームを使用していて、実行頻度、割り当てられたメモリの量、評価されるファイルシステムの量(実行時間の増加)を増やした場合、コストは変動する可能性があります。AWS は、お客様のインフラストラクチャへの変更の影響をより良く理解するために、AWS 料金見積りツールの使用を推奨します。

FSx Health Pricing

図 6 : Amazon FSx ファイルシステム健全性チェックの料金

5 分ごとにスケジュールされた Lambda の実行は無料ティアの使用量に収まる

CloudWatch Logs に 1 GB / 月で保存:$ 0.50/月

SNS で 1 時間ごとに E メール送信:$ 0.01

⇒ 年間合計: $ 6.17

自動デプロイ

ソリューションをデプロイするための CloudFormation テンプレートは、こちらからダウンロードできます。テンプレートを標準の CloudFormation スタックとしてデプロイします。デプロイ時に、通知を送信する E メールアドレスと健全性チェックの実行間隔を指定する必要があります。デフォルトでは、テンプレートは 5 分ごとにチェックを実行するようにスケジュールを設定します。通知の受信を開始するために、SNS のサブスクリプションを確認する必要があります。

このソリューションには、Terraform プロジェクトも用意されています。 Terraform は、インフラストラクチャを安全かつ効率的に構築、変更、バージョンアップできるオープンソースのIaC(Infrastructure as Code)ツールです。これには、コンピュートインスタンス、ストレージ、ネットワークなどの低レベルのコンポーネントと、DNS エントリや SaaS の機能などの高レベルのコンポーネントの両方が含まれます。Terraform のソリューションを利用するためには、以下が必要です。

  1. Terraform の最新版を実行するように構成されたマシンをセットアップします。
  2. このソリューションの Terraform インフラストラクチャ コンポジションをこちらからダウンロードします。
  3. variables.tf ファイルを変更し、アカウント ID、希望するリージョン、ベースの命名規則、E メールを含めてください。
  4. terraform init を実行します。
  5. terraform plan を実行し、エラーを確認してください
  6. terraform applyを実行します。
  7. SNS トピックに登録し、E メールの受信を開始してください。

まとめ

この記事では、Amazon FSx ファイルシステムのステータスをより効率的に監視する方法と、ファイルシステムのステータスが変更されたときの通知を設定する方法について説明しました。このアプローチを組織全体に実装することで、最小限の年間コストで Amazon FSx ファイルシステムの健全性を監視するための、シンプルで繰り返しが可能なソリューションが得られます。

このソリューションを変更して多くのエンドポイントに通知を送信できるため、組織はこれをインフラストラクチャ監視戦略の一部として柔軟に採用できます。このソリューションを AWS Chatbot と統合して Slack に通知を送信する方法を確認することをお勧めします。一元的に実装する場合は、AWS Systems Manager Automation を利用して、1 つのアカウントから複数のアカウントとリージョンに対してこのコードを実行することもできます。

翻訳はプロフェッショナルサービス本部の葉山が担当しました。

Bill Pfeiffer

Bill Pfeiffer

Bill Pfeiffer は Amazon Web Services のシニアソリューションアーキテクトです。セキュアでコスト最適化されたインフラの設計、実装、進化を支援することに専念しています。お客様がビジネス上の課題を技術的なソリューションで解決することを支援することに情熱を注いでいます。仕事以外では、家族と RV 車で米国を旅行することと、ウルトラマラソン距離のスパルタンレースに出場することを楽しんでいます。