Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

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

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

Nikhil Pawar
By Nikhil Pawar
Jun 7, 20244 min read

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.

Cloud bill shouldn't be a mystery

One platform for AI and Cloud optimization.