使用Boto3调用AWS Transfer服务时,如何查询SFTP传输任务状态?
start_file_transfer后查询任务状态的最佳实践 当使用Boto3的start_file_transfer方法发起SFTP传输任务后,官方确实没有提供直接通过TransferId查询状态的API,以下是几种实用的最佳实践方案:
通过CloudTrail日志查询事件
AWS Transfer Family的所有操作都会被CloudTrail记录,传输任务的完成或失败事件(如TransferJobCompleted、TransferJobFailed)会包含对应的TransferId。你可以使用Boto3的CloudTrail客户端查询相关事件,过滤条件设置为事件源transfer.amazonaws.com,并通过TransferId匹配具体任务。
示例代码片段:import boto3 cloudtrail = boto3.client('cloudtrail') response = cloudtrail.lookup_events( LookupAttributes=[ { 'AttributeKey': 'ResourceName', 'AttributeValue': '你的TransferId' }, ], EventSource='transfer.amazonaws.com', MaxResults=10 ) # 从返回的事件中提取任务状态信息配置SNS通知实时获取状态
在创建Transfer服务器或配置工作流时,关联SNS主题。当传输任务完成、失败或进入其他状态时,AWS会自动向SNS主题发送包含TransferId和状态详情的通知。你可以订阅该主题,通过邮件、Lambda函数等方式实时接收状态更新,也可以将通知内容持久化到数据库供后续查询。通过目标存储验证传输结果
如果传输目标是S3、EFS等AWS存储服务,可以通过检查目标路径下的文件是否存在、文件大小与源文件是否一致,间接验证传输是否成功。这种方法适合简单场景,但无法区分"传输中"和"传输失败"的状态,仅能确认最终结果。利用Transfer工作流持久化状态
创建自定义Transfer工作流,在传输任务完成后触发Lambda函数。Lambda函数可以将TransferId、任务状态、完成时间等信息写入DynamoDB或其他数据库,之后就可以通过查询数据库来获取任意任务的状态。这种方案适合需要长期存储和查询任务状态的场景。
内容的提问来源于stack exchange,提问作者Maile Cupo

