[アップデート]AWS Transfer FamilyのイベントをAmazon EventBridgeと連携できるようになりました
はじめに
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 を経由して様々な処理を実行できるようになり、ファイル転送プロセスを柔軟に制御し、複雑な自動データ処理やワークフローの自動化が実現できるようになります。