Remarques :

Redimensionnement automatique d'un pool d'instances Oracle Cloud Infrastructure en fonction des demandes HTTP de l'équilibreur de charge OCI

Introduction

Dans ce tutoriel, nous verrons comment redimensionner automatiquement un pool d'instances Oracle Cloud Infrastructure (OCI) en fonction du nombre de demandes HTTP reçues par l'équilibreur de charge OCI. Nous aborderons trois sujets principaux.

OCI Monitoring : utilisez le service OCI Monitoring pour surveiller activement et passivement les ressources cloud à l'aide des fonctionnalités de mesures et d'alarmes. Le service OCI Monitoring utilise des mesures pour surveiller les ressources et les alarmes afin de vous avertir lorsque ces mesures répondent aux déclencheurs spécifiés par les alarmes.

Notifications OCI : lorsqu'un événement se produit avec vos ressources dans OCI, vous pouvez obtenir des messages lisibles par l'utilisateur via des adresses prises en charge, notamment des courriels et des messages texte (SMS) à l'aide d'alarmes, de règles d'événement et de connecteurs. Vous pouvez également automatiser les tâches par le biais d'adresses HTTPS personnalisées et d'OCI Functions.

OCI Functions : OCI Functions est une plate-forme Fonctions en tant que service entièrement gérée, colocative, hautement évolutive et à la demande. Elle repose sur OCI de niveau entreprise et sur le moteur open source du projet Fn. Utilisez OCI Functions (parfois abrégé en Functions et anciennement appelé Oracle Functions) lorsque vous voulez écrire du code pour répondre aux besoins de votre entreprise.

Architecture globale

T3_1

Remarque :

Objectifs

Prérequis

Tâche 1 : configurer des groupes dynamiques

Accédez à votre domaine, cliquez sur Groupes dynamiques et créez les groupes suivants.

Nom de groupe dynamique : MyFunctions.

ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}

Tâche 2 : créer des stratégies

Accédez à Stratégies et créez les stratégies suivantes.

Nom de la stratégie : FunctionsPolicies.

Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME

Tâche 3 : créer OCI Container Registry

  1. Accédez à Services de développeur, cliquez sur Registre de conteneur et créez un référentiel privé pour l'image Fn.

    Nom du référentiel : lab/fn-autoscale-instance-pool.

    T3_1

  2. Vérifiez les référentiels et notez l'espace de noms.

    T3_1

  3. Ouvrez le shell de terminal sur lequel vous avez installé l'interface de ligne de commande OCI et Docker, puis connectez-vous au registre. Vérifiez l'URL correcte pour votre région. Dans ce tutoriel, nous utilisons la région Est du Brésil (Sao Paulo) où l'URL du registre est gru.ocir.io.

    docker login gru.ocir.io
    Username: <your container namespace>/youruser
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    T3_3

Tâche 4 : création des fonctions OCI Python pour redimensionner automatiquement le pool d'instances

