[アップデート]AWS Transfer FamilyのイベントをAmazon EventBridgeと連携できるようになりました

2024.02.22

はじめに

AWS Transfer Family 経由でファイルのアップロードとダウンロード時、Amazon EventBridge にイベントを発行できるようになりました。

詳細な仕様については、下記のドキュメントをご参照下さい。

従来、Transfer Family には、転送されたファイルに対して特定の処理を行うためのマネージドワークフロー機能がありました。

引用

ただし、ファイルに対して行える処理は以下の通りでした。

  • ファイルをコピー
    • S3バケットのみで、EFSは不可
  • ファイルを削除
  • ファイルにタグを付ける
  • ファイルを復号する
  • AWS Lambda 関数を呼び出してファイル処理

今回のアップデートにより、Transfer Family のファイル転送イベントをほぼリアルタイムで EventBridge に発行できるようになり、EventBridge の高度なフィルタリングやルーティング機能を活用して、AWS Lambda、AWS Step Functions、Amazon SNS などのターゲットにファイル転送イベントを送信できるようになりました。

Transfer Family のユーザー名やファイルのサイズなどの送信側の情報も EventBridge に送られます。どのような情報が送られるかは、今回検証し確認します。

活用例としては、ファイル転送の失敗時に Amazon SNS 経由で通知を送る、特定のファイル名に対して Step Functions を利用してデータの加工処理をするなどが考えられます。

イベント内容

Transfer Family が EventBridge に送信されるイベントタイプは以下の3つです。

  • Transfer Family サーバー(SFTP、FTPS、FTP)
  • Transfer Family SFTPコネクタ
  • Transfer Family AS2

上記のうちTransfer Family サーバー(SFTP、FTPS、FTP)の場合、送信されるイベントの内容は以下の4つです。

  • ファイルが正常にダウンロードされた
  • ファイルのダウンロードが失敗した
  • ファイルが正常にアップロードされた
  • ファイルのアップロードが失敗した

他のイベントタイプのイベント内容など詳細は、ドキュメントをご参照ください。

検証

今回は、ファイルが正常にアップロードされたら、EventBridge から Amazon SNS を経由してメールを送信するフローを構築します。

Transfer Family サーバー(今回は SFTP)と SNS のトピック、ファイル転送先のS3バケットは、構築済みとします。

EventBridgeルール作成

EventBridge ルール作成時、Transfer Family のサンプルイベントは用意されていませんでした。

先ほども説明したように、サーバーの場合、以下の4つのイベント内容があります。

正常にファイルがアップロードされた場合に SNS でメールを送信するため、イベントパターンは以下のように設定します。

{
  "source": ["aws.transfer"],
  "detail-type": ["SFTP Server File Upload Completed"]
}

ターゲットは、メール送信用の SNS トピックを指定します。

EventBridge ルールの作成は以上です。

ファイル転送してみる

SFTP 接続し、ファイルを転送して成功した場合にメールが送信されるかを確認します。

% sftp -i transfer-family.key test1-user@transfer familyのサーバーID
sftp> put test.txt
Uploading test.txt to /s3バケット/prefix/test.txt
test.txt                                      100%   15     0.1KB/s   00:00

アップロードが完了すると、メールが送信されました。メール内容は以下の通りです。

{
  "version": "0",
  "id": "a694cd53-26a0-2264-857c-eb73035a02dc",
  "detail-type": "SFTP Server File Upload Completed",
  "source": "aws.transfer",
  "account": "アカウントID",
  "time": "2024-02-20T06:40:20Z",
  "region": "ap-northeast-1",
  "resources": [
    "arn:aws:transfer:ap-northeast-1:アカウントID:server/s-2a565b937cbb45299"
  ],
  "detail": {
    "status-code": "COMPLETED",
    "protocol": "SFTP",
    "bytes": 15,
    "client-ip": "xx.xx.xx.xx",
    "end-timestamp": "2024-02-20T06:40:20.232577502Z",
    "etag": "38dd6a73a0e84e3e71326ac049a5d81f",
    "file-path": "/s3バケット/prefix/test.txt",
    "server-id": "s-2a565b937cbb45299",
    "username": "test1-user",
    "session-id": "fc660b3c6f8e3cf6",
    "start-timestamp": "2024-02-20T06:40:19.863062158Z"
  }
}

以下のような送信情報が取得できることがわかります。

  • イベント内容
  • アカウントID
  • クライアントIP
  • ファイルサイズ
  • ファイル転送の時間
  • ファイルパス
  • ユーザー名

特定のユーザーに限ったメール通知

特定のユーザーのみ、ファイル転送成功時にメール通知するように EventBridge ルールを変更します。

イベントパターンを以下のように修正すると、ユーザー名で絞り込みが可能です。

{
  "source": ["aws.transfer"],
  "detail-type": ["SFTP Server File Upload Completed"],
  "detail": {
    "username": ["test2-user"]
  }
}

ユーザー名test1-userがファイル転送した場合、メールは送信されませんでした。

% sftp -i transfer-family.key test1-user@transfer familyのサーバーID
sftp> put test.txt
Uploading test.txt to /s3バケット/prefix/test.txt
test.txt                                      100%   15     0.1KB/s   00:00

ユーザー名test2-userがファイル転送した場合、メールは送信されました。

% sftp -i transfer-family.key test2-user@transfer familyのサーバーID
sftp> put test.txt
Uploading test.txt to /s3バケット/prefix/test.txt
test.txt                                      100%   15     0.1KB/s   00:00

メール内容は以下の通りです。

{
  "version": "0",
  "id": "86dab349-021d-8c7d-d4de-7cc04ccc4be2",
  "detail-type": "SFTP Server File Upload Completed",
  "source": "aws.transfer",
  "account": "アカウントID",
  "time": "2024-02-20T06:56:22Z",
  "region": "ap-northeast-1",
  "resources": [
    "arn:aws:transfer:ap-northeast-1:アカウントID:server/s-2a565b937cbb45299"
  ],
  "detail": {
    "status-code": "COMPLETED",
    "protocol": "SFTP",
    "bytes": 15,
    "client-ip": "xx.xx.xx.xx",
    "end-timestamp": "2024-02-20T06:56:22.536594858Z",
    "etag": "38dd6a73a0e84e3e71326ac049a5d81f",
    "file-path": "/s3バケット/prefix/test.txt",
    "server-id": "s-2a565b937cbb45299",
    "username": "test2-user",
    "session-id": "1d40d9bc7d735a4a",
    "start-timestamp": "2024-02-20T06:56:22.381057293Z"
  }
}

最後に

今回のアップデートにより、Transfer Family と Amazon EventBridge が連携できる、かつ、送信側の情報の活用が可能になりました。

EventBridge を経由して様々な処理を実行できるようになり、ファイル転送プロセスを柔軟に制御し、複雑な自動データ処理やワークフローの自動化が実現できるようになります。