Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Video-Encoding automatisieren mit AWS Elemental MediaConvert und AWS Lambda

By Nikhil PawarJun 7, 20244 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

Foto von ERIK Miheyeu auf Shutterstock

In diesem Beitrag stelle ich eine automatisierte Video-Encoding-Pipeline auf Basis von AWS Lambda und AWS Elemental MediaConvert vor. Sobald neue Mediendateien in einen Amazon S3 Bucket geladen werden, startet automatisch eine Lambda-Funktion, die MediaConvert anweist, das Encoding für das hochgeladene Video anzustoßen.

Damit sich diese Lösung schlank ausrollen und betreiben lässt, setze ich konsequent auf Infrastructure as Code (IaC) mit Terraform. Die zugehörige Terraform-Konfiguration finden Sie im GitHub-Repository HIER. Damit lassen sich die benötigten AWS-Ressourcen programmatisch bereitstellen und verwalten. (Hinweis: Passen Sie den Referenzcode an Ihre Umgebung und Ihre konkreten Video-Encoding-Workflows an. Über zusätzliche Terraform-Module lassen sich weitere Infrastrukturkomponenten ergänzen, etwa eine VPC-Konfiguration.)

Grundlegendes Architekturdiagramm

Schritt 1: Quell- und Ziel-S3-Buckets anlegen

  1. Legen Sie einen privaten S3 Bucket für die Eingabedateien an.

z. B. my-mediaconvert-src-bucket 2. Legen Sie einen privaten S3 Bucket für die konvertierten Mediendateien an.

z. B. my-mediaconvert-dst-bucket

Schritt 1

Schritt 2: Service Role für MediaConvert anlegen

  • Wechseln Sie zu IAM/Roles, wählen Sie als Trusted Entity Type "AWS service", suchen Sie MediaConvert und wählen Sie es aus. Klicken Sie auf "Next".

Schritt 2.1

  • Übernehmen Sie die voreingestellten Policies wie unten gezeigt und klicken Sie auf "Next".

Schritt 2.2

  • Vergeben Sie Rollennamen, Beschreibung und (optional) Tags und legen Sie die Rolle an.

z. B. mediaconvert_role

Schritt 2.3

Schritt 3: Service Role für Lambda anlegen

  • Gehen Sie analog zu Schritt 2 vor, wählen Sie diesmal jedoch lambda als Service und hängen Sie die AWS Managed Policy AWSLambdaBasicExecutionRole an.

Erstellen Sie die Rolle.

z. B. lambda_convert_role

  • Sobald die Rolle angelegt ist, hängen Sie an die Lambda-Rolle eine Inline Policy (z. B. lambda_convert_inline_policy) mit folgendem JSON an. (Ersetzen Sie die AWS-Kontonummer – 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": "*"\
  }\
 ]
}

HINWEIS: Sie können die Berechtigungen in der Inline Policy weiter einschränken, indem Sie sie ausschließlich auf die MediaConvert-Rolle beziehen statt auf alle erstellten Rollen. Bearbeiten Sie dazu die obige Policy und ersetzen Sie den Resource-Wert durch ARNforMediaConvertRole.

{
  "Sid": "VisualEditor0",
   "Effect": "Allow",
  "Action": ["iam:PassRole"],
  "Resource": ["ARNforMediaConvertRole"],
}
  • Das Ergebnis sollte wie folgt aussehen.
{
 "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-Rolle: z. B. lambda_convert_role

Schritt 3

Schritt 4: Lambda-Funktion erstellen – Legen Sie eine Lambda-Funktion an, die auf Object-Create-Events (Mediendateien) im Source-Bucket reagiert und für die jeweiligen Dateien einen MediaConvert-Job auslöst.

  • Erstellen Sie eine Lambda-Funktion über "from scratch", wählen Sie die in Schritt 3 angelegte Lambda-Rolle (lambda_convert_role) aus und klicken Sie auf "Create function".

z. B. mediaconvert_lambda

Schritt 4.1

  • Laden Sie die Datei lambda.zip in die Lambda-Funktion hoch und deployen Sie sie. (Die Referenzdatei lambda_zip finden Sie im GitHub-Repository HIER.)

Schritt 4.2

  • Prüfen Sie den Lambda-Handler.

Schritt 4.3

  • Aktualisieren Sie in der Konfiguration die "environment variables" mit Ihren Werten.

Schritt 4.4

Schritt 4.5

Schritt 5: S3-Event-Notification anlegen, um die Lambda-Funktion auszulösen

  • Klicken Sie auf den Source-Bucket (z. B. my-mediaconvert-src-bucket) und öffnen Sie "Properties".

Schritt 5.1

  • Scrollen Sie nach unten und legen Sie unter "Event Notifications" eine neue Event Notification an.

Schritt 5.2

  • Wählen Sie "all objects create events" sowie die übrigen allgemeinen Einstellungen wie Event Name etc.

Schritt 5.3

  • Wählen Sie als Ziel Lambda Function und die in Schritt 4 angelegte Funktion mediaconvert_lambda aus und speichern Sie.

Schritt 5.4

Schritt 6: SNS-Benachrichtigungen für FAILED- oder SUCCESS-Jobs ergänzen. (Optional – wenn nicht benötigt, weiter zu Schritt 8 und testen.)

  • Legen Sie ein SNS Topic samt Subscription (E-Mail, Nachricht etc.) an und bestätigen Sie das Abonnement.

Schritt 6.1

Schritt 7 (optional): CloudWatch Event Rule anlegen, um den Status der MediaConvert-Jobs zu überwachen und Benachrichtigungen zu versenden

  • Legen Sie eine neue Regel mit Name und Beschreibung an. Wählen Sie als Event Source "AWS events or EventBridge partner events" sowie die unten gezeigte Selection Creation Method und das passende Event Pattern.

Schritt 7.1

Schritt 7.2

  • Wählen Sie das SNS Topic als Target aus.

Schritt 7.3

Schritt 8: Testen und prüfen. (inklusive Benachrichtigung, falls eingerichtet)

Laden Sie einige Mediendateien in den Source-S3-Bucket und beobachten Sie, wie Lambda für jede Datei einen MediaConvert-Job auslöst und die konvertierten Dateien anschließend im Ziel-Bucket erscheinen.

  • Mediendateien in den Source-S3-Bucket hochladen

Schritt 8.1

  • Lambda-Funktion löst MediaConvert-Jobs aus

Schritt 8.2

  • Die Mediendateien werden gemäß der hinterlegten job.json konvertiert. Die fertigen Dateien finden Sie im Ziel-Bucket.

Schritt 8.3

  • Benachrichtigung (falls eingerichtet)

Schritt 8.4

Fazit – Dieser Beitrag hat gezeigt, wie sich AWS Elemental MediaConvert mit AWS Lambda automatisieren lässt. Die vorgestellte Lösung startet Transcoding-Jobs in MediaConvert nahtlos, sobald neue Video-Uploads im S3 Bucket erkannt werden, und verschlankt so Ihren Media-Workflow.