Remarque : assurez-vous d'avoir sélectionné votre sous-réseau privé, le même sous-réseau que celui du pool de flux de données.

  1. Accédez à la console OCI et cliquez sur Services de développeur. Sous Fonctions, cliquez sur Application, puis sur Créer une application.

    T9_1

  2. Créez quelques configurations pour configurer les tailles de mise à l'échelle.

    Remarque : ces variables de configuration sont utilisées pour déterminer les valeurs que la fonction utilisera pour réduire et augmenter le pool d'instances.

    Nom de clé secrète Value
    INSTANCE_POOL_TARGET_SIZE Définir la valeur de la nouvelle taille de pool d'instances
    INSTANCE_POOL_DESIRED_SIZE Définir la taille standard du pool d'instances

    Pour ce tutoriel, nous utilisons un pool d'instances de 1 instance et un redimensionnement vers 2.

    T4_2

  3. Accédez au shell de terminal sur lequel Docker, l'interface de ligne de commande OCI et l'interface de ligne de commande du projet Fn sont installés et exécutez les commandes suivantes pour initialiser la fonction.

    Remarque : si vous avez suivi les tâches, la commande de connexion Docker a déjà été exécutée à ce stade. Sinon, passez à la tâche 3.3 de connexion Docker.

    mkdir lab
    cd lab
    fn create context oci-cloud --provider oracle
    fn use context oci-cloud
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab
    fn init --runtime python fn-autoscale-instance-pool
    cd fn-autoscale-instance-pool
    ls -lrt
    

    Remarque : dans ce tutoriel, nous utilisons la région Est du Brésil (Sao Paulo). Si vous utilisez une autre région, vous devez modifier les emplacements api-url et registry.

    T4_3

    La commande init crée une fonction Hello World sur func.py. Nous allons écraser ce code.

  4. Obtenez l'exemple de code de fonction Python ici : func.py et écrasez le fichier func.py local créé lors de la commande de fonction init.

    # Copy the function code from this lab and save it on /tmp/func.py in your shell machine
    ls -lrt /tmp/func.py
    
    # Overwrite the func.py with tha lab's code
    cp /tmp/func.py func.py
    
    # Add the OCI package on the requirements.txt file, this will be needed to work with OCI.
    echo -e "\noci" >> requirements.txt
    
    # Check if requirements.txt has two lines
    cat requirements.txt
    

    T9_1

  5. Créez le nouveau code et déployez la fonction.

    ls -lrt
    fn deploy --app MyApp
    

    T4_1

Tâche 5 : création des notifications OCI

  1. Accédez à la console OCI et cliquez sur Services de développeur. Sous Intégration d'application, sélectionnez Notifications et cliquez sur Créer un sujet.

    Nom : AutoScaleTopic.

    T5_1

  2. Cliquez sur Abonnements pour créer un abonnement et sélectionner la fonction créée dans la tâche 4.

    T5_2

Tâche 6 : créer la définition d'alarme à redimensionner (ajuster la taille du pool d'instances à la valeur cible)

  1. Accédez à la console OCI et cliquez sur Observation et gestion. Sous Surveillance, sélectionnez Définitions d'alarme et cliquez sur Créer une alarme.

    Remarque : les seuils, l'intervalle sur cette alarme est défini pour le tutoriel, que vous pouvez personnaliser selon vos propres besoins en fonction de votre application.

    Nom d'alarme : instance_pool_scale_OUT.

  2. Saisissez les informations suivantes pour définir l'alarme.

    1. Dans la section Description de la mesure, entrez les informations suivantes.

      • Espace de noms de mesure : oci_lbaas.
      • Nom de mesure : HttpRequests.
      • Intervalle : 1 minute.
      • Statistique : Max.
    2. Dans la section Dimensions de mesure, entrez les informations suivantes.

      • Première dimension de mesure :

        • Nom de dimension : resourceID.
        • Valeur de dimension : sélectionnez l'OCID de l'équilibreur de charge.
      • Deuxième dimension de mesure :

        • Nom de dimension : backendSetName.
        • Valeur de dimension : sélectionnez le nom backendSet.

      T6_1

    3. Dans la section Règle de déclencheur 1, entrez les informations suivantes.

      • Opérateur : greater than.
      • Valeur : 30.
      • Corps de l'alarme : le nombre de connexions est plus élevé que prévu. Lancez le processus de redimensionnement.

      T6_1

  3. Entrez les informations suivantes pour définir les notifications d'alarme.

    1. Dans la section Destination, saisissez les informations suivantes.

      • Service de destination : sélectionnez Notifications.
      • Compartiment : sélectionnez votre compartiment.
      • Thème : sélectionnez le sujet.
    2. Dans la section Format de message, sélectionnez Envoyer des messages JSON jolis (texte brut avec saut de ligne) et, à des fins de test, sélectionnez Répéter la notification ? avec 1 minute de fréquence de notification.

    T6_1

  4. Cliquez sur Options avancées et ajoutez une nouvelle balise.

    Remarque : Il s'agit d'un balisage obligatoire pour définir le type de redimensionnement, entrant ou sortant.

    Espace de noms de balise : sélectionnez Aucun (appliquer une balise à format libre).
    Clé de balise : autoscaling_type. Valeur : out.

    T6_1

