Exercice - Utiliser un gestionnaire personnalisé pour générer une application

Effectué

Dans cet exercice, vous allez créer et exécuter une application serverless à l’aide de Go.

Structurer l’application

Commencez par générer la structure de l’application, à l’aide de l’extension Azure Functions dans Visual Studio Code.

  1. Sélectionnez Afficher>Palette de commandes.
  2. Sélectionnez Azure Functions : Créer un projet.
  3. Sélectionnez un dossier, généralement votre dossier actuel.
  4. Dans Sélectionner un langage, sélectionnez Gestionnaire personnalisé.
  5. Dans Sélectionner un modèle pour votre première fonction, sélectionnez HttpTrigger.
  6. Donnez un nom à l’application, par exemple hello.
  7. Sélectionnez un niveau d’autorisation anonyme. Vous pourrez le changer ultérieurement si vous le souhaitez.

Maintenant, vous avez un projet qui ressemble à quelque chose comme ceci :

hello/
  function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json

Créer l’application

La prochaine série d’étapes concerne la création d’une application qui peut répondre à un déclencheur HTTP.

  1. Créez un fichier nommé server.go à la racine du projet.

  2. Donnez à server.go le contenu suivant :

    package main
    
    import (
     "fmt"
     "io/ioutil"
     "log"
     "net/http"
     "os"
    )
    

    Le code précédent importe toutes les bibliothèques dont vous avez besoin pour générer une application HTTP et rechercher les variables d’environnement.

  3. Ajoutez le code suivant après les instructions import :

    func main() {
      customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
      if !exists {
        customHandlerPort = "8080"
      }
      mux := http.NewServeMux()
      // mux.HandleFunc("/api/hello", helloHandler)
      fmt.Println("Go server Listening on: ", customHandlerPort)
      log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
    }
    

    La fonction main() est appelée par elle-même. La première ligne du code indique comment la variable d’environnement FUNCTIONS_CUSTOM_HANDLER_PORT sera lue :

    customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
    

    Ensuite, la fonction vérifie si le port existe. Si ce n’est pas le cas, la fonction se voit attribuer le port 8080 :

    if !exists {
      customHandlerPort = "8080"
    }
    

    Le code suivant instancie une instance de serveur HTTP :

    mux := http.NewServeMux()
    

    La dernière ligne d’importance est celle qui commence à écouter un port spécifique et signale qu’elle est prête à recevoir des requêtes, avec la méthode ListenAndServe() :

    log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
    
  4. Nous allons ajouter le code restant. Tout d’abord, localisez la ligne suivante et supprimez les marques de commentaire :

    // mux.HandleFunc("/api/hello", helloHandler)
    
  5. Entre les instructions import et la fonction main(), ajoutez le code suivant :

    func helloHandler(w http.ResponseWriter, r *http.Request) {
      w.Header().Set("Content-Type", "application/json")
      if r.Method == "GET" {
        w.Write([]byte("hello world"))
      } else {
        body, _ := ioutil.ReadAll(r.Body)
        w.Write(body)
      }
    }
    

    La fonction helloHandler() définit le type de contenu sur application/json. Elle répond avec « hello world » ou le corps publié, le cas échéant.

Exécuter l’application

Vous avez terminé la création du code à ce stade, mais vous devez effectuer quelques réglages pour que ce scénario fonctionne. Vous devez indiquer l’emplacement de votre fichier exécutable, afin que l’hôte de la fonction puisse le trouver. Vous devez également configurer le routage et indiquer que cette application gère les déclencheurs HTTP et aucun autre type de liaison.

  1. À partir d’un terminal, exécutez go build server.go à la racine du projet :

    go build server.go
    

    Cette étape crée un fichier exécutable appelé server sur macOS et Linux, ou server.exe sur Windows.

  2. Ouvrez le fichier host.json et recherchez l’élément defaultExecutablePath à l’intérieur de customHandler. Spécifiez ./server sur macOS et Linux, ou .\server.exe sur Windows.

  3. Sous l’élément customHandler, ajoutez l’élément enableForwardingHttpRequest et attribuez-lui la valeur true. Votre élément customHandler doit alors se présenter comme ceci :

    "customHandler": {
     "description": {
       "defaultExecutablePath": "./server",
       "workingDirectory": "",
       "arguments": []
     },
     "enableForwardingHttpRequest" : true
    }
    
  4. À partir d’un terminal, exécutez func start à la racine du projet. Vous démarrez ainsi votre application Functions.

    func start
    

    À la fin de la sortie, vous verrez une sortie semblable à celle-ci :

    Functions:
    
         hello: [GET,POST] http://localhost:7071/api/hello
    
  5. Dans un navigateur, accédez à http://localhost:7071/api/hello. La sortie suivante doit s’afficher : « hello world ».

Félicitations ! Vous avez développé une application serverless en Go.