Remarques :
- 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, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
Publication d'un message dans OCI Notifications, déclenchement d'une fonction et création d'un fichier dans le bucket OCI Object Storage
Introduction
Vous pouvez configurer un service de publication/abonnement tel qu'Oracle Cloud Infrastructure (OCI) Notifications qui propage des messages vers des adresses capables d'alerter et d'agir via un abonnement configuré. Il ne prend pas uniquement en charge l'utilisation d'Oracle Cloud Infrastructure Monitoring ou d'OCI Connector Hub les cas, mais aussi les événements peuvent être générés à partir des applications client, des messages d'API qui doivent représenter une action immédiate à exécuter lorsque l'application envoie un message lorsqu'un événement déclenche OCI Notifications.
L'architecture peut être plus ou moins complexe, mais pour ce cas d'utilisation, le client effectue une demande HTTP POST, en envoyant dans le corps un JSON qui a certains attributs à Créez un fichier, tel que le nom du fichier, le nom du bucket dans lequel créer le fichier dans OCI Object Storage et le message qui sera à l'intérieur du fichier.
Ensuite, l'application REST d'API déployée dans Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) et développée dans Node.js
obtient le JSON à partir du corps de la demande et, dans cette application, les bibliothèques OCI sont utilisées pour publier un message dans OCI Notifications dont une fonction Node.js
est déjà abonnée et développée pour créer le fichier texte dans un bucket spécifique dans OCI Object Storage avec les paramètres JSON envoyés.
Architecture OCI
Architecture de cas d'emploi
Dans ce tutoriel, nous allons commencer la configuration à partir du dernier service jusqu'à atteindre le premier dans Oracle Cloud Infrastructure (OCI) :
-
OCI Object Storage
-
OCI Functions
-
Notifications OCI
-
Oracle Cloud Infrastructure Container Engine for Kubernetes
Objectifs
-
Créez un bucket OCI Object Storage.
-
Configurez et créez des fonctions OCI.
-
Configurez, développez et propagez des fonctions OCI à l'aide du kit de développement de fonctions (FDK) Node.js pour créer un fichier texte dans un bucket spécifique à partir de paramètres JSON.
-
Créez un sujet dans OCI Notifications et créez un abonnement associant une instance OCI Functions en tant qu'adresse.
-
Créez et configurez un cluster Kubernetes dans OKE.
-
Développez et déployez une application REST d'API dans Node.js pour obtenir le fichier JSON à partir du corps de la demande HTTP POST et publier ce corps JSON en tant que message dans OCI Notifications.
-
Demandez HTTP POST avec un corps JSON à l'URL affichée dans l'équilibreur de charge de l'application REST d'API.
Prérequis
-
Accès à un locataire OCI. Pour créer un compte Oracle Cloud gratuit, reportez-vous à Création d'un compte Oracle Cloud gratuit.
-
Installation de l'interface de ligne de commande OCI Pour plus d'informations, reportez-vous à Installation de l'interface de ligne de commande OCI.
-
Créez un VCN avec des sous-réseaux publics et privés. Pour plus d'informations, reportez-vous à Création d'un VCN et à Création d'un sous-réseau.
-
Créez une table de routage pour le trafic d'accès Internet avec la passerelle Internet. Pour plus d'informations, reportez-vous à Tables de routage VCN et à Passerelle Internet.
-
Créez un compartiment dans lequel vous pouvez regrouper vos services OCI. Pour plus d'informations, reportez-vous à Création d'un compartiment.
Tâche 1 : création d'un bucket dans OCI Object Storage
-
Connectez-vous à la console OCI, accédez à Stockage, Object Storage et Archive Storage, Buckets et sélectionnez le compartiment de votre préférence.
-
Cliquez sur Créer un bucket et entrez les informations suivantes.
- Nom du compartiment : entrez le nom du compartiment. Par exemple,
data
ou un autre nom. - Niveau de stockage par défaut : pour ce tutoriel, sélectionnez Standard.
- Cryptage : sélectionnez Crypter à l'aide des clés gérées Oracle.
- Journalisation des ressources : sélectionnez Journalisation des ressources activée pour pouvoir observer ce qui se passe dans le bucket.
- Nom du compartiment : entrez le nom du compartiment. Par exemple,
Tâche 2 : configurer et créer des fonctions OCI
-
Accédez à la console OCI, accédez à Services de développeur, à Fonctions, à Applications et sélectionnez Compartiment.
-
Cliquez sur Créer une application et entrez les informations suivantes.
- Nom : entrez le nom de l'application de fonction.
- VCN : sélectionnez le VCN créé au cours des prérequis.
- Sous-réseaux : sélectionnez le sous-réseau créé lors des prérequis. Dans ce tutoriel, nous avons configuré un sous-réseau public.
- Forme : sélectionnez la forme associée au processeur pris en charge par cette application. Pour ce tutoriel, il s'agit de
GENERIC_X86
.
-
Activez les journaux pour suivre l'exécution et voir les erreurs de l'application OCI Functions. Ainsi, dans les détails de l'application de fonction, sous Ressources, cliquez sur Journaux et sélectionnez Activer le journal pour configurer le compartiment, le groupe de journaux, le nom du journal et l'heure de la conservation de journal.
Tâche 3 : configurer, développer et propager des fonctions OCI à l'aide de FDK Node.js pour créer un fichier texte
Configurez, développez et propagez des fonctions OCI à l'aide de FDK Node.js pour créer un fichier texte dans un bucket spécifique à partir de paramètres JSON.
Remarque : configurez votre client, par exemple : Bureau, PC, ordinateur portable ou machine virtuelle, ainsi que le contexte de votre fonction dans laquelle vous allez travailler avec le projet Fn, car OCI Functions est optimisé par le moteur open source du projet Fn afin d'effectuer des opérations de création, de lecture, de mise à jour et de suppression sur OCI Functions.
Nous utiliserons une machine virtuelle Oracle Linux 8 (hôte admin) dans OCI comme indiqué dans l'architecture dans Introduction.
-
Accédez à la console OCI, accédez à Services de développeur, à Fonctions, à Applications et cliquez sur l'application de fonction.
-
Sous la section Ressources, cliquez sur Mise en route et sélectionnez Configuration locale pour utiliser une machine virtuelle Oracle Linux externe.
Remarque : vous devez avoir installé les composants suivants.
-
OCI Command Line Interface (CLI).
-
Node.js dans Oracle Linux.
sudo yum update sudo yum install -y nodejs node --version
La version de Node.js doit être prise en charge par OCI FDK Functions.
Si la version n'est pas prise en charge, il est nécessaire d'exécuter les commandes suivantes.
Par exemple :
sudo yum module reset nodejs sudo yum module enable nodejs:18 sudo yum module install nodejs
-
Interface de ligne de commande du projet Fn installée dans votre machine virtuelle. Pour plus d'informations, reportez-vous à la section Installing the Fn Project CLI.
-
-
Créez votre projet dans le langage de programmation souhaité. Dans ce tutoriel, nous utiliserons Node.js. Pour créer un projet, exécutez la commande suivante.
fn init --runtime node "Name_Of_Your_Project"
Par exemple :
fn init --runtime node app_mess_createFile_os_function
-
Pour accéder au dossier du projet, exécutez la commande suivante.
cd "Name_Of_Your_Project"/
Par exemple :
cd app_mess_createFile_os_function/
-
Créez et mettez à jour un contexte spécifique pour notre compartiment et l'URL d'API Oracle Functions pour votre région indiquée dans Mise en route.
fn create context "specific_context" --provider oracle
fn use context "specific_context"
fn update context "your_compartment_id"
fn update context api-url "your_api_url"
Par exemple :
fn create context Developer_OCI --provider oracle
fn use context Developer_OCI
fn update context oracle.compartment-id ocid1.compartment.oc1..aaaaaaaa4ixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
fn update context api-url https://functions.sa-vinhedo-1.oraclecloud.com
-
Entrez le chemin du registre de conteneurs Oracle Cloud Infrastructure vers lequel propager l'image d'application.
Remarque : si vous ne disposez pas d'Oracle Cloud Infrastructure Container Registry, vous devez créer ce référentiel pour propager l'image de fonction.
-
Accédez à Services de développeur, à Conteneurs et artefacts, à Container Registry et cliquez sur Créer un référentiel.
-
Entrez les informations suivantes et cliquez sur Créer.
- Créer dans le compartiment : sélectionnez votre compartiment,
- Accès : sélectionnez Public.
- nom du référentiel : entrez le nom du référentiel.
Une fois que vous êtes sûr qu'Oracle Cloud Infrastructure Container Registry a été créé, définissez le chemin de ce référentiel jusqu'à ce que le préfixe soit placé dans le contexte.
fn update context registry "regionID.ocir.io/tenancy_namespace/[repo-name-prefix]"
Par exemple :
fn update context registry vcp.ocir.io/idccixxxxx/apigwrepo
-
-
Connectez-vous à Oracle Cloud Infrastructure Container Registry.
Remarque : pour vous connecter, créer, extraire et transmettre des images au référentiel, vous devez disposer des éléments suivants :
-
Docker installé. Pour plus d'informations, reportez-vous à la section Installation de Docker sur Oracle Linux 8/7.
-
Le nom utilisateur Oracle Cloud Infrastructure et un jeton d'authentification ont été créés. Pour plus d'informations, reportez-vous à obtention d'un jeton d'authentification.
Exécutez la commande suivante pour vous connecter à Oracle Cloud Infrastructure Container Registry.
sudo docker login -u 'tenancy_namespace/username' regionID.ocir.io
Password: xxxxxx
Exemple (Dans cet exemple, le nom utilisateur est fédéré avec Oracle Identity Cloud Service et doit donc être inclus) :
sudo docker login -u 'idccixxxxx/OracleIdentityCloudService/ivan.v.vasquez@oracle.com' vcp.ocir.io
Password: xxxxxx
-
-
Une fois que vous avez configuré OCI Functions, nous développerons le programme Node.js pour créer un fichier texte dans un bucket spécifique.
Nous avons créé le projet fonctionnel dans la tâche 3.3, il crée les fichiers suivants dans le dossier du projet :
func.js
(Dans ce fichier, nous écrivons la logique du projet node.js).func.yaml
(fichier de configuration de la fonction).package.json
(Ce fichier indique les dépendances Node.js requises pour la logique du projet).
Dans ce projet, nous devrons ajouter les dépendances de kit SDK OCI Node.js suivantes : oci-objectstorage et oci-common. Exécutez la commande suivante pour installer les dépendances.
npm install oci-common
npm install oci-objectstorage
Les dépendances ajoutées dans le fichier
package.json
sont visibles.Nous allons nous authentifier dans OCI à partir du code à l'aide du fichier de configuration, comme pour le processus de configuration de l'interface de ligne de commande OCI, où les clés et le fichier de configuration ont été placés dans le dossier du projet Fn.
Vous trouverez ci-dessous le code source Node.js et les détails de chaque fragment de code sont expliqués avec des commentaires.
-
func.js
.//Dependencies are added const fdk= require('@fnproject/fdk'); const os = require("oci-objectstorage"); const common = require("oci-common"); //method invoked when is triggered the function fdk.handle(async function(input){ try{ //declaration of constants such as tenancy namespace and region const namespace = 'idccixxxxx'; const region = 'sa-vinhedo-1'; //declaration of variables required such as bucket name, file name and text for create the file text in a specific bucket let bucketName = 'data'; let objectName = 'empty.txt'; let fileMessage = 'Empty!' //Getting json values from input variable if (input.objectName) { objectName = input.objectName; } if (input.bucketName){ bucketName = input.bucketName; } if (input.fileMessage){ fileMessage = input.fileMessage; } //Creation of Authentication, using Config File Authentication Object const configurationFilePath = "config"; const configProfile = "DEFAULT"; const provider = new common.ConfigFileAuthenticationDetailsProvider( configurationFilePath, configProfile ); //Creation of Object Storage Client using authentication object const client = new os.ObjectStorageClient({authenticationDetailsProvider: provider}); client.regionId = region; //The object to upload to the object store. const putObjectRequest = { namespaceName: namespace, //namespace of your object storage bucketName: bucketName, //name of the bucket where the file will be placed objectName: objectName, //name of the text file putObjectBody: generateStreamFromString(fileMessage) //The body that will be uploaded in the object stored }; //Put the text file object in the object storage specified const response = await client.putObject(putObjectRequest); return {'message': 'Bucket Name: ' + bucketName+' - FileName: '+objectName+ ' \nMessage: '+fileMessage} }catch (error) { console.error('Error uploading to Object Storage:', error); } }) //return ReadableStream object required by putObjectBody, using the string message that will write in the text file function generateStreamFromString(data) { let Readable = require("stream").Readable; let stream = new Readable(); stream.push(data); // the string you want stream.push(null); return stream; }
Remarque : téléchargez le projet OCI Functions à l'adresse suivante : app_mess_createFile_os_function.zip.
-
Le projet est créé. Assurez-vous de rester connecté à Oracle Cloud Infrastructure Container Registry. Nous allons créer et propager l'image dans Oracle Cloud Infrastructure Container Registry, et déployer cette fonction dans l'application OCI Functions.
-
Accédez à la console OCI, accédez à Services de développeur, à Fonctions, à Applications et cliquez sur l'application de fonction.
Sur notre ordinateur local, nous devons nous trouver dans le dossier de projet OCI Functions.
fn deploy --app name_of_your_function_application
Par exemple :
fn deploy --app fn-demo-apgw
-
Pour valider le déploiement de l'image dans Oracle Cloud Infrastructure Container Registry, accédez à la console OCI et accédez à Services de développeur, à Conteneurs et artefacts et à Container Registry.
Pour vérifier si la fonction est déployée dans l'application OCI Functions, accédez à la console OCI et accédez à Services de développeur, à Fonctions, à Applications, cliquez sur l'application de fonction et vérifiez que l'image y est référencée avec le chemin Oracle Cloud Infrastructure Container Registry.
-
-
Exécutez un test à partir de votre ordinateur local, la commande de projet Fn suivante simulant une entrée avec les paramètres fournis par un format JSON.
echo -n '{"jsonVariable": "value"}' | fn invoke application_function_name function_name
Par exemple :
echo -n '{"objectName": "tutorialFileText.txt", "bucketName":"data", "fileMessage":"This an example message, for this tutorial in the text file"}' | fn invoke fn-demo-apgw app_mess_createfile_os_function
Pour consulter le fichier créé dans le bucket, accédez à Stockage, Object Storage et Archive Storage, Buckets, cliquez sur le bucket et vérifiez que le fichier est présent.
Tâche 4 : création d'un sujet de notifications OCI et d'un abonnement associant des fonctions OCI en tant qu'adresse
-
Créez et utilisez OCI Notifications. Lorsqu'un message est publié dans un sujet de ce service, il génère un déclencheur vers une adresse. Ce point de terminaison sera la fonction créée dans la tâche 3.
Accédez à la console OCI, accédez à Services de développeur, à Intégration d'applications et à Notifications. Cliquez sur Créer une rubrique et saisissez le nom de cette rubrique.
-
Pour créer un abonnement pour ce sujet, cliquez sur le sujet et sur Créer un abonnement. Dans ce tutoriel, nous allons sélectionner
Functions
en tant qu'adresse. Vous pouvez sélectionner une adresse telle que Courriel, Slack, SMS, PagerDuty ou URL HTTPS et sélectionner le compartiment de fonction, l'application Oracle Functions et la fonction.Remarque : dans OCI Notifications, nous pouvons créer plusieurs abonnements avec une adresse différente si nécessaire.
-
A partir d'OCI Notifications, nous pouvons publier un message au format JSON avec les variables requises similaires à ce que nous avons fait dans la tâche 3 pour OCI Functions.
Accédez à la console OCI, accédez à Services de développeur, à Intégration d'applications et à Notifications. Cliquez sur le sujet et saisissez le message comme indiqué dans l'image suivante.
Pour effectuer une vérification dans votre bucket, accédez à Stockage, Object Storage et Archive Storage et Buckets. Cliquez sur votre bucket et vérifiez si le fichier est présent.
Tâche 5 : création et configuration d'un cluster Kubernetes dans Oracle Cloud Infrastructure Container Engine for Kubernetes
Dans cette tâche, nous allons créer un cluster Kubernetes simple. Pour plus d'informations, reportez-vous à la section Creation of OKE Cluster.
-
Accédez à la console OCI, accédez à Services de développeur, à Conteneurs et artefacts et cliquez sur Clusters Kubernetes (OKE).
-
Sur la page Clusters, cliquez sur Créer un cluster.
-
Il existe deux workflows pour créer le cluster. Cliquez sur Créer personnalisé et Soumettre.
-
Création rapide : cette opération est plus facile, plus rapide et déploie automatiquement tous les éléments requis par OKE pour son fonctionnement, tels que :
- Virtual Cloud Network (VCN)
- Passerelle Internet
- Passerelle NAT
- Passerelle de service
- Cluster Kubernetes
- Pool de noeuds et noeuds de processus actifs Kubernetes
-
Création personnalisée : pour les environnements d'entreprise, dans lesquels les clients disposent déjà de services, de réseaux et d'infrastructures, il est important de personnaliser le déploiement OKE, afin qu'il soit conforme à l'architecture client, aux ressources et qu'il respecte les meilleures pratiques.
Dans ce tutoriel, nous sélectionnerons Création personnalisée pour conserver l'architecture illustrée ci-dessus.
-
-
Entrez le nom, le compartiment et la version de Kubernetes du cluster, puis cliquez sur Suivant.
-
Sur la page Configuration réseau, entrez les informations suivantes et cliquez sur Suivant.
- Type de réseau : sélectionnez Réseau de pod natif VCN. Pour plus d'informations, reportez-vous à Réseau POD.
- VCN : sélectionnez votre VCN.
- Sous-réseaux : sélectionnez un sous-réseau public et un sous-réseau privé. Dans ce tutoriel, nous utilisons un sous-réseau public pour l'équilibreur de charge et un sous-réseau privé pour l'adresse d'API.
-
Sur la page Pools de noeuds, entrez les informations suivantes.
- Nom : entrez le nom du pool de noeuds.
- Compartiment : sélectionnez votre compartiment.
- Type de noeud : sélectionnez Géré. Pour plus d'informations, reportez-vous à Comparaison entre les noeuds virtuels et les noeuds gérés.
- Version : sélectionnez la version de Kubernetes.
- Configuration de placement de noeud :
- Domaine de disponibilité : configurez le domaine de disponibilité.
- Sous-réseau de noeud de processus actif : définissez le sous-réseau privé pour les noeuds qui seront créés dans ce pool de noeuds.
- Domaine de pannes : sélectionnez les domaines de pannes dans lesquels vous souhaitez distribuer les noeuds.
- Forme et image : sélectionnez une forme et une image pour nos noeuds de processus actif.
- Forme de noeud : sélectionnez
VM.Standard.E3.Flex Shape (16GB RAM memory and 1 OCPU)
. - Image : sélectionnez l'image
Oracle-Linux-8.9-2024.01.26-0-OKE-1.28.2-679
.
- Forme de noeud : sélectionnez
- Nombre de noeuds : entrez
1
. Pour ce tutoriel, 1 suffit. - Volume d'initialisation : nous ne modifierons pas les paramètres du volume d'initialisation.
- Communications de pod : sélectionnez un sous-réseau privé.
-
Vérifiez la configuration du cluster Kubernetes et cliquez sur Créer un cluster.
Remarque : avant de cliquer sur Créer un cluster, assurez-vous que toutes les règles de liste de sécurité entrante et sortante ont été configurées dans chaque sous-réseau OKE pour l'équilibreur de charge, l'adresse d'API et les noeuds de processus actif. Pour plus d'informations, reportez-vous à Configuration de ressources réseau pour la création et le déploiement de clusters.
Pour vérifier le cluster Kubernetes, accédez à Services de développeur, à Conteneurs et artefacts et à Clusters Kubernetes (OKE).
-
Pour accéder au cluster Kubernetes, cliquez sur le nom du cluster Kubernetes et sur Accéder au cluster.
Vous pouvez constater que l'accès à Cloud Shell est désactivé et que l'accès local est activé, car lorsque nous avons sélectionné le sous-réseau d'adresse d'API, nous avons choisi un sous-réseau privé, ce qui est plus sécurisé. La seule façon d'accéder au cluster Kubernetes est d'utiliser une machine locale. C'est donc exactement la configuration que nous utilisons dans ce tutoriel avec notre machine virtuelle Oracle Linux hôte d'administration. Sélectionnez Accès local.
Remarque : nous devons avoir installé l'interface de ligne de commande OCI, Docker et kubectl. Pour plus d'informations, reportez-vous à la section Installing kubectl.
-
Une fois l'hôte d'administration prêt, exécutez la commande suivante pour accéder au cluster Kubernetes à partir de votre ordinateur local.
-
Vérifiez la version de l'interface de ligne de commande OCI.
oci -v
-
Créez le répertoire kubeconfig dans votre répertoire de base.
mkdir -p $HOME/.kube
-
Créez un fichier kubeconfig avec une adresse privée native VCN.
oci ce cluster create-kubeconfig --cluster-id ocid1.cluster.oc1.sa-vinhedo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --file $HOME/.kube/config --region sa-vinhedo-1 --token-version 2.0.0 --kube-endpoint PRIVATE_ENDPOINT
-
Définissez la variable d'environnement kubeconfig.
export KUBECONFIG=$HOME/.kube/config
-
-
Pour vérifier l'accès au cluster Kubernetes, exécutez les commandes kubectl.
-
Obtention des noeuds de processus actif OKE.
kubectl get nodes
-
Obtenez les pods OKE.
kubectl get pods -A
-
Tâche 6 : développement et déploiement d'une application REST d'API dans Node.js et publication d'un message dans OCI Notifications
Dans ce tutoriel, nous allons développer et déployer une application REST d'API dans Node.js pour obtenir le JSON à partir du corps de la demande HTTP Post et publier ce corps JSON en tant que message dans OCI Notifications.
Nous allons créer un projet Node.js, créer le projet, le propager vers Oracle Cloud Infrastructure Container Registry et le déployer dans OKE. Nous allons utiliser un hôte d'administration Oracle Linux existant configuré pour OCI Functions. Nous avons donc déjà installé Node.js et Docker.
-
Exécutez les commandes suivantes pour créer un dossier avec le nom de notre projet dans le répertoire de base de l'ordinateur local et accédez au dossier du projet.
mkdir api_rest_application_oke
cd api_rest_application_oke
-
Pour initialiser un projet, exécutez la commande suivante et configurez le fichier
package.json
comme indiqué dans l'image suivante.npm init
-
Avant de développer le code Node.js, nous devons installer les bibliothèques requises pour le projet.
-
L'application REST API doit fonctionner comme une application Web. Nous aurons donc besoin d'une bibliothèque express.
npm install express
-
Nous devrons obtenir le corps JSON à partir de la demande HTTP POST. Nous aurons donc besoin de la bibliothèque body-parser.
npm install body-parser
-
L'application devra s'authentifier auprès d'OCI pour avoir accès à ses services. Nous aurons donc besoin de la bibliothèque oci-common.
npm install oci-common
-
Pour publier un message dans OCI Notifications provenant du corps de la demande, nous avons besoin de la bibliothèque oci-ons.
npm install oci-ons
Notre
package.json
possède les dépendances suivantes. -
-
Une fois le projet Node.js configuré, nous pouvons créer notre code dans le fichier
index.js
. Voici le code source.Nous allons nous authentifier dans OCI à partir du code à l'aide du fichier de configuration, comme pour la configuration de l'interface de ligne de commande OCI. Dans les deux cas, les clés et le fichier de configuration sont placés dans le dossier de projet d'application REST d'API, comme indiqué dans l'image suivante.
-
index.js
.//Dependencies are added const ons = require("oci-ons"); //oci notifications library const common = require("oci-common"); //oci authentication library const express = require('express'); //web application framework const bodyParser = require('body-parser');//extract information from an incoming HTTP request //invocation of express framework const app = express(); //definition of port that We will be used to listen the requests from the client side const port = 8080; //Create a default authentication provider that uses the DEFAULT const provider = new common.ConfigFileAuthenticationDetailsProvider( "config", "DEFAULT" ); //Use in the body HTTP POST request json format app.use(bodyParser.json()); //creation of POST endpoint app.post('/api/receive-json', (req, res) => { const jsonData = req.body; //If the Body is empty or not json format return error if (!jsonData) { return res.status(400).json({ error: 'Invalid JSON data in the request body' }); } (async () => { try { // Create OCI Notifications Client with OCI Authentication Object const client = new ons.NotificationDataPlaneClient({ authenticationDetailsProvider: provider }); // Create constant message object required for OCI Notifications const messageDetails = { title: "PUBLISH_MESSAGE", //Message Title body: JSON.stringify(jsonData) //Body Message }; //Create publish Message Request in a specific topic in OCI Notifications const publishMessageRequest = ons.requests.PublishMessageRequest = { topicId: "ocid1.onstopic.oc1.sa-vinhedo-1.amaaaaaan4xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", messageDetails: messageDetails }; //Publish Message sending Publish Message Request object previously created const publishMessageResponse = await client.publishMessage(publishMessageRequest); } catch (error) { //error log console.log("publishMessage Failed with error " + error); } })(); res.json({ success: true, message: 'JSON data received successfully' }); }); //listening for a specific port app.listen(port, () => { console.log(`Server is running at http://localhost:${port}`); });
-
-
Dans le même dossier, créez
Dockerfile
, ce qui nous permettra de créer une image de conteneur.FROM node:14 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 CMD [ "node", "index.js" ]
-
Créez et propagez l'image du projet dans le référentiel Docker local.
docker build . -t apirestapp:latest
Vérifiez l'image dans le référentiel Docker local.
docker images
Remarque :
-
Vous devez disposer d'Oracle Cloud Infrastructure Container Registry. Reportez-vous à la tâche 3.6.
-
Vous devez être connecté à Oracle Cloud Infrastructure Container Registry, car nous utilisons le même hôte d'administration de machine local que celui auquel nous devrions être connectés. Reportez-vous à la tâche 3.7.
-
-
Nous pouvons baliser l'image d'application REST d'API dans Oracle Cloud Infrastructure Container Registry.
docker tag apirestapp:latest vcp.ocir.io/idccixxxxx/oke_application/oke_apirest_application_repository:latest
Vérifiez dans le référentiel Docker local.
docker images
Poussez l'image vers Oracle Cloud Infrastructure Container Registry.
docker push vcp.ocir.io/idccixxxxx/oke_application/oke_apirest_application_repository:latest
Pour consulter l'application d'image OKE dans Oracle Cloud Infrastructure Container Registry, accédez à Services de développeur, à Conteneurs et artefacts et à Container Registry.
-
Une fois l'image dans Oracle Cloud Infrastructure Container Registry, nous pouvons accéder à notre hôte d'administration de machine virtuelle Oracle Linux local et déployer cette image dans OKE. Pour ce tutoriel, exécutez la commande suivante afin de créer l'espace de noms et la clé secrète pour OKE.
-
Accédez au dossier du projet.
cd api_rest_application_oke/
-
Créez un espace de noms pour OKE.
kubectl create namespace ns-tutorial
-
Vérifiez l'espace de noms.
kubectl get namespace ns-tutorial
-
Créez une clé secrète pour OKE.
kubectl create secret -n ns-tutorial generic ocir --from-file=.dockerconfigjson=../.docker/config.json --type=kubernetes.io/dockerconfigjson
-
Vérifiez la clé secrète.
kubectl get secrets -A
-
-
L'environnement OKE est déjà prêt. Déployez donc l'image d'application d'Oracle Cloud Infrastructure Container Registry vers OKE.
Remarque : pour déployer l'image d'application, vous devez disposer d'un fichier manifeste. Dans ce tutoriel, le fichier
yaml
suivant est le fichier manifeste. Il est utilisé pour déployer l'application et créer le service entrant représenté dans un équilibreur de charge OCI qui écoute à l'aide du port80
.-
apirest_application_manifest.yaml
.apiVersion: apps/v1 kind: Deployment metadata: name: app-restapi namespace: ns-tutorial labels: app: app-restapi spec: replicas: 1 selector: matchLabels: app: app-restapi template: metadata: labels: app: app-restapi spec: containers: - name: app-restapi image: vcp.ocir.io/idccixxxxx/oke_application/oke_apirest_application_repository:latest ports: - containerPort: 8080 imagePullSecrets: - name: ocir apiVersion: v1 kind: Service metadata: name: svc-restapp namespace: ns-tutorial spec: selector: app: app-restapi ports: - port: 80 targetPort: 8080 type: LoadBalancer
-
Exécutez la commande kubectl dans le dossier où vous avez enregistré le fichier manifeste.
kubectl apply -f apirest_application_manifest.yaml
Maintenant, l'application est déployée et le service d'équilibreur de charge entrant est créé dans OKE,
-
Pour valider le pod et le service créés dans OKE, exécutez la commande suivante.
kubectl get pods -A
kubectl get svc -A
Remarque : téléchargez le projet d'application REST d'API à l'adresse suivante : api_rest_application_oke.zip.
-
Tâche 7 : demander HTTP POST avec corps JSON vers l'URL affichée dans l'équilibreur de charge de l'application REST d'API
Dans cette tâche, nous allons effectuer une demande HTTP POST avec le corps de message JSON du client Postman qui contient les données de base pour créer un fichier dans un bucket. Cette demande sera envoyée à l'application REST d'API dans OKE et la propagation du message dans la rubrique Notifications OCI déclenchera une fonction avec la logique permettant de créer un fichier texte dans un bucket spécifique, comme illustré dans l'architecture dans Introduction.
-
Pour installer Postman, reportez-vous à la section Postman Installation.
-
Ouvrez l'application Postman.
-
Dans le menu latéral, cliquez sur Fichier et sélectionnez Nouveau.
-
Sélectionnez HTTP.
-
Entrez l'URL affichée par l'application REST d'API déployée dans OKE :
http://"IP ADDRESS LOAD BALANCER"/api/receive-json
et sélectionnez la méthode POST. Dans la balise Corps, sélectionnez brut et entrez le message JSON dans le champ vide.
-
-
Cliquez sur Envoyer pour envoyer la demande.
Pour vérifier le fichier créé dans le bucket spécifique dans OCI Object Storage, accédez à Stockage, Object Storage et Archive Storage, Buckets et cliquez sur le bucket.
Dans ce tutoriel, vous avez utilisé OCI Notifications avec un nouveau cas d'utilisation, en intégrant plusieurs services tels que les API, le kit SDK OCI, les applications Kubernetes déployées dans OKE, OCI Functions et OCI Object Storage.
Liens connexes
-
Installation de l'interface de ligne de commande Oracle Cloud Infrastructure
-
Installation de l'interface de ligne de commande du projet Fn
-
Configuration de ressources réseau pour la création et le déploiement de clusters
Remerciements
- Auteur - Iván Alexander Vásquez Chinome (Spécialiste des solutions Oracle LAD A-Team Cloud)
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Publish a Message in OCI Notifications, Trigger a Function and Create a File in OCI Object Storage Bucket
F96549-01
April 2024