如何在AWS MediaConvert任务完成后更新Django数据库状态?
AWS MediaConvert 转码任务完成后自动更新文件状态实现方案
核心采用AWS原生事件驱动架构实现,无需轮询任务状态,流程如下:
1. 发起转码任务时添加自定义元数据
调用Boto3的create_job接口发起转码时,通过UserMetadata字段绑定当前转码任务和对应文件的唯一标识,后续事件回调时可直接拿到该标识定位待更新的文件,示例代码:
import boto3 mediaconvert_client = boto3.client('mediaconvert', endpoint_url='你的MediaConvert专属端点') job_response = mediaconvert_client.create_job( # 其他转码配置:队列、角色、输入输出配置等省略 UserMetadata={ 'file_id': '你的文件唯一ID', 'other_needed_field': '其他你需要透传的参数' } ) # 可以把返回的job_id也存在你的数据库,方便后续对账
2. 配置EventBridge规则捕获转码完成事件
MediaConvert所有任务状态变更会自动推送到AWS默认EventBridge总线,你只需创建一条规则,过滤出转码完成的事件即可:
- 事件源选择
AWS 服务->MediaConvert - 事件类型选择
MediaConvert Job State Change - 添加事件模式过滤,只匹配
COMPLETE状态(也可同时匹配FAILED状态处理异常场景),事件模式示例:
{ "source": ["aws.mediaconvert"], "detail-type": ["MediaConvert Job State Change"], "detail": { "status": ["COMPLETE", "FAILED"] } }
3. 配置Lambda作为EventBridge规则的目标
将上述规则的触发目标设置为一个Python Lambda函数,Lambda内编写逻辑更新文件状态,示例处理代码:
import boto3 # 如果你用DynamoDB存文件状态就初始化DynamoDB客户端,其他数据库同理 dynamodb = boto3.resource('dynamodb') file_table = dynamodb.Table('你的文件状态表名') def lambda_handler(event, context): # 从事件中提取需要的字段 job_status = event['detail']['status'] user_metadata = event['detail']['userMetadata'] file_id = user_metadata.get('file_id') job_id = event['detail']['jobId'] output_info = event['detail']['outputGroupDetails'] # 更新文件状态逻辑 if job_status == 'COMPLETE': # 转码成功,更新状态为已完成,还可以写入输出文件地址等信息 file_table.update_item( Key={'file_id': file_id}, UpdateExpression='SET transcode_status = :s, output_info = :o, job_id = :j', ExpressionAttributeValues={ ':s': 'SUCCESS', ':o': output_info, ':j': job_id } ) elif job_status == 'FAILED': # 转码失败,更新状态为失败,写入错误信息 error_msg = event['detail'].get('errorMessage', '未知错误') file_table.update_item( Key={'file_id': file_id}, UpdateExpression='SET transcode_status = :s, error_msg = :e, job_id = :j', ExpressionAttributeValues={ ':s': 'FAILED', ':e': error_msg, ':j': job_id } )
权限配置注意事项
- 给Lambda执行角色添加对应资源的访问权限,比如DynamoDB的写权限,如果你用其他存储服务配置对应权限即可
- 确保EventBridge规则有调用Lambda函数的权限,AWS控制台配置规则时会自动生成该权限,手动配置需要单独添加
- 用于发起MediaConvert转码的角色需要保持原有
UserMetadata的写入权限,默认角色权限已包含
内容的提问来源于stack exchange,提问作者Sanjay Sikdar
相关产品推荐
相关产品推荐

