Introduction
Azure Functions est une solution serverless qui vous permet d’écrire moins de code, de maintenir moins d’infrastructure et de réaliser des économies. Au lieu de vous soucier du déploiement et de la maintenance des serveurs, l’infrastructure cloud fournit toutes les ressources à jour nécessaires au bon fonctionnement de vos applications.
Création des ressources Azure
Se connecter à Azure
Avant toute chose, il nous faut nous connecter à Azure.
az login
Choisir ou créer une souscription existante
Pour voir toutes nos souscriptions existante et en choisir une
az account list -o table
az account set --subscription <SubscriptionId> # remplacer par l'ID de la souscription
Creer une Resource Group
Nous créons une Resource Group dans la localisation francecentral
az group create -n rg-demo -l francecentral
Création d’un storage account
Les fonctions Azure requièrent un storage account. Ce storage account est utilisé pour stocker les méta-données de la function, son historique et ses configurations.
az storage account create -n samygglodemo -g rg-demo -l francecentral
Création de la fonction
Une fois toutes les dépendances résolues, nous créons la fonction.
az functionapp create -n fn-mygglo-demo \
-g rg-demo \
--consumption-plan-location francecentral \
--os-type Linux \
--runtime custom \
--functions-version 4 \
--disable-app-insights false \
--storage-account samygglodemo
Le code source
Installation du cli fn
L’installation se fait avec brew sur mac
brew tap azure/functions
brew install azure-functions-core-tools@4
# if upgrading on a machine that has 2.x or 3.x installed:
brew link --overwrite azure-functions-core-tools@4
Sur Ubuntu
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs)-prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-get update
sudo apt-get install azure-functions-core-tools-4
Pour Windows et les autres distributions Linux visitez la documentation Azure.
Création du squelette de fonction pour go
Il nous faut initier le projet
func init demo --worker-runtime custom
Nous nous déplaçons ensuite dans le dossier demo puis créons la fonction demo-mygglo
cd demo
func function new -l Custom -t HttpTrigger -n demo-mygglo -a anonymous
Ajout du code Go de la fonction
Nous créons un ficher handler.go dans le répertoire racine de la fonction (celui qui contient host.json). Voici le contenu du fichier handler.go
package main
import (
"fmt"
"log"
"net/http"
"os"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
message := "This HTTP triggered function executed successfully. Pass a name in the query string for a personalized response.\n"
name := r.URL.Query().Get("name")
if name != "" {
message = fmt.Sprintf("Hello, %s. This HTTP triggered function executed successfully.\n", name)
}
fmt.Fprint(w, message)
}
func main() {
listenAddr := ":8080"
if val, ok := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT"); ok {
listenAddr = ":" + val
}
http.HandleFunc("/api/demo-mygglo", helloHandler)
log.Printf("About to listen on %s. Go to https://127.0.0.1%s/", listenAddr, listenAddr)
log.Fatal(http.ListenAndServe(listenAddr, nil))
}
Il faut remarquer que l’url de la fonction suit la syntaxe /api/<nom_de_la_fonction>. Dans notre cas : /api/demo-mygglo. Il faut donc faire attention dans le code Go à respecter cette convention. Nous compilons le code Go avec la commande :
go build handler.go
Configuration de la fonction
Nous configurons la fonction pour utiliser le binaire handler généré. Pour cela ouvrir le fichier host.json. Dans la section customHandler.description nous affectons la valeur handler à defaultExecutablePath. Dans la section customHandler nous ajoutons “enableForwardingHttpRequest”: true . La section customHandler ressemble à :
"customHandler": {
"description": {
"defaultExecutablePath": "handler",
"workingDirectory": "",
"arguments": []
},
"enableForwardingHttpRequest": true
}
Test local de la fonction
Dans un terminal, dans le dossier demo , lancer la commande suivante :
func start
La sortie montre l’url de la fonction. On peut la tester avec une commande curl:
curl http://localhost:7071/api/demo-mygglo?name=okkkk
Compiler le code pour Azure
Nous compilons ensuite notre fonction pour Azure.
GOOS=linux GOARCH=amd64 go build handler.go
Déployer la fonction sur azure
Dans le dossier demo, nous lançons la commande suivante pour déployer la fonction.
func azure functionapp publish fn-mygglo-demo
Une fois la fonction déployée, nous pouvons la tester avec l’url qui s’affiche :
curl https://fn-mygglo-demo.azurewebsites.net/api/demo-mygglo?name=james
Suppression des ressources azure
az group delete --name rg-demo