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