Foto de ERIK Miheyeu en Shutterstock
En este post te mostramos un pipeline automatizado de codificación de video que aprovecha el poder de AWS Lambda y AWS Elemental MediaConvert. Cada vez que se suben nuevos archivos multimedia a un bucket de Amazon S3, se dispara automáticamente una función Lambda que le indica a MediaConvert que inicie el proceso de codificación del video cargado.
Para simplificar el despliegue y la gestión de esta solución de codificación automatizada, adopté los principios de Infrastructure as Code (IaC) con Terraform. La configuración de Terraform que se proporciona, disponible en el repositorio de GitHub AQUÍ, te permite aprovisionar y administrar los recursos de AWS necesarios de forma programática. ( Nota: ajusta el código de referencia según tu entorno y tus flujos específicos de codificación de video. Puedes incorporar módulos adicionales de Terraform para aprovisionar otros componentes de infraestructura, como la configuración de la VPC.)
Diagrama básico de arquitectura
Paso 1. Crea los buckets S3 de origen y destino
- Crea un bucket S3 privado para los archivos multimedia de entrada.
p. ej. my-mediaconvert-src-bucket 2. Crea un bucket S3 privado para los archivos multimedia convertidos.
p. ej. my-mediaconvert-dst-bucket
Paso 1
Paso 2. Crea un service role para el servicio MediaConvert
- Ve a IAM/roles y selecciona Trusted Entity Type — AWS service; busca y selecciona MediaConvert. Haz clic en Next.
Paso 2.1
- Deja las políticas predeterminadas como se muestra abajo y haz clic en Next.
Paso 2.2
- Asígnale nombre, descripción y tags (opcional) al rol y créalo.
p. ej. mediaconvert_role

Paso 2.3
Paso 3. Crea un service role para Lambda
- Sigue los mismos pasos del Paso 2, pero esta vez elige lambda como servicio y adjunta la política administrada de AWS AWSLambdaBasicExecutionRole
Crea el rol.
p. ej. lambda_convert_role
- Una vez creado el rol, adjúntale una política inline ( p. ej. lambda_convert_inline_policy) con el siguiente JSON. (Reemplaza el número de cuenta de AWS — XXXXXXXXX)
{
"Version": "2012-10-17",
"Statement": [\
{\
"Sid": "VisualEditor0",\
"Effect": "Allow",\
"Action": "iam:PassRole",\
"Resource": "arn:aws:iam::XXXXXXXXX:role/*"\
},\
{\
"Sid": "VisualEditor1",\
"Effect": "Allow",\
"Action": [\
"mediaconvert:*",\
"logs:CreateLogStream",\
"logs:CreateLogGroup",\
"logs:PutLogEvents"\
],\
"Resource": "*"\
}\
]
}
NOTA:- Puedes acotar más los permisos de la política inline para que apliquen solo al rol de MediaConvert y no a todos los roles creados; edita y agrega ARNforMediaConvertRole reemplazándolo en la política anterior.
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": ["iam:PassRole"],
"Resource": ["ARNforMediaConvertRole"],
}
- Debería verse así:
{
"Version": "2012-10-17",
"Statement": [\
{\
"Sid": "VisualEditor0",\
"Effect": "Allow",\
"Action": "iam:PassRole",\
"Resource": "arn:aws:iam::XXXXXXXXXX:role/lambda_convert_role"\
},\
{\
"Sid": "VisualEditor1",\
"Effect": "Allow",\
"Action": [\
"mediaconvert:*",\
"logs:CreateLogStream",\
"logs:CreateLogGroup",\
"logs:PutLogEvents"\
],\
"Resource": "*"\
}\
]
}
- Rol de Lambda:- p. ej. lambda_convert_role

Paso 3
Paso 4. Crea una función Lambda — Crea una función Lambda que responda a los eventos de creación de objetos (archivos multimedia) en el bucket S3 de origen y dispare el job de MediaConvert para cada archivo.
- Crea una función Lambda desde cero, selecciona el rol de Lambda ( lambda_convert_role) que creaste en el Paso 3 y haz clic en Create function.
p. ej. mediaconvert_lambda

Paso 4.1
- Sube el archivo lambda.zip a la función Lambda y haz deploy. (El lambda_zip de referencia está disponible en el repositorio de GitHub AQUÍ )

Paso 4.2
- Verifica el handler de Lambda

Paso 4.3
- Actualiza las "environment variables" en la configuración con tus valores.

Paso 4.4

Paso 4.5
Paso 5. Crea una notificación de eventos en S3 para disparar la función Lambda
- Haz clic en el bucket de origen ( p. ej. my-mediaconvert-src-bucket) y selecciona properties

Paso 5.1
- Desplázate hacia abajo y haz clic en C reate event notification dentro de Event Notification .

Paso 5.2
- Selecciona "all objects create events" y otras opciones generales como Event Name, etc.

Paso 5.3
- Selecciona Lambda Function como destino y la función mediaconvert_lambda que creaste en el Paso 4, y guarda.

Paso 5.4
Paso 6. Agrega notificaciones de SNS para jobs FAILED o SUCCESS. (Opcional — si no las necesitas, salta al Paso 8 y prueba)
- Crea un topic de SNS y una suscripción (email, mensaje, etc.) y confírmala.

Paso 6.1
Paso 7 (Opcional):- Crea una regla de eventos en CloudWatch para monitorear el estado de los jobs de MediaConvert y enviar notificaciones
- Crea una nueva regla con nombre y descripción, y selecciona Event source — AWS events o EventBridge partner events, el método de creación y el patrón de eventos como se muestra abajo.

Paso 7.1
Paso 7.2
- Selecciona el topic de SNS como destino

Paso 7.3
Paso 8:- Prueba y verifica. (Notificación si se agregó)
Sube algunos archivos multimedia al bucket S3 de origen, observa cómo Lambda dispara los jobs de MediaConvert para cada archivo y comprueba que el bucket de destino contenga los archivos convertidos.
- Sube archivos multimedia al bucket S3 de origen

Paso 8.1
- La función Lambda disparando los jobs de MediaConvert

Paso 8.2
- Los archivos multimedia se convierten según el archivo job.json indicado. Los archivos convertidos pueden verse en el bucket de destino.

Paso 8.3
- Notificación (si se agregó)
Paso 8.4
Conclusión— En este post vimos cómo aprovechar AWS Lambda para automatizar los jobs de AWS Elemental MediaConvert. La solución propuesta inicia sin fricciones los procesos de transcodificación en MediaConvert al detectar nuevos videos cargados en un bucket de S3, agilizando tu flujo de trabajo multimedia.