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