Utiliser OpenFaaS sur AKS (Azure Kubernetes Service)

OpenFaaS est un framework qui utilise des conteneurs pour créer des fonctions serverless. Ce projet open source a été très largement adopté par la communauté. Ce document décrit en détail l’installation et l’utilisation d’OpenFaas sur un cluster Azure Kubernetes Service (AKS).

Avant de commencer

Ajouter le dépôt de chart Helm OpenFaaS

  1. Accédez à Azure Cloud Shell.

  2. Ajoutez le dépôt de charts Helm OpenFaaS et effectuez une mise à jour vers la dernière version à l’aide des commandes helm suivantes.

    helm repo add openfaas https://openfaas.github.io/faas-netes/
    helm repo update
    

Déployer OpenFaaS

Il est recommandé de stocker OpenFaaS et ses fonctions dans leur propre espace de noms Kubernetes.

  1. Créez un espace de noms pour les fonctions et le système OpenFaaS à l’aide de la commande kubectl apply.

    kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
    
  2. Générez un mot de passe pour le portail d’interface utilisateur OpenFaaS et l’API REST à l’aide des commandes suivantes. Le chart Helm utilise ce mot de passe pour activer l’authentification de base sur la passerelle OpenFaaS, qui est exposée à Internet via un équilibreur de charge cloud.

    # generate a random password
    PASSWORD=$(head -c 12 /dev/urandom | shasum| cut -d' ' -f1)
    
    kubectl -n openfaas create secret generic basic-auth \
    --from-literal=basic-auth-user=admin \
    --from-literal=basic-auth-password="$PASSWORD"
    
  3. Obtenez la valeur de votre mot de passe à l’aide de la commande echo suivante.

    echo $PASSWORD
    
  4. Déployez OpenFaaS dans votre cluster AKS à l’aide de la commande helm upgrade.

    helm upgrade openfaas --install openfaas/openfaas \
        --namespace openfaas  \
        --set basic_auth=true \
        --set functionNamespace=openfaas-fn \
        --set serviceType=LoadBalancer
    

    Le résultat doit être similaire à l’exemple condensé de sortie suivant :

    NAME: openfaas
    LAST DEPLOYED: Tue Aug 29 08:26:11 2023
    NAMESPACE: openfaas
    STATUS: deployed
    ...
    NOTES:
    To verify that openfaas has started, run:
    
    kubectl --namespace=openfaas get deployments -l "release=openfaas, app=openfaas"
    ...
    
  5. Une adresse IP publique est créée pour accéder à la passerelle OpenFaaS. Obtenez l’adresse IP à l’aide de la commande kubectl get service.

    kubectl get service -l component=gateway --namespace openfaas
    

    Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :

    NAME               TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)          AGE
    gateway            ClusterIP      10.0.156.194   <none>         8080/TCP         7m
    gateway-external   LoadBalancer   10.0.28.18     52.186.64.52   8080:30800/TCP   7m
    
  6. Testez le système OpenFaaS en accédant à l’adresse IP externe sur le port 8080, http://52.186.64.52:8080 dans cet exemple, où vous êtes invité à vous connecter. L’utilisateur par défaut est admin et votre mot de passe peut être récupéré à l’aide de echo $PASSWORD.

    Screenshot of OpenFaaS UI.

  7. Définissez $OPENFAAS_URL sur l’URL de l’adresse IP externe sur le port 8080, et connectez-vous avec Azure CLI à l’aide des commandes suivantes.

    export OPENFAAS_URL=http://52.186.64.52:8080
    echo -n $PASSWORD | ./faas-cli login -g $OPENFAAS_URL -u admin --password-stdin
    

