Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Anmelden für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Oracle Cloud Infrastructure Container Instances mit Oracle Cloud Infrastructure Events Service integrieren
Einführung
Oracle Cloud Infrastructure (OCI) Events Service erstellt Automatisierung basierend auf den Statusänderungen von Ressourcen. Beispiel: Wenn eine neue Datei in einen Object Storage-Bucket hochgeladen wird, kann sie automatisch eine serverlose Funktion als Antwort auf dieses Ereignis erstellen. Die serverlose Funktion ist eine Lightweight-Ressource mit einer begrenzten Ausführungszeit. In bestimmten Anwendungsfällen hat es möglicherweise keine ausreichende Rechenleistung und keinen ausreichenden Speicher, und es ist auch durch eine Begrenzung der Ausführungszeit von 5 Minuten begrenzt, um vollständig auf das Ereignis zu reagieren. Sie kann jedoch eine serverlose Containerinstanz mit einer unbegrenzten Ausführungszeit und wesentlich höheren Compute- und Speicherressourcen erstellen.
Zielsetzung
Erstellen Sie eine serverlose OCI-Containerinstanz mit OCI-Ereignissen.
Architektur
In diesem Beispiel wird gezeigt, wie Sie eine OCI-Containerinstanz automatisch erstellen, wenn eine neue Mediendatei in den OCI Object Storage-Bucket hochgeladen wird. Das ausgegebene Ereignis führt eine serverlose Funktion aus. Die Funktion erstellt eine serverlose Containerinstanz, die einen Transcodierungscontainer startet. Der Transcodierungscontainer verwendet die Open Source-Software FFmpeg, um die Mediendatei in mehrere Auflösungen und verschiedene Bitraten zu transcodieren. Sie unterstützt sowohl HLS- als auch DASH-Streamingprotokolle. Nach Abschluss werden Wiedergabelisten für verschiedene Auflösungen und Bitraten erstellt, eine Mastermanifestdatei und ein Thumbnail erstellt und alle Dateien in den Ziel-Bucket hochgeladen. Der vollständige Datenfluss ist im folgenden Bild dargestellt:
Die Transcodierung großer Mediendateien kann sehr zeitaufwendig sein und erfordert mehr Speicherplatz als OCI Functions. Daher ist es die Rolle der Funktion, eine serverlose Containerinstanz zu erstellen, die den Transcodierungsjob effizient ausführen kann.
Voraussetzungen
Sowohl OCI Functions als auch Containerinstanzservices verwenden den AIM-Ressourcen-Principal für die Authentifizierung und den Zugriff auf OCI-Ressourcen. Erstellen Sie eine dynamische Gruppe, die mit OCI-Funktionen und Containerinstanzressourcentypen in einem bestimmten Compartment übereinstimmt. Verwenden Sie die folgende Vergleichsregel:
All{resource.compartment.id = 'compartment-id', Any{resource.type = 'fnfunc', resource.type ='computecontainerinstance'}}
Dabei ist die Compartment-ID die OCID Ihres Compartments. Sie können die Compartment-OCID in der OCI-Konsole aus Identity and Security abrufen. Klicken Sie unter Identität auf Compartments. Eine Compartment-Hierarchie in Ihrem Mandanten wird angezeigt. Suchen Sie das Compartment, und kopieren Sie die zugehörige OCID.
Nachdem Sie die dynamische Gruppe erstellt haben, müssen Sie bestimmte Oracle Cloud Infrastructure Identity and Access Management (OCI-IAM-Policys) für OCI-Services festlegen, die von der dynamischen Gruppe verwendet werden können.
Mindestens folgende Policys sind erforderlich:
Allow dynamic-group <dynamic group name> to manage object-family in compartment id <compartment OCID>
Allow dynamic-group <dynamic group name> to manage compute-container-family in compartment id <compartment OCID>
Allow dynamic-group <dynamic group name> to use virtual-network-family in compartment id <compartment OCID>
Allow dynamic-group <dynamic group name> to read repos in tenancy
Aufgabe 1: Containerimage in OCI-Registry erstellen
-
Laden Sie die Datei spinup-container-instance-on-event.zip herunter, und dekomprimieren Sie sie auf einem Clientrechner, auf dem Docker ausgeführt wird.
-
Gehen Sie in einem Terminalfenster zum Verzeichnis
spinup-container-instance-on-event/container
, und erstellen Sie ein lokales Containerimage, indem Sie Folgendes ausführen:docker build -t transcoder . --no-cache
-
Prüfen Sie, ob das Containerimage auf dem lokalen Rechner erstellt wurde.
docker images
In der Ausgabe dieses Befehls sollte das Bild "transcoder:latest" angezeigt werden.
-
Erstellen Sie ein Authentifizierungstoken, und speichern Sie es in Ihren Datensätzen. Danach erstellen Sie ein Repository in der OCI-Registry, in dem das Containerimage gespeichert wird.
Hinweis: Die OCI-Registry muss sich im Root Compartment des Mandanten befinden, und der mit dem Authentifizierungstoken verknüpfte Benutzeraccount benötigt die relevanten Berechtigungen für das Repository.
-
Melden Sie sich bei Oracle Cloud Infrastructure Registry an.
docker login <region-key>.ocir.io
Dabei ist <region-key> der Schlüssel für die von Ihnen verwendete Oracle Cloud Infrastructure Registry-Region. Weitere Informationen finden Sie unter dem Thema Verfügbarkeit nach Region in der OCI-Registry-Dokumentation.
Wenn Sie zur Eingabe des Benutzernamens aufgefordert werden, geben Sie Ihren Benutzernamen im Format
<tenancy-namespace>/<username>
ein. Wenn Ihr Mandanten mit Oracle Identity Cloud Service föderiert wird, verwenden Sie das Format<tenancy-namespace>/oracleidentitycloudservice/<username>
.Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, geben Sie das zuvor als Kennwort kopierte Authentifizierungstoken ein.
-
Erstellen Sie ein Tag für das Image, das Sie an OCI Registry übergeben möchten.
docker tag transcoder:latest <region-key>.ocir.io/<tenancy-namespace>/<repo-name>/transcoder:latest
-
Übertragen Sie das Containerimage an die OCI-Registry.
docker push <region-key>.ocir.io/<tenancy-namespace>/<repo-name>/transcoder:latest
Weitere Details finden Sie unter Images mit der Docker-CLI per Push übergeben
Aufgabe 2: Netzwerkinfrastruktur für OCI-Funktionen und Containerinstanzen erstellen
Erstellen Sie ein VCN mit einem Subnetz, das von OCI Functions und Containerinstanzservices verwendet wird. Beachten Sie, dass für ein öffentliches Subnetz ein Internetgateway im VCN erforderlich ist und für ein privates Subnetz ein Servicegateway im VCN erforderlich ist. Weitere Informationen finden Sie unter:
Aufgabe 3: OCI Functions-Anwendung erstellen
-
Erstellen Sie eine OCI fn-Anwendung, die an das Subnetz angehängt ist, das OCI Functions und Containerinstanzservices verwenden. In diesem Tutorial haben wir die Anwendung "process-new-file" genannt.
-
Installieren Sie im Terminalfenster auf dem Clientrechner das CLI-Projekt.
-
Gehen Sie zum Verzeichnis
spinup-container-instance-on-event/function
, und bearbeiten Sie die Dateifunc.yaml
. Legen Sie die Werte der Umgebungsvariablen fest:AVAILABILITY_DOMAIN: <name of the availability domain> COMPARTMENT_ID: <compartment OCID> SHAPE: <container instance shape, currently supported shapes are CI.Standard.E4.Flex and CI.Standard.E3.Flex> CONFIG_SHAPE_MEMORY: <amount of memory (GB)> CONFIG_SHAPE_OCPUS: <number of OCPUs> IMAGE_URL: <URL of the container image in OCI registry> OUTPUT_BUCKET: <name of the output Object Storage bucket where the transcoded files will be stored> STREAMING_PROTOCOL: <HLS or DASH> SUBNET_ID: <subnet OCID>
-
Speichern Sie die Datei, und stellen Sie die Funktion
create-container-instance
bereit.fn deploy --app process-new-file
Aufgabe 4: OCI-Ereignisregel erstellen
Erstellen Sie in der OCI-Konsole eine Ereignisregel, die ausgelöst wird, wenn eine neue Datei in den Object Storage-Bucket hochgeladen wird. Im Folgenden finden Sie ein Beispiel für die Ereignisregel:
Der Eingabe-Bucket muss ein vorhandener Object Storage-Bucket sein, in den die Eingabemediendateien hochgeladen werden.
Aufgabe 5: Ablauf testen
Laden Sie eine neue Datei in den Eingabe-Bucket hoch. Kurz danach sollte angezeigt werden, dass das OCI-Ereignis new-file-upload
ausgegeben wird. Im Folgenden finden Sie einen Screenshot aus OCI-Ereignismetriken:
Sie löst die Ausführung der Funktion create-container-instance
aus, die in den OCI Functions-Metriken angezeigt werden kann:
Mit dieser Funktion wird eine neue Containerinstanz "transcodieren" mit der konfigurierten Containerinstanzausprägung erstellt:
Der gestartete Container lädt die Mediendatei aus dem Object Storage-Bucket herunter und überträgt sie in 3 verschiedene Auflösungen und Bitraten.
-
1080p 5Mbit/s
-
720 p 3 MBit/s
-
360 p 1 MBit/s
Er erstellt einen neuen Ordner im Object Storage-Ausgabe-Bucket mit dem Namen der Eingabedatei und lädt die Wiedergabelistendateien für jeden Stream (Auflösung und Bitrate) in diesen Ordner hoch. Es folgt ein einfaches Beispiel:
Am Ende wird ein Thumbnail des Medieninhalts erstellt und in den Ordner thumbnails
des Ausgabe-Buckets hochgeladen.
Hinweis: In diesem Beispiel wird H.264 Codec verwendet. Es kann jedoch mit anderen Codecs verwendet werden, die von FFmpeg unterstützt werden. Sie können die Codec-Bibliothek in der Datei
spinup-container-instance-on-event/container/transcode.sh
festlegen, bevor Sie das Containerimage erstellen (siehe Aufgabe 1).
Zur Fehlerbehebung können Sie das Logging in der OCI fn-Anwendung aktivieren. Nachdem die Containerinstanz erstellt wurde, können Sie Logs des Transcodierungscontainers anzeigen, während der Container ausgeführt wird.
Verwandte Links
Danksagungen
Autor - Michael Prestin (Master Principal Cloud Architect)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Integrate Oracle Cloud Infrastructure Container Instances with Oracle Cloud Infrastructure Events Service
F86113-01
August 2023
Copyright © 2023, Oracle and/or its affiliates.