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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:15:05