Créer la première fonction

  1. Accédez au système OpenFaaS à l’aide de votre URL OpenFaaS.

  2. Créez une fonction à l’aide du portail OpenFaas en sélectionnant Deploy A New Function et recherchez Figlet.

  3. Sélectionnez la fonction Figlet, puis Deploy.

    Screenshot shows the Deploy A New Function dialog box with the text Figlet on the search line.

  4. Invoquez la fonction en utilisant la commande curl suivante. Veillez à remplacer l’adresse IP dans l’exemple suivant par l’adresse de votre passerelle OpenFaas.

    curl -X POST http://52.186.64.52:8080/function/figlet -d "Hello Azure"
    

    Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :

     _   _      _ _            _
    | | | | ___| | | ___      / \    _____   _ _ __ ___
    | |_| |/ _ \ | |/ _ \    / _ \  |_  / | | | '__/ _ \
    |  _  |  __/ | | (_) |  / ___ \  / /| |_| | | |  __/
    |_| |_|\___|_|_|\___/  /_/   \_\/___|\__,_|_|  \___|
    

Créer la deuxième fonction

Configurer votre instance Azure Cosmos DB

  1. Accédez à Azure Cloud Shell.

  2. Créez un groupe de ressources pour l’instance Azure Cosmos DB à l’aide de la commande az group create.

    az group create --name serverless-backing --location eastus
    
  3. Déployez une instance Azure Cosmos DB de type MongoDBà l’aide de la commande az cosmosdb create. Remplacez openfaas-cosmos par le nom unique de votre instance.

    az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB
    
  4. Récupérez la chaîne de connexion de la base de données Azure Cosmos DB et stockez-la dans une variable à l’aide de la commande az cosmosdb list. Veillez à remplacer la valeur de l’argument --resource-group par le nom de votre groupe de ressources, et la valeur de l’argument --name par le nom de votre instance Azure Cosmos DB.

    COSMOS=$(az cosmosdb list-connection-strings \
      --resource-group serverless-backing \
      --name openfaas-cosmos \
      --query connectionStrings[0].connectionString \
      --output tsv)
    
  5. Remplissez Azure Cosmos DB avec des données de test en créant un fichier nommé plans.json et en y copiant le json suivant.

    {
        "name" : "two_person",
        "friendlyName" : "Two Person Plan",
        "portionSize" : "1-2 Person",
        "mealsPerWeek" : "3 Unique meals per week",
        "price" : 72,
        "description" : "Our basic plan, delivering 3 meals per week, which will feed 1-2 people.",
        "__v" : 0
    }
    

Création de la fonction

  1. Installez les outils MongoDB. L’exemple de commande suivant installe ces outils à l’aide de brew. Pour découvrir d’autres options d’installation, consultez la documentation de MongoDB.

    brew install mongodb
    
  2. Chargez des données dans l’instance Azure Cosmos DB à l’aide de l’outil mongoimport.

    mongoimport --uri=$COSMOS -c plans < plans.json
    

    Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :

    2018-02-19T14:42:14.313+0000    connected to: localhost
    2018-02-19T14:42:14.918+0000    imported 1 document
    
  3. Créez la fonction à l’aide de la commande faas-cli deploy. Veillez à remplacer la valeur de l’argument -g par l’adresse de votre passerelle OpenFaaS.

    faas-cli deploy -g http://52.186.64.52:8080 --image=shanepeckham/openfaascosmos --name=cosmos-query --env=NODE_ENV=$COSMOS
    

    Une fois le déploiement effectué, vous devez obtenir une sortie semblable à l’exemple suivant :

    Deployed. 202 Accepted.
    URL: http://52.186.64.52:8080/function/cosmos-query
    
  4. Testez la fonction à l’aide de la commande curl suivante. Veillez à remplacer l’adresse IP par l’adresse de la passerelle OpenFaaS.

    curl -s http://52.186.64.52:8080/function/cosmos-query
    

    Vous devez obtenir un résultat semblable à l’exemple de sortie qui suit :

    [{"ID":"","Name":"two_person","FriendlyName":"","PortionSize":"","MealsPerWeek":"","Price":72,"Description":"Our basic plan, delivering 3 meals per week, which will feed 1-2 people."}]
    

    Remarque

    Vous pouvez également tester la fonction dans l’interface utilisateur d’OpenFaaS :

    Screenshot of OpenFaas UI.

Étapes suivantes

Continuez à apprendre avec l’atelier OpenFaaS, qui content un ensemble de travaux pratiques couvrant des sujets tels que la création de votre propre bot GitHub, l’utilisation de secrets, l’affichage de métriques et la mise à l’échelle automatique.