【DataSync】タスクの実行ステータスをEventBridge+SNSで通知してみた

DataSyncのタスク実行ステータスをEventBridge+SNSでメール通知してみました。実際にやってみてわかったことも紹介しています。
2022.03.23

こんにちは、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)です。

皆さん、DataSync使っていますか。

DataSyncタスクの成功時や異常終了時にメールで通知してほしいってことありますよね。

本エントリでは、そんなとき役に立てるようにEVentBridgeとSNSを利用してメール通知の設定をしてみました。

3行まとめ

  • EventBridge + SNSでDataSyncタスクの実行ステータス監視が可能
  • ただしタスクのエラー発生箇所によっては通知されない場合もあるので注意
  • 通知されたメールはデフォルト設定ではとても読みづらいので入力トランスフォーマーを使用して整形しよう

タスク実行ステータスとは?

3行まとめでいきなりDataSyncタスクの実行ステータスという用語を使用しましたが、まずはここから説明したいと思います。

公式ドキュメントWorking with task executions in DataSyncから引用すると、タスク実行ステータス(Task execution statuses)について以下のような一文があります。

you can find information about the possible statuses (phases) a task execution might go through.

ここから、DataSyncのタスク実行ステータス(以降タスク実行ステータスと略します)とは、タスク実行時に起こりうる状態(フェーズ)であることが伺えます。

今回構築する通知設定では、このタスク実行ステータスをEventBridgeのトリガーにしてメール通知を実装します。

やってみた

以下が必要な作業の概要はこちら。

  1. SNSトピックの作成
  2. メールアドレスのサブスクリプション設定
  3. EventBridgeルールの作成
  4. タスク実行テスト

今回実施する手順はAWSナレッジセンターのQ&Aを参考に作成しています。

SNSトピックの作成

AWSマネジメントコンソールからSNSトピックを作成します。

パラメーターは以下を指定します。

  • タイプ:スタンダードキュー
  • 名前:datasync-status-notice(任意の値に変更してOK)
  • 表示名:datasync-status-notice(任意の値に変更してOK)

トピックが作成できました。

メールアドレスのサブスクリプション設定

続いて、サブスクリプションの作成を行います。

パラメーターは以下を指定します。

  • ARN:作成したSNS Topic ARN
  • プロトコル:Eメール
  • エンドポイント:使用可能なメールアドレス

サブスクリプションを作成できました。

登録したメールアドレスに以下の内容のメールが届いてると思われます。

リンクをクリックしてサブスクリプションの確認を完了させましょう。

確認後、ステータスが確認済みとなっていればOKです。

(参考)AWSコンソールから行うサブスクリプション設定

サブスクリプションの確認はメールのリンクからでも可能ですが、AWSマネジメントコンソールのサブスクリプションの確認からもできます。

マネジメントコンソールからの手順で確認した場合、通知メールに毎回含まれるサブスクリプション解除用のリンクを無効化できます。

詳しくはこちらのブログをチェックしてみてください。

EventBridgeルールの作成

マネジメントコンソールからEventBridgeルールを作成します。

「ルールの詳細を定義」では、以下のパラメーターを指定します。

  • 名前:datasync-status-rule(任意の値に変更してOK)
  • 説明:datasync-status-rule(任意の値に変更してOK)
  • ルールタイプ:イベントパターンを持つルール

「イベントパターンを構築」画面では、イベントソースはその他を選択、イベントパターンはカスタムパターン(JSONエディタ)を選択し、イベントJSONを入力欄に以下を入力します。

{
  "source": [
    "aws.datasync"
  ],
  "detail-type": [
    "DataSync Task Execution State Change"
  ],
  "detail": {
    "State": [
      "SUCCESS",
      "ERROR"
    ]
  }
}

「ターゲットを選択」画面では、以下のパラメーターを指定します。

  • ターゲットタイプ:AWSのサービス
  • ターゲットを選択:SNSトピック
  • トピック:datasync-status-notice(任意の値に変更してOK)

ルールが作成できました

タスク実行テスト

DataSyncタスクを実行してメール通知できるか確認してみましょう。

今回は作成済みの既存のタスクを使用しますが、テストできるタスクがない場合は、こちらのブログを参考に作成してみてください。

DataSyncのタスクを実行します。

実行後、DataSyncタスクのHistoryから最新のタスク実行結果を確認します。今回は成功でした。

メールBOXの方を確認してみると、確かに通知されていることが確認できました。

