Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Automatizzi l'encoding video con AWS Elemental MediaConvert e AWS Lambda

By Nikhil PawarJun 7, 20244 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Foto di ERIK Miheyeu da Shutterstock

Questo articolo illustra una pipeline automatizzata per l'encoding video che sfrutta le potenzialità di AWS Lambda e AWS Elemental MediaConvert. Ogni volta che nuovi file multimediali vengono caricati in un bucket Amazon S3, una funzione Lambda si attiva automaticamente e richiede a MediaConvert di avviare il processo di encoding del video appena caricato.

Per semplificare il deployment e la gestione di questa soluzione di encoding automatizzato, ho adottato i principi dell'Infrastructure as Code (IaC) tramite Terraform. La configurazione Terraform fornita, disponibile nel repository GitHub QUI, le consente di effettuare il provisioning e la gestione delle risorse AWS necessarie in modo programmatico. (Nota: personalizzi il codice di riferimento in base al proprio ambiente e ai propri flussi di encoding video. È possibile aggiungere ulteriori moduli Terraform per il provisioning di altri componenti dell'infrastruttura, come la configurazione della VPC.)

Diagramma di architettura di base

Passaggio 1. Creare i bucket S3 di origine e di destinazione

  1. Creare un bucket S3 privato per i file multimediali in input.

es. my-mediaconvert-src-bucket 2. Creare un bucket S3 privato per i file multimediali convertiti.

es. my-mediaconvert-dst-bucket

Passaggio 1

Passaggio 2. Creare un service role per il servizio MediaConvert

  • Andare su IAM/roles e selezionare Trusted Entity Type — AWS service, quindi cercare e selezionare MediaConvert. Cliccare su Next.

Passaggio 2.1

  • Lasciare le policy di default come mostrato sotto e cliccare su Next.

Passaggio 2.2

  • Indicare Role Name, Description e Tags (opzionale), quindi cliccare su Create Role.

es. mediaconvert_role

Passaggio 2.3

Passaggio 3. Creare un service role per Lambda

  • Ripetere la stessa procedura del Passaggio 2 scegliendo questa volta lambda come servizio e collegando la policy gestita da AWS AWSLambdaBasicExecutionRole

Creare il ruolo.

es. lambda_convert_role

  • Una volta creato il ruolo, collegare al ruolo Lambda una inline policy (es. lambda_convert_inline_policy) con il JSON seguente. (Aggiornare il numero di account 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:- È possibile restringere ulteriormente i permessi della inline policy limitandoli al solo ruolo MediaConvert anziché a tutti i ruoli creati: modificare e inserire ARNforMediaConvertRole sostituendolo nella policy precedente.

{
  "Sid": "VisualEditor0",
   "Effect": "Allow",
  "Action": ["iam:PassRole"],
  "Resource": ["ARNforMediaConvertRole"],
}
  • Il risultato dovrebbe essere il seguente.
{
 "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": "*"\
  }\
 ]
}
  • Ruolo Lambda:- es. lambda_convert_role

Passaggio 3

Passaggio 4. Creare una funzione Lambda — Creare una funzione Lambda che reagisca agli eventi di creazione di oggetti (file multimediali) sul bucket S3 di origine e avvii il job MediaConvert sui file.

  • Creare una funzione Lambda da zero, selezionare il ruolo Lambda (lambda_convert_role) creato al passaggio 3 e cliccare su Create function.

es. mediaconvert_lambda

Passaggio 4.1

  • Caricare lambda.zip nella funzione Lambda ed eseguire il deploy. (il file lambda_zip di riferimento è disponibile nel repository GitHub QUI)

Passaggio 4.2

  • Verificare il lambda handler

Passaggio 4.3

  • Aggiornare le "environment variables" nella configurazione con i propri valori.

Passaggio 4.4

Passaggio 4.5

Passaggio 5. Creare un'event notification S3 per attivare la funzione Lambda

  • Cliccare sul bucket di origine (es. my-mediaconvert-src-bucket) e selezionare properties

Passaggio 5.1

  • Scorrere verso il basso e cliccare su Create event notification nella sezione Event Notification.

Passaggio 5.2

  • Selezionare "all objects create events" e le altre impostazioni generali, come Event Name, ecc.

Passaggio 5.3

  • Selezionare come destinazione la Lambda Function e la funzione mediaconvert_lambda creata al passaggio 4, quindi salvare.

Passaggio 5.4

Passaggio 6. Aggiungere notifiche SNS per i job FAILED o SUCCESS. (Opzionale — se non serve, passare al passaggio 8 ed effettuare il test)

  • Creare un topic SNS e una subscription (email, message, ecc.) e confermare la subscription.

Passaggio 6.1

Passaggio 7 (opzionale):- Creare una CloudWatch Event Rule per monitorare lo stato dei job MediaConvert e inviare notifiche

  • Creare una nuova regola con Name e description, quindi selezionare Event source — AWS events o EventBridge partner events, Selection Creation Method ed Event Pattern come mostrato di seguito.

Passaggio 7.1

Passaggio 7.2

  • Selezionare il topic SNS come target

Passaggio 7.3

Passaggio 8:- Test e verifica. (Notifica, se attivata)

Caricare alcuni file multimediali nel bucket S3 di origine, verificare che Lambda avvii i job MediaConvert per ciascun file e che i file convertiti siano presenti nel bucket di destinazione.

  • Caricare i file multimediali nel bucket S3 di origine

Passaggio 8.1

  • La funzione Lambda avvia i job MediaConvert

Passaggio 8.2

  • I file multimediali verranno convertiti secondo il file job.json indicato. I file convertiti sono visibili nel bucket di destinazione.

Passaggio 8.3

  • Notifica (se attivata)

Passaggio 8.4

Conclusione— Questo articolo ha mostrato come utilizzare AWS Lambda per automatizzare i job di AWS Elemental MediaConvert. La soluzione proposta avvia in modo trasparente i processi di transcodifica MediaConvert non appena rileva il caricamento di nuovi video in un bucket S3, snellendo il flusso di lavoro multimediale.