Remarque :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification Oracle Cloud Infrastructure, la location et les compartiments. A la fin de votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
Intégration d'Oracle Cloud Infrastructure Container Instances à Oracle Cloud Infrastructure Events Service
Introduction
Le service Oracle Cloud Infrastructure (OCI) Events crée une automatisation en fonction des changements d'état des ressources. Par exemple, lorsqu'un nouveau fichier est téléchargé vers un bucket Object Storage, il peut créer automatiquement une fonction sans serveur en réponse à cet événement. La fonction sans serveur est une ressource légère avec un temps d'exécution limité. Dans certains cas d'emploi, elle peut ne pas disposer d'une puissance de calcul et d'un stockage suffisants, et elle est également limitée par une durée d'exécution de 5 minutes pour répondre pleinement à l'événement. Cependant, elle peut créer une instance de conteneur sans serveur dont le temps d'exécution est illimité et qui dispose de ressources de calcul et de stockage bien plus élevées.
Objectif
Créez une instance de conteneur OCI sans serveur avec OCI Events.
Architecture
Cet exemple montre comment créer automatiquement une instance de conteneur OCI lorsqu'un nouveau fichier média est téléchargé vers le bucket OCI Object Storage. L'événement émis exécute une fonction sans serveur. La fonction crée une instance de conteneur sans serveur qui démarre un conteneur de transcodage. Le conteneur de transcodage utilise le logiciel open source FFmpeg pour transcoder le fichier média selon plusieurs résolutions et des débits binaires différents. Il prend en charge les protocoles de transmission en continu HLS et DASH. Une fois terminé, il crée des listes de lecture pour différentes résolutions et taux de bits, crée un fichier manifeste maître et une miniature, et télécharge tous les fichiers vers le bucket de destination. Le flux de données complet est illustré ci-dessous :
Le transcodage de fichiers multimédias volumineux peut prendre beaucoup de temps et nécessite plus d'espace disque que la prise en charge des fonctions OCI. Par conséquent, le rôle de la fonction est de créer une instance de conteneur sans serveur qui peut exécuter efficacement le travail de transcodage.
Prérequis
Les fonctions OCI et les services d'instance de conteneur utilisent le principal de ressource AIM pour authentifier et accéder aux ressources OCI. Créez un groupe dynamique correspondant aux fonctions OCI et aux types de ressource d'instance de conteneur dans un compartiment donné. Utilisez la règle de mise en correspondance suivante :
All{resource.compartment.id = 'compartment-id', Any{resource.type = 'fnfunc', resource.type ='computecontainerinstance'}}
où, l'ID de compartiment est l'OCID de votre compartiment. Vous pouvez obtenir l'OCID de compartiment dans la console OCI à partir d'Identité et de la sécurité. Sous Identité, cliquez sur Compartiments. Une hiérarchie de compartiment dans votre location est affichée. Recherchez votre compartiment et copiez son OCID.
Après avoir créé le groupe dynamique, vous devez définir des Oracle Cloud Infrastructure Identity and Access Management (stratégies IAM OCI) spécifiques pour les services OCI qui peuvent être utilisés par le groupe dynamique.
Au minimum, les stratégies suivantes sont requises :
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
Tâche 1 : création d'une image de conteneur dans le registre OCI
-
Téléchargez le fichier spinup-container-instance-on-event.zip et décompressez-le sur un ordinateur client exécutant Docker.
-
Dans une fenêtre de terminal, accédez au répertoire
spinup-container-instance-on-event/container
et créez une image de conteneur locale en exécutant :docker build -t transcoder . --no-cache
-
Vérifiez que l'image de conteneur a été créée sur l'ordinateur local.
docker images
Dans la sortie de cette commande, vous devriez voir l'image "transcoder:latest" répertoriée.
-
Créez un jeton d'authentification et enregistrez-le dans vos enregistrements. Ensuite, créez un référentiel dans OCI Registry où l'image de conteneur sera stockée.
Remarque : le registre OCI doit se trouver dans le compartiment racine de la location et le compte utilisateur associé au jeton d'authentification aura besoin de privilèges appropriés pour le référentiel.
-
Connexion à Oracle Cloud Infrastructure Registry.
docker login <region-key>.ocir.io
où <region-key> est la clé de la région Oracle Cloud Infrastructure Registry que vous utilisez. Reportez-vous à la rubrique Disponibilité par région dans la documentation OCI Registry.
Lorsque vous êtes invité à saisir un nom utilisateur, entrez votre nom utilisateur au format
<tenancy-namespace>/<username>
. Si votre location est fédérée avec Oracle Identity Cloud Service, utilisez le format<tenancy-namespace>/oracleidentitycloudservice/<username>
.A l'invite de saisie du mot de passe, saisissez le jeton d'authentification que vous avez copié précédemment en tant que mot de passe.
-
Créez une balise vers l'image que vous allez propager vers OCI Registry.
docker tag transcoder:latest <region-key>.ocir.io/<tenancy-namespace>/<repo-name>/transcoder:latest
-
propager l'image de conteneur vers le registre OCI,
docker push <region-key>.ocir.io/<tenancy-namespace>/<repo-name>/transcoder:latest
Pour plus de détails, reportez-vous à Procédure d'envoi d'images à l'aide de l'interface de ligne de commande Docker.
Tâche 2 : création d'une infrastructure réseau pour les fonctions OCI et les instances de conteneur
Créez un VCN avec un sous-réseau qui sera utilisé par les services d'instance de conteneur et OCI Functions. Notez qu'un sous-réseau public nécessite une passerelle Internet dans l'VCN et qu'un sous-réseau privé nécessite une passerelle de service dans le VCN. Pour plus d'informations, voir :
Tâche 3 : création de l'application OCI Functions
-
Créez une application OCI fn attachée au sous-réseau que les fonctions OCI et les services d'instance de conteneur utiliseront. Dans ce tutoriel, nous avons nommé l'application "process-new-file".
-
Dans la fenêtre de terminal sur l'ordinateur client, installez fn project CLI.
-
Accédez au répertoire
spinup-container-instance-on-event/function
et modifiez le fichierfunc.yaml
. Définissez les valeurs des variables d'environnement :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>
-
Enregistrez le fichier et déployez la fonction
create-container-instance
.fn deploy --app process-new-file
Tâche 4 : création d'une règle d'événement OCI
Dans la console OCI, créez une règle d'événement qui se déclenche lorsqu'un nouveau fichier est téléchargé vers le bucket Object Storage. Voici un exemple de règle d'événement :
Le bucket d'entrée doit être un bucket Object Storage existant dans lequel les fichiers de média d'entrée sont téléchargés.
Tâche 5 : Tester le flux
Téléchargez un nouveau fichier vers le bucket d'entrée. Peu de temps après, vous devriez voir que l'événement OCI new-file-upload
est émis. Voici une capture d'écran des mesures d'événement OCI :
Il déclenche l'exécution de la fonction create-container-instance
que vous pouvez voir dans les mesures OCI Functions :
Cette fonction crée une instance de conteneur "transcode" à l'aide de la forme d'instance de conteneur configurée :
Le conteneur démarré télécharge le fichier de média à partir du bucket Object Storage et le transcode vers 3 résolutions et débits différents.
-
5 Mbit/s 1080p
-
3 Mbit/s 720p
-
360p 1Mbit/s
Il crée un dossier dans le bucket Object Storage de sortie avec le nom du fichier d'entrée et télécharge les fichiers de liste de lecture pour chaque flux (résolution et débit binaire) vers ce dossier. Exemple :
A la fin, il crée une miniature du contenu du média et le télécharge vers le dossier thumbnails
du bucket de sortie.
Remarque : cet exemple utilise du codec H.264, mais il peut être utilisé avec d'autres codecs pris en charge par FFmpeg. Vous pouvez définir la bibliothèque de codec dans le fichier
spinup-container-instance-on-event/container/transcode.sh
avant de créer l'image de conteneur (reportez-vous à la tâche 1).
Pour le dépannage, vous pouvez activer la journalisation dans l'application OCI fn. Une fois l'instance de conteneur créée, vous pouvez visualiser les journaux du conteneur de transcodage pendant l'exécution du conteneur.
Liens connexes
Remerciements
Auteur - Michael Prestin (architecte cloud principal maître)
Ressources de formation supplémentaires
Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour consulter la documentation produit, consultez 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.