Tâche 7 : créer la définition d'alarme à réajuster (ajuster la taille du pool d'instances à la taille souhaitée)

  1. Accédez à la console OCI et cliquez sur Observation et gestion. Sous Surveillance, sélectionnez Définitions d'alarme et cliquez sur Créer une alarme.

    Remarque : les seuils, l'intervalle sur cette alarme est défini pour le tutoriel, que vous pouvez personnaliser selon vos propres besoins en fonction de votre application.

    Nom d'alarme : instance_pool_scale_IN.

  2. Saisissez les informations suivantes pour définir l'alarme.

    1. Dans la section Description de la mesure, entrez les informations suivantes.

      • Espace de noms de mesure : oci_lbaas.
      • Nom de mesure : HttpRequests.
      • Intervalle : 1 minute.
      • Statistique : Max.
    2. Dans la section Dimensions de mesure, entrez les informations suivantes.

      • Première dimension de mesure :

        • Nom de dimension : resourceID.
        • Valeur de dimension : sélectionnez l'OCID de l'équilibreur de charge.
      • Deuxième dimension de mesure :

        • Nom de dimension : backendSetName.
        • Valeur de dimension : sélectionnez le nom backendSet.
    3. Dans la section Règle de déclencheur 1, entrez les informations suivantes.

      • Opérateur : less than.
      • Valeur : 30.
      • Corps de l'alarme : le nombre de connexions revient à la valeur acceptable, appelant une réduction pour réduire le nombre d'instances à la valeur souhaitée.

      T7_1

  3. Entrez les informations suivantes pour définir les notifications d'alarme.

    1. Dans la section Destination, saisissez les informations suivantes.

      • Service de destination : sélectionnez Notifications.
      • Compartiment : sélectionnez votre compartiment.
      • Thème : sélectionnez le sujet.
    2. Dans la section Format de message, sélectionnez Envoyer des messages JSON lisibles (texte brut avec des sauts de ligne).

  4. Cliquez sur Options avancées et ajoutez une nouvelle balise.

    Remarque : Il s'agit d'un balisage obligatoire pour définir le type de redimensionnement, entrant ou sortant.

    Espace de noms de balise : sélectionnez Aucun (appliquer une balise à format libre).
    Clé de balise : autoscaling_type. Valeur : in.

    T7_1

Tâche 8 : Créer une charge et vérifier le fonctionnement de l'alarme

  1. Obtenez votre adresse IP LoadBalancer et exécutez plusieurs appels vers votre application sur le port 80. Ouvrez la console shell et exécutez le code suivant pour appeler l'équilibreur de charge.

    i=1
    while true
    do
    echo "Request $i"
       curl http://your-ip-here
       ((i++))
       echo ""  # Prints a newline for better readability between requests
    done
    

    Sortie de la charge d'application simple.

    T8_1

    Remarque : il s'agit d'un serveur Web HTTP Apache simple pour illustrer le scénario.

  2. Vérifiez la taille et le statut réels du pool d'instances. Pour ce tutoriel, nous disposons d'un pool d'instances de taille 1.

    T8_1

  3. Ouvrez la définition d'alarme pour visualiser les mesures et vérifier si l'alarme se déclenche.

    T8_1

    T8_1

  4. Après quelques minutes, en fonction de l'intervalle de mesure, la fonction d'augmentation est déclenchée.

    Ouvrez les pools d'instances et vérifiez que l'état est Redimensionnement et que le nombre d'instances cible est 2.

    T8_1

    Après le processus de redimensionnement, vous pouvez voir que la taille du pool d'instances est 2.

    T8_1

  5. Arrêtez le script shell et attendez que l'alarme de la transition d'augmentation redevienne OK, puis observez l'alarme pour la réduction. Attendez quelques minutes jusqu'à ce que les deux alarmes soient mises à jour et observez à quel moment l'alarme pour le redimensionnement se déclenche.

    T8_1

    Maintenant, l'alarme scale-in est en état de feu.

    T8_1

    Notez que HttpRequests est tombé à un nombre inférieur au seuil de 30.

    T8_1

    Le redimensionnement du pool d'instances a démarré.

    T8_1

    La taille du pool d'instances revient à la valeur souhaitée de 1.

    T8_1

Remerciements

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.