Foto de ERIK Miheyeu no Shutterstock
Este post mostra um pipeline automatizado de codificação de vídeo que une o poder do AWS Lambda e do AWS Elemental MediaConvert. Sempre que novos arquivos de mídia chegam a um bucket do Amazon S3, uma função Lambda é acionada automaticamente e instrui o MediaConvert a iniciar a codificação do vídeo recém-enviado.
Para facilitar a implantação e a gestão dessa solução de codificação automatizada, adotei os princípios de Infrastructure as Code (IaC) com o Terraform. A configuração do Terraform, disponível no repositório do GitHub AQUI, permite provisionar e gerenciar de forma programática os recursos AWS necessários. ( Observação: ajuste o código de referência conforme o seu ambiente e os seus fluxos específicos de codificação de vídeo. Você pode incorporar outros módulos do Terraform para provisionar componentes adicionais da infraestrutura, como a configuração da VPC.)
Diagrama básico da arquitetura
Passo 1. Crie os buckets S3 de origem e destino
- Crie um bucket S3 privado para os arquivos de mídia de entrada.
ex.: my-mediaconvert-src-bucket 2. Crie um bucket S3 privado para os arquivos de mídia convertidos.
ex.: my-mediaconvert-dst-bucket
Passo 1
Passo 2. Crie uma service role para o MediaConvert
- Vá em IAM/roles e selecione Trusted Entity Type — AWS service; pesquise e selecione MediaConvert. Clique em Next.
Passo 2.1
- Mantenha as políticas padrão como mostrado abaixo e clique em Next.
Passo 2.2
- Preencha Role Name, Description e Tags (opcional) — Create Role.
ex.: mediaconvert_role

Passo 2.3
Passo 3. Crie uma service role para o Lambda
- Repita os mesmos passos do Passo 2, mas desta vez escolha lambda como serviço & anexe a política gerenciada pela AWS — AWSLambdaBasicExecutionRole
Crie a role.
ex.: lambda_convert_role
- Depois que a role for criada, anexe nela uma política inline ( ex.: lambda_convert_inline_policy) com o JSON a seguir. (Atualize o número da conta 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": "*"\
}\
]
}
OBSERVAÇÃO:- Para deixar a política inline mais restrita, você pode liberar a permissão apenas para a role do MediaConvert, em vez de todas as roles criadas. Edite a política acima e troque o valor por ARNforMediaConvertRole.
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": ["iam:PassRole"],
"Resource": ["ARNforMediaConvertRole"],
}
- Deve ficar assim:
{
"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": "*"\
}\
]
}
- Lambda role:- ex.: lambda_convert_role

Passo 3
Passo 4. Crie uma função Lambda — Crie uma função Lambda que reaja a eventos de criação de objetos (arquivos de mídia) no bucket S3 de origem e dispare o job do MediaConvert para o(s) arquivo(s).
- Crie uma função Lambda do zero, escolha a role ( lambda_convert_role) que você criou no passo 3 e clique em Create function.
ex.: mediaconvert_lambda

Passo 4.1
- Faça upload do lambda.zip na função e clique em deploy. (o lambda_zip de referência está no repositório do GitHub AQUI )

Passo 4.2
- Confira o lambda handler

Passo 4.3
- Atualize as "environment variables" na configuração com os seus valores.

Passo 4.4

Passo 4.5
Passo 5. Crie uma notificação de evento no S3 para acionar a função Lambda
- Clique no bucket de origem ( ex.: my-mediaconvert-src-bucket) e abra Properties

Passo 5.1
- Role a tela e clique em C reate event notification em Event Notification .

Passo 5.2
- Selecione "all objects create events" e demais configurações gerais, como Event Name etc.

Passo 5.3
- Escolha Lambda Function como destino, selecione a função mediaconvert_lambda criada no passo 4 e salve.

Passo 5.4
Passo 6. Adicione notificações via SNS para jobs com FALHA ou SUCESSO. ( Opcional — se não precisar, pule para o passo 8 e teste)
- Crie um tópico SNS com uma assinatura (e-mail, mensagem etc.) e confirme a assinatura.

Passo 6.1
Passo 7 (opcional):- Crie uma CloudWatch Event Rule para monitorar o status dos jobs do MediaConvert e enviar notificações
- Crie uma nova rule com Name e description, e selecione Event source — AWS events or EventBridge partner events, Selection Creation Method e Event Pattern como abaixo.

Passo 7.1
Passo 7.2
- Defina o tópico SNS como target

Passo 7.3
Passo 8:- Teste e valide. ( Notificação, se você adicionou)
Suba alguns arquivos de mídia para o bucket S3 de origem, acompanhe o Lambda disparando os jobs do MediaConvert para cada arquivo e veja os arquivos convertidos no bucket de destino.
- Faça upload dos arquivos de mídia no bucket S3 de origem

Passo 8.1
- Função Lambda disparando os jobs do MediaConvert

Passo 8.2
- Os arquivos de mídia serão convertidos conforme o job.json definido. Os arquivos convertidos aparecem no bucket de destino.

Passo 8.3
- Notificação (se você adicionou)
Passo 8.4
Conclusão— Este post mostrou como usar o AWS Lambda para automatizar jobs do AWS Elemental MediaConvert. A solução proposta dispara a transcodificação no MediaConvert assim que detecta novos uploads de vídeo em um bucket S3, simplificando todo o seu fluxo de mídia.