You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看AWS Transfer Family SFTP连接器的进行中文件传输?

关于AWS Transfer Family SFTP连接器进行中传输的状态查询方案

问题背景

我配置了AWS Lambda函数,每隔X分钟调用AWS Transfer Family SFTP连接器的start_file_transfer接口拉取文件。但Lambda重复运行时,若前一次文件下载尚未完成,会触发文件锁定错误。需要实现:Lambda运行时先检查当前是否有对应文件的进行中下载,存在则跳过本次调用。

现有调用与响应示例

start_file_transfer调用代码

transfer.start_file_transfer(
    ConnectorId="[my-connector-id]",
    RetrieveFilePaths=[sftp_file],
    LocalDirectoryPath="/[my-s3-bucket]/[my-s3-key]"
)

接口返回响应

{
    "TransferId": "3296exe9-21fy-063r-a97n-2c91e6u3ab81",
    "ResponseMetadata": {
        "RequestId": "l5au1f5e-v59u-763w-h7gr-9461y268135o",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
            "date": "Wed, 30 Aug 2023 15:30:30 GMT",
            "content-type": "application/x-amz-json-1.1",
            "content-length": "6429",
            "connection": "keep-alive",
            "x-amzn-requestid": "l5au1f5e-v59u-763w-h7gr-9461y268135o"
        },
        "RetryAttempts": 0
    }
}

传输完成后的CloudWatch日志

{
    "operation": "RETRIEVE",
    "timestamp": "2023-08-30T16:30:33.227572Z",
    "connector-id": "[my-connector-id]",
    "transfer-id": "3296exe9-21fy-063r-a97n-2c91e6u3ab81",
    "file-transfer-id": "3296exe9-21fy-063r-a97n-2c91e6u3ab81/F6drt7oppd2+87YuTREWWW",
    "url": "sftp://sftp.example.com",
    "file-path": "my_path/file.txt",
    "status-code": "COMPLETED",
    "start-time": "2023-08-30T16:30:32.102939Z",
    "end-time": "2023-08-30T16:30:32.886031Z",
    "account-id": "999999999999",
    "connector-arn": "arn:aws:transfer:[my-region]:999999999999:connector/[my-connector-id]",
    "local-directory-path": "/[my-s3-bucket]/[my-s3-key]"
}

原生状态查询能力说明

目前AWS Transfer Family的SFTP连接器没有原生API可以直接查询进行中的传输状态。接口返回的TransferId仅用于关联CloudWatch日志,无法通过API主动查询该传输的实时运行状态。

自建状态管理方案(推荐实现)

通过DynamoDB维护传输状态,结合CloudWatch日志监听实现状态更新,具体步骤:

  1. 状态记录初始化
    Lambda调用start_file_transfer成功后,将以下信息写入DynamoDB表:

    • TransferId(主键)
    • FilePath:拉取的SFTP文件路径
    • Status:设置为IN_PROGRESS
    • CreatedAt:当前时间戳
    • ConnectorId:连接器ID
  2. 状态自动更新
    配置CloudWatch日志订阅过滤器,监听包含status-code字段的Transfer Family日志:

    • 当捕获到status-code为COMPLETED或FAILED的日志时,触发另一个Lambda函数
    • 该Lambda根据日志中的transfer-id,更新DynamoDB中对应记录的Status为COMPLETED或FAILED
  3. 运行前状态检查
    每次定时Lambda触发时,先查询DynamoDB:

    • 根据要拉取的FilePath,检查是否存在Status为IN_PROGRESS的未过期记录
    • 若存在则跳过本次拉取;若不存在则执行start_file_transfer并写入初始状态

额外优化

  • 为DynamoDB表设置TTL(生存时间),自动清理超过一定时长的状态记录(比如24小时),避免数据堆积
  • 若同一文件可能被多次触发,可将FilePath作为主键或全局二级索引,简化查询逻辑

内容的提问来源于stack exchange,提问作者gbeaven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:33:23