Remarque :

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 :

Image1

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

  1. Téléchargez le fichier spinup-container-instance-on-event.zip et décompressez-le sur un ordinateur client exécutant Docker.

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

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

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

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

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

  2. Dans la fenêtre de terminal sur l'ordinateur client, installez fn project CLI.

  3. Accédez au répertoire spinup-container-instance-on-event/function et modifiez le fichier func.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>
    
  4. 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 :

Image2

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 :

Image3

Il déclenche l'exécution de la fonction create-container-instance que vous pouvez voir dans les mesures OCI Functions :

Image4

Cette fonction crée une instance de conteneur "transcode" à l'aide de la forme d'instance de conteneur configurée :

Image5

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.

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 :

Image6

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.

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.