やってみた、は以上です。

注意点

上記の設定で通知設定を行なった際に注意すべき2点、をご紹介します。

1. タスクの失敗時に通知されないことがある

注意:本項目では公式ドキュメントに記載されていない内容を実際の挙動から想定で記載した内容を含んでいます。本番利用等のため確証のある回答が必要な場合はAWSサポートに確認してください。

DataSync Agentをオフラインにした状態でスケジュールされていたタスクが実行された時、AWSコンソール上のタスクの実行ステータスはERRORになっていますが、SNSによるメール通知はされませんでした。これはなぜでしょう?

私の想定する理由は、今回の実行ステータスはEventBridgeルールによってトリガーされるタスク実行ステータスERRORではなかったから、です。(そのままですが、、

公式ドキュメントでは、タスク実行ステータスERRORの説明として以下のような記載があります。

This value is returned if the data transfer fails. If the VerifyMode option isn't set, this status occurs after the TRANSFERRING phase. Otherwise, it occurs after the VERIFYING phase.

TRANSFERRING以降でないとERRORの実行ステータスは発生しないような旨が書いてありますね。

見づらいので、公式ドキュメントWorking with task executions in DataSyncを参考に、DataSyncタスクの状態遷移図を作成してみました。

公式ドキュメントを参考に作成しましたが、念のため本画像の利用については参考程度にとどめてください

TRANSFERRINGは、DataSyncタスク遷移フローの中腹に位置するステータスで、タスク実行の初期化を行うLAUNCHINGやデータの転送準備を行うPREPARINGのステータスの後に遷移します。

公式ドキュメントのLAUNCHINGの説明で、以下のようにタスクの初期化を行なっているような記載があるため、この箇所もしくはそれ以前の段階でエージェントのステータス確認も実施されているのでしょう。

At this point, AWS DataSync is initializing the task execution.

※ご存知の方がいたらTwitterのDM等からフィードバックいただきたいです。

今回のケースではエージェントがオフラインだったためタスクの実行ステータスがLAUNCHINGに遷移せず、TRANSFERRINGの前で失敗したことになるため、コンソール上のタスクの状態はErrorでしたが、DataSyncタスク実行ステータスはErrorではない何かであると想像できます。

実際の挙動からの想定の内容になりますが、「コンソール上から確認できるタスクの実行ステータスとEventBridgeルールでトリガーされるタスク実行ステータスはイコールではない」と頭の片隅の置いておくといつか役に立つ時が来るかもしれませんね。

2. メール通知される内容が読み取りづらい

以下通知されたメールを再掲します。

みてわかる通り、メール本文がJSON形式となっており、通知時のメールが一目ではわかりづらく可読性に優れているとは言えませんね。

EventBridgeには入力トランスフォーマーという便利な機能があります。

入力トランスフォーマーは入力パスと入力テンプレートを使用して、Eventターゲットに渡すEventBridgeからの入力をカスタマイズする機能です。

AWSナレッジセンターに入力トランスフォーマーについて扱ったものがありましたので紹介します。

こちらのブログはCloudTrailについての例なので、入力パス・入力テンプレートの内容を変更した方が良いです。

DataSyncの場合は以下のようなイメージになるかと思います。必要に応じてカスタマイズして使用してみてください。

#### 入力パス
{"Account":"$.account","Resources":"$.resources","State":"$.detail.State","Time":"$.time"}

#### 入力テンプレート
"DataSyncタスクの実行ステータスが <State> になりました"
"発生時間(UTC): <Time> "
"Account ID: <Account>"
"リソースID: <Resources>"
"リソースIDの末尾exec-XXXXをコピーし、DataSyncコンソール-Task-Historyから検索してください"

この設定で入力トランスフォーマーを設定すると、メールの内容が以下のように変わります。読みやすくなっていますよね。

まとめ

  • EventBridge + SNSでDataSyncタスクの実行ステータス監視が可能
  • ただしタスクのエラー発生箇所によっては通知されない場合もあるので注意
  • 通知されたメールはデフォルト設定ではとても読みづらいので入力トランスフォーマーを使用して整形しよう

最後に

本エントリでは、DataSyncタスクの成功時や異常終了時のメール通知をEventBridge+SNSで実装してみました。

実際にやってみたことで検知できないタスクエラーがあったり、入力トランスフォーマーを使用すべきなど、実装方法以外にも学びがありました。

ここまで見ていただいた方も実際にやってみてくださいね。

以上、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)でした。