Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Otimize a codificação de vídeo com AWS Elemental MediaConvert e AWS Lambda

By Nikhil PawarJun 7, 20244 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

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

  1. 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.