Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Simplifiez votre encodage vidéo avec AWS Elemental MediaConvert et AWS Lambda

By Nikhil PawarJun 7, 20244 min read

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

Photo de ERIK Miheyeu sur Shutterstock

Cet article présente un pipeline d'encodage vidéo automatisé qui tire parti d'AWS Lambda et d'AWS Elemental MediaConvert. Dès qu'un nouveau fichier multimédia est déposé dans un bucket Amazon S3, une fonction Lambda se déclenche automatiquement et demande à MediaConvert de lancer l'encodage de la vidéo.

Pour simplifier le déploiement et la gestion de cette solution d'encodage automatisée, j'ai adopté les principes de l'Infrastructure as Code (IaC) en m'appuyant sur Terraform. La configuration Terraform fournie, disponible dans le dépôt GitHub ICI, permet de provisionner et de gérer les ressources AWS nécessaires de manière programmatique. ( Remarque : adaptez le code de référence à votre environnement et à vos workflows d'encodage vidéo. Vous pouvez aussi intégrer d'autres modules Terraform pour provisionner des composants d'infrastructure supplémentaires, comme la configuration VPC.)

Schéma d'architecture de base

Étape 1. Créer les buckets S3 source et destination

  1. Créez un bucket S3 privé pour les fichiers multimédias d'entrée.

ex. my-mediaconvert-src-bucket 2. Créez un bucket S3 privé pour les fichiers multimédias convertis.

ex. my-mediaconvert-dst-bucket

Étape 1

Étape 2. Créer un rôle de service pour MediaConvert

  • Rendez-vous dans IAM/roles, choisissez le type d'entité de confiance — AWS service, puis recherchez et sélectionnez MediaConvert. Cliquez sur Suivant.

Étape 2.1

  • Conservez les politiques par défaut indiquées ci-dessous, puis cliquez sur Suivant.

Étape 2.2

  • Renseignez le nom du rôle, la description et les tags (facultatif), puis cliquez sur Créer le rôle.

ex. mediaconvert_role

Étape 2.3

Étape 3. Créer un rôle de service pour Lambda

  • Reprenez la procédure de l'étape 2 en sélectionnant cette fois lambda comme service, puis attachez la politique gérée par AWS — AWSLambdaBasicExecutionRole

Créez le rôle.

ex. lambda_convert_role

  • Une fois le rôle créé, attachez-lui une politique inline ( ex. lambda_convert_inline_policy) avec le JSON suivant. (Remplacez le numéro de compte 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": "*"\
  }\
 ]
}

REMARQUE : pour restreindre davantage les permissions de la politique inline au seul rôle MediaConvert plutôt qu'à l'ensemble des rôles créés, modifiez la politique ci-dessus en y intégrant ARNforMediaConvertRole.

{
  "Sid": "VisualEditor0",
   "Effect": "Allow",
  "Action": ["iam:PassRole"],
  "Resource": ["ARNforMediaConvertRole"],
}
  • Le résultat doit ressembler à ceci :
{
 "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": "*"\
  }\
 ]
}
  • Rôle Lambda : ex. lambda_convert_role

Étape 3

Étape 4. Créer une fonction Lambda — créez une fonction Lambda qui réagit aux événements de création d'objets (fichiers multimédias) sur le bucket S3 source et déclenche le job MediaConvert pour le ou les fichiers concernés.

  • Créez une fonction Lambda à partir de zéro, sélectionnez le rôle Lambda ( lambda_convert_role) créé à l'étape 3, puis cliquez sur Créer la fonction.

ex. mediaconvert_lambda

Étape 4.1

  • Importez lambda.zip dans la fonction Lambda et déployez. (le lambda_zip de référence est disponible dans le dépôt GitHub ICI )

Étape 4.2

  • Vérifiez le handler Lambda

Étape 4.3

  • Renseignez les variables d'environnement dans la configuration avec vos propres valeurs.

Étape 4.4

Étape 4.5

Étape 5. Créer une notification d'événement S3 pour déclencher la fonction Lambda

  • Cliquez sur le bucket source ( ex. my-mediaconvert-src-bucket) et sélectionnez Propriétés

Étape 5.1

  • Faites défiler jusqu'à Notifications d'événements et cliquez sur Créer une notification d'événement.

Étape 5.2

  • Choisissez tous les événements de création d'objets, ainsi que les autres paramètres généraux comme le nom de l'événement.

Étape 5.3

  • Choisissez Fonction Lambda comme destination, sélectionnez la fonction mediaconvert_lambda créée à l'étape 4 et enregistrez.

Étape 5.4

Étape 6. Ajouter des notifications SNS pour les jobs en échec ou réussis. (Facultatif — sinon, passez directement à l'étape 8 et testez.)

  • Créez un topic SNS et un abonnement (e-mail, message, etc.), puis confirmez l'abonnement.

Étape 6.1

Étape 7 (facultatif) : créer une règle CloudWatch Events pour suivre l'état des jobs MediaConvert et envoyer des notifications

  • Créez une règle avec un nom et une description, puis sélectionnez la source d'événement — AWS events ou EventBridge partner events, la méthode de création de la sélection et le motif d'événement comme ci-dessous.

Étape 7.1

Étape 7.2

  • Choisissez le topic SNS comme cible

Étape 7.3

Étape 8 : tester et vérifier. (Notification, si elle a été ajoutée.)

Importez quelques fichiers multimédias dans le bucket S3 source, observez Lambda déclencher un job MediaConvert pour chaque fichier et vérifiez la présence des fichiers convertis dans le bucket de destination.

  • Importez des fichiers multimédias dans le bucket S3 source

Étape 8.1

  • La fonction Lambda déclenche les jobs MediaConvert

Étape 8.2

  • Les fichiers multimédias sont convertis selon le fichier job.json fourni. Les fichiers convertis apparaissent dans le bucket de destination.

Étape 8.3

  • Notification (si elle a été ajoutée)

Étape 8.4

Conclusion — Cet article a montré comment AWS Lambda permet d'automatiser les jobs AWS Elemental MediaConvert. La solution proposée lance les processus de transcodage MediaConvert dès qu'un nouvel envoi vidéo est détecté dans un bucket S3, et fluidifie ainsi votre workflow multimédia.