Premiers pas avec Cloud Endpoints pour GKE avec ESPv2


Ce tutoriel vous explique comment configurer et déployer un exemple d'API et le proxy Extensible Service Proxy V2 (ESPv2) sur un cluster Google Kubernetes Engine (GKE).

L'API REST de l'exemple de code est décrite à l'aide de la spécification OpenAPI. Ce tutoriel indique également comment créer une clé API et l'utiliser lors de l'envoi de requêtes à l'API.

Ce tutoriel utilise des images de conteneur prédéfinies du code d'exemple et du proxy ESPv2 stockées dans Container Registry.

Pour obtenir une présentation de Cloud Endpoints, consultez les pages À propos de Cloud Endpoints et Architecture Cloud Endpoints.

Objectifs

Tout au long du tutoriel, reportez-vous au récapitulatif des étapes présenté ci-dessous. Toutes les tâches de la partie 1 sont nécessaires pour envoyer des requêtes à l'API.

Partie 1

  1. Configurez un projet Google Cloud. Consultez la section Avant de commencer.
  2. Créez un cluster de conteneurs sur GKE. Consultez la section Créer un cluster de conteneurs.
  3. Installez et configurez le logiciel utilisé dans le tutoriel. Consultez la section Installer et configurer le logiciel requis.
  4. Téléchargez l'exemple de code. Consultez la section Obtenir l'exemple de code.
  5. Configurez le fichier openapi.yaml, utilisé pour configurer Cloud Endpoints. Consultez la section Configurer Endpoints.
  6. Déployez la configuration Endpoints pour créer un service Endpoints. Consultez la section Déployer la configuration Endpoints.
  7. Déployez l'API et ESPv2 sur le cluster. Consultez la section Déployer le backend de l'API.
  8. Obtenez l'adresse IP du cluster. Consultez la section Obtenir l'adresse IP externe du cluster.
  9. Envoyez une requête à l'API via l'adresse IP. Consultez la section Envoyer une requête à l'aide d'une adresse IP.
  10. Suivez l'activité de l'API. Consultez la section Suivre l'activité de l'API.

Partie 2

  1. Configurez un enregistrement DNS pour l'exemple d'API. Consultez la section Configurer le DNS pour Cloud Endpoints.
  2. Envoyez une requête à l'API en utilisant le nom de domaine. Consultez la section Envoyer une requête à l'aide du nom de domaine complet (FQDN).

Nettoyage

Lorsque vous avez terminé, consultez la section Nettoyage pour éviter des frais sur votre compte Google Cloud.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Notez l'ID du projet Google Cloud, car vous en aurez besoin ultérieurement.

Créer un cluster de conteneurs

Vous devez créer un cluster de conteneurs sur GKE pour y exécuter l'exemple de code de backend d'API. Le cluster nécessite un alias d'adresse IP pour utiliser l'équilibrage de charge natif en conteneurs. Pour créer un cluster de conteneurs avec un alias d'adresse IP pour l'exemple d'API:

gcloud container clusters create espv2-demo-cluster \
    --enable-ip-alias \
    --create-subnetwork="" \
    --network=default \
    --zone=us-central1-a

L'exemple de commande ci-dessus crée un cluster, espv2-demo-cluster, avec un sous-réseau provisionné automatiquement dans la zone us-central1-a.

Notez le nom et la zone du cluster, car vous en aurez besoin au moment d'authentifier kubectl auprès du cluster de conteneurs.

Installer et configurer le logiciel requis

Dans ce tutoriel, vous allez installer gcloud CLI pour pouvoir gérer votre projet à l'aide de Google Cloud CLI. Vous utilisez kubectl pour exécuter des commandes sur les clusters GKE. Vous aurez également besoin d'un moyen de tester l'API.

Dans la procédure suivante, si le logiciel requis est déjà installé, passez à l'étape suivante.

Pour installer et configurer le logiciel requis :

  1. Vous aurez besoin d'une application pour envoyer des requêtes à l'exemple d'API.

    • Utilisateurs Linux et macOS : ce tutoriel fournit un exemple utilisant curl, qui est généralement préinstallé sur votre système d'exploitation. Si vous ne disposez pas de curl, vous pouvez le télécharger sur la page Releases and Downloads de curl.
    • Utilisateurs Windows : ce tutoriel fournit un exemple d'utilisation de Invoke-WebRequest, compatible avec PowerShell 3.0 et versions ultérieures.
  2. Installez et initialisez la gcloud CLI.
  3. Mettez à jour la gcloud CLI et installez les composants Endpoints:
    gcloud components update
  4. Assurez-vous que la Google Cloud CLI (gcloud) est autorisée à accéder à vos données et services sur Google Cloud:
    gcloud auth login
    Dans le nouvel onglet de navigateur, choisissez un compte.
  5. Définissez le projet par défaut sur votre ID de projet :
    gcloud config set project YOUR_PROJECT_ID

    Remplacez YOUR_PROJECT_ID par l'ID du projet. Si vous avez d'autres projets Google Cloud et que vous souhaitez les gérer à l'aide de gcloud, consultez la page Gérer les configurations de la gcloud CLI.

  6. Installez kubectl :
    gcloud components install kubectl
  7. Procurez-vous de nouveaux identifiants utilisateur à utiliser comme identifiants par défaut de l'application. Ces identifiants utilisateur sont nécessaires pour autoriser kubectl.
    gcloud auth application-default login
    Dans le nouvel onglet de navigateur, choisissez un compte.

Télécharger l'exemple de code

Pour vous aider à être opérationnel rapidement, un exemple de code est fourni dans plusieurs langages. Pour télécharger l'exemple de code sur l'ordinateur local :

Java

Pour cloner ou télécharger l'exemple d'API :

  1. Clonez le dépôt de l'exemple d'application sur votre ordinateur local :
    git clone https://github.com/GoogleCloudPlatform/java-docs-samples

    Vous pouvez également télécharger l'exemple sous forme de fichier zip et l'extraire.

  2. Accédez au répertoire qui contient l'exemple de code :
    cd java-docs-samples/endpoints/getting-started
Python

Pour cloner ou télécharger l'exemple d'API :

  1. Clonez le dépôt de l'exemple d'application sur votre ordinateur local :
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples

    Vous pouvez également télécharger l'exemple sous forme de fichier zip et l'extraire.

  2. Accédez au répertoire qui contient l'exemple de code :
    cd python-docs-samples/endpoints/getting-started
Go

Pour cloner ou télécharger l'exemple d'API :

  1. Assurez-vous que la variable d'environnement GOPATH est définie.
  2. Clonez le dépôt de l'exemple d'application sur votre ordinateur local :
    go get -d github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
  3. Accédez au répertoire qui contient l'exemple de code :
    cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/endpoints/getting-started
PHP

Pour cloner ou télécharger l'exemple d'API :

  1. Clonez le dépôt de l'exemple d'application sur votre ordinateur local :
    git clone https://github.com/GoogleCloudPlatform/php-docs-samples

    Vous pouvez également télécharger l'exemple sous forme de fichier zip et l'extraire.

  2. Accédez au répertoire qui contient l'exemple de code :
    cd php-docs-samples/endpoints/getting-started
Ruby

Pour cloner ou télécharger l'exemple d'API :

  1. Clonez le dépôt de l'exemple d'application sur votre ordinateur local :
    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples

    Vous pouvez également télécharger l'exemple sous forme de fichier zip et l'extraire.

  2. Accédez au répertoire qui contient l'exemple de code :
    cd ruby-docs-samples/endpoints/getting-started
NodeJS

Pour cloner ou télécharger l'exemple d'API :

  1. Clonez le dépôt de l'exemple d'application sur votre ordinateur local :
    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples

    Vous pouvez également télécharger l'exemple sous forme de fichier zip et l'extraire.

  2. Accédez au répertoire qui contient l'exemple de code :
    cd nodejs-docs-samples/endpoints/getting-started

Configurer Endpoints

L'exemple de code inclut le fichier de configuration OpenAPI openapi.yaml basé sur la spécification OpenAPI version 2.0. Pour configurer Cloud Endpoints :

  1. Dans le répertoire de l'exemple de code, ouvrez le fichier de configuration openapi.yaml.

    Java
    swagger: "2.0"
    info:
      description: "A simple Google Cloud Endpoints API example."
      title: "Endpoints Example"
      version: "1.0.0"
    host: "echo-api.endpoints.YOUR-PROJECT-ID.cloud.goog"
    Python
    swagger: "2.0"
    info:
      description: "A simple Google Cloud Endpoints API example."
      title: "Endpoints Example"
      version: "1.0.0"
    host: "echo-api.endpoints.YOUR-PROJECT-ID.cloud.goog"
    Go
    swagger: "2.0"
    info:
      description: "A simple Google Cloud Endpoints API example."
      title: "Endpoints Example"
      version: "1.0.0"
    host: "echo-api.endpoints.YOUR-PROJECT-ID.cloud.goog"
    PHP
    swagger: "2.0"
    info:
      description: "A simple Google Cloud Endpoints API example."
      title: "Endpoints Example"
      version: "1.0.0"
    host: "echo-api.endpoints.YOUR-PROJECT-ID.cloud.goog"
    Ruby
    swagger: "2.0"
    info:
      description: "A simple Google Cloud Endpoints API example."
      title: "Endpoints Example"
      version: "1.0.0"
    host: "echo-api.endpoints.YOUR-PROJECT-ID.cloud.goog"
    NodeJS
    swagger: "2.0"
    info:
      description: "A simple Google Cloud Endpoints API example."
      title: "Endpoints Example"
      version: "1.0.0"
    host: "echo-api.endpoints.YOUR-PROJECT-ID.cloud.goog"

    Veuillez noter les points suivants :

    • L'exemple de configuration affiche les lignes situées à proximité du champ host que vous devez modifier. Pour déployer le fichier openapi.yaml sur Endpoints, vous devez disposer du document OpenAPI complet.
    • L'exemple de fichier openapi.yaml contient une section sur la configuration de l'authentification qui n'est pas nécessaire pour ce tutoriel. Vous n'avez pas besoin de configurer les lignes avec YOUR-SERVICE-ACCOUNT-EMAIL et YOUR-CLIENT-ID.
    • OpenAPI est une spécification indépendante du langage. Pour plus de commodité, le même fichier openapi.yaml figure dans l'exemple getting-started sur le dépôt GitHub de chaque langage.
  2. Dans le champ host, remplacez le texte par le nom du service Endpoints, qui doit être au format suivant :
    host: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog"
    

    Remplacez YOUR_PROJECT_ID par l'ID de votre projet Google Cloud. Exemple :

    host: "echo-api.endpoints.example-project-12345.cloud.goog"
    

echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog est le nom du service Endpoints. Ce n'est pas le nom de domaine complet (FQDN) que vous utilisez pour envoyer des requêtes à l'API.

Pour plus d'informations sur les champs du document OpenAPI requis par Endpoints, consultez la page Configurer Endpoints.

Une fois que vous avez terminé toutes les étapes de configuration suivantes pour pouvoir envoyer des requêtes à l'exemple d'API à l'aide d'une adresse IP, consultez la section Configurer le DNS pour Endpoints afin d'obtenir des informations sur la configuration de echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog en tant que nom de domaine complet.

Déployer la configuration Endpoints

Pour déployer la configuration Endpoints, exécutez la commande gcloud endpoints services deploy. Celle-ci crée un service géré à l'aide de Service Management.

Pour déployer la configuration Endpoints :

  1. Assurez-vous que vous vous trouvez dans le répertoire endpoints/getting-started.
  2. Importez la configuration et créez un service géré :
    gcloud endpoints services deploy openapi.yaml
    

La commande gcloud appelle ensuite l'API Service Management pour créer un service géré avec le nom que vous avez spécifié dans le champ host du fichier openapi.yaml. Service Management configure le service en fonction des paramètres du fichier openapi.yaml. Lorsque vous apportez des modifications au fichier openapi.yaml, vous devez le redéployer pour mettre à jour le service Endpoints.

Lors de la création et de la configuration du service, Service Management envoie des informations au terminal. Vous pouvez ignorer en toute sécurité les avertissements concernant les chemins du fichier openapi.yaml qui ne nécessitent pas de clé d'API. Une fois la configuration du service terminée, Service Management affiche un message avec l'ID de configuration du service et le nom du service, comme illustré ci-dessous :

Service Configuration [2017-02-13r0] uploaded for service [echo-api.endpoints.example-project-12345.cloud.goog]

Dans l'exemple ci-dessus, 2017-02-13r0 correspond à l'ID de configuration du service et echo-api.endpoints.example-project-12345.cloud.goog au service Endpoints. L'ID de configuration du service se compose d'un horodatage, suivi d'un numéro de révision. Si vous déployez à nouveau le fichier openapi.yaml le même jour, le numéro de révision est incrémenté dans l'ID de configuration de service. Vous pouvez afficher la configuration du service Endpoints sur la page Endpoints > Services de la console Google Cloud.

Si vous recevez un message d'erreur, consultez la section Résoudre des problèmes de déploiement de la configuration Endpoints.

Vérifier les services requis

Endpoints et ESP nécessitent au minimum l'activation des services Google suivants:
Nom Titre
servicemanagement.googleapis.com API Service Management
servicecontrol.googleapis.com API Service Control
endpoints.googleapis.com Google Cloud Endpoints

Dans la plupart des cas, la commande gcloud endpoints services deploy permet d'activer ces services requis. Toutefois, bien que la commande gcloud ait abouti, elle n'active pas les services requis dans les cas suivants :

  • Vous avez utilisé une application tierce telle que Terraform et vous n'incluez pas ces services.

  • Vous avez déployé la configuration Endpoints dans un projet Google Cloud existant dans lequel ces services étaient explicitement désactivés.

Utilisez la commande suivante pour vérifier que les services nécessaires sont activés :

gcloud services list

Si les services requis ne sont pas répertoriés, activez-les :

gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com
gcloud services enable endpoints.googleapis.com

Activez également votre service Endpoints :

gcloud services enable ENDPOINTS_SERVICE_NAME

Pour déterminer la valeur de ENDPOINTS_SERVICE_NAME, vous pouvez effectuer l'une des opérations suivantes :

  • Après avoir déployé la configuration Endpoints, accédez à la page Points de terminaison de la console Cloud. La liste des valeurs ENDPOINTS_SERVICE_NAME possibles s'affiche dans la colonne Nom du service.

  • Pour OpenAPI, ENDPOINTS_SERVICE_NAME correspond à ce que vous avez spécifié dans le champ host de votre spécification OpenAPI. Pour gRPC, ENDPOINTS_SERVICE_NAME correspond à ce que vous avez spécifié dans le champ name de votre configuration Endpoints gRPC.

Pour en savoir plus sur les commandes gcloud, consultez la page Services gcloud.

Déployer le backend de l'API

Vous avez déployé le document OpenAPI sur Service Management, mais vous n'avez pas encore déployé le code qui diffuse le backend de l'API. Cette section vous explique en détail comment déployer des conteneurs prédéfinis pour l'exemple d'API et le proxy ESPv2 sur le cluster.

Vérifier les autorisations requises

ESP et ESPv2 appellent les services Google qui utilisent IAM pour vérifier si l'identité appelante dispose des autorisations suffisantes pour accéder aux ressources IAM utilisées. L'identité appelante est le compte de service associé qui déploie ESP et ESPv2.

Lorsqu'il est déployé dans un pod GKE, le compte de service associé est le compte de service de nœud. Il s'agit généralement du compte de service Compute Engine par défaut. Veuillez suivre cette recommandation d'autorisation pour choisir un compte de service de nœud approprié.

Si Workload Identity est utilisé, il est possible d'utiliser un compte de service distinct autre que le compte de service de nœud pour communiquer avec les services Google. Vous pouvez créer un compte de service Kubernetes pour que le pod exécute ESP et ESPv2, créer un compte de service Google et associer le compte de service Kubernetes au compte de service Google.

Pour associer un compte de service Kubernetes à un compte de service Google, suivez ces étapes. Ce compte de service Google est le compte de service associé.

Si le compte de service associé est le compte de service Compute Engine par défaut du projet et que la configuration du service de point de terminaison est déployée dans le même projet, le compte de service doit disposer des autorisations suffisantes pour accéder aux ressources IAM. L'étape de configuration des rôles IAM peut être ignorée. Sinon, les rôles IAM suivants doivent être ajoutés au compte de service associé.

Ajoutez les rôles IAM requis :

Cette section décrit les ressources IAM utilisées par ESP et ESPv2, ainsi que les rôles IAM requis pour que le compte de service associé puisse accéder à ces ressources.

Configuration du service de point de terminaison

ESP et ESPv2 appellent Service Control, qui utilise la configuration du service de point de terminaison. Celle-ci est une ressource IAM. ESP et ESPv2 ont besoin du rôle Contrôleur du service pour y accéder.

Le rôle IAM s'applique à la configuration du service de point de terminaison, et non au projet. Un projet peut posséder plusieurs configurations de service de point de terminaison.

Utilisez la commande gcloud suivante pour ajouter le rôle au compte de service associé pour la configuration du service de point de terminaison.

gcloud endpoints services add-iam-policy-binding SERVICE_NAME \
  --member serviceAccount:SERVICE_ACCOUNT_NAME@DEPLOY_PROJECT_ID.iam.gserviceaccount.com \
  --role roles/servicemanagement.serviceController


* SERVICE_NAME est le nom du service de point de terminaison ;
* SERVICE_ACCOUNT_NAME@DEPLOY_PROJECT_ID.iam.gserviceaccount.com est le compte de service associé.

Cloud Trace

ESP et ESPv2 appellent le service Cloud Trace pour exporter Trace vers un projet. Ce projet est appelé projet de traçage. Dans ESP, le projet de traçage et le projet propriétaire de la configuration du service de point de terminaison sont identiques. Dans ESPv2, le projet de traçage peut être spécifié par l'option --tracing_project_id, et est défini par défaut sur le projet de déploiement.

ESP et ESPv2 nécessitent le rôle Agent Cloud Trace pour activer Cloud Trace.

Exécutez la commande gcloud suivante pour ajouter le rôle au compte de service associé :

gcloud projects add-iam-policy-binding TRACING_PROJECT_ID \
  --member serviceAccount:SERVICE_ACCOUNT_NAME@DEPLOY_PROJECT_ID.iam.gserviceaccount.com \
  --role roles/cloudtrace.agent


* TRACING_PROJECT_ID est l'ID du projet de traçage ;
* SERVICE_ACCOUNT_NAME@DEPLOY_PROJECT_ID.iam.gserviceaccount.com est le compte de service associé. Pour en savoir plus, consultez la page Comprendre les rôles.

Déployer les conteneurs sur le cluster

Les conteneurs proposent un mécanisme de regroupement logique qui permet d'extraire des applications de l'environnement dans lequel elles s'exécutent réellement. Suivez la procédure suivante pour déployer l'exemple d'API et le proxy ESPv2 sur le cluster. Pour déployer les conteneurs sur le cluster :

  1. Obtenez les identifiants du cluster et mettez-les à la disposition de kubectl:
        gcloud container clusters get-credentials NAME --zone ZONE
        
    Remplacez NAME par le nom du cluster et ZONE par sa zone.
  2. Déployez un service Kubernetes sur le cluster GKE. Le service Kubernetes met en œuvre l'API. Lancez une commande git clone sur ce dépôt, saisissez cd getting-started/ pour vous placer dans le répertoire, modifiez le fichier de configuration Kubernetes LANG-deployment.yaml, puis remplacez SERVICE_NAME par le nom de votre service dans les options de démarrage d'ESPv2.

    Java
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:2
      args: [
        "--listener_port=8081",
        "--backend=127.0.0.1:8080",
        "--service=SERVICE_NAME",
        "--rollout_strategy=managed",
        "--healthz=/healthz",
      ]
      readinessProbe:
        httpGet:
          path: /healthz
          port: 8081
    Python
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:2
      args: [
        "--listener_port=8081",
        "--backend=http://127.0.0.1:8080",
        "--service=SERVICE_NAME",
        "--rollout_strategy=managed",
        "--healthz=/healthz",
      ]
      readinessProbe:
        httpGet:
          path: /healthz
          port: 8081
    Go
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:2
      args: [
        "--listener_port", "8081",
        "--backend", "127.0.0.1:8080",
        "--service", "SERVICE_NAME",
        "--rollout_strategy", "managed",
        "--healthz=/healthz",
      ]
      readinessProbe:
        httpGet:
          path: /healthz
          port: 8081
    PHP
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:2
      args: [
        "--listener_port", "8081",
        "--backend", "127.0.0.1:8080",
        "--service", "SERVICE_NAME",
        "--rollout_strategy", "managed",
        "--healthz=/healthz",
      ]
    Ruby
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:2
      args: [
        "--listener_port", "8081",
        "--backend", "127.0.0.1:8080",
        "--service", "SERVICE_NAME",
        "--rollout_strategy", "managed",
        "--healthz=/healthz",
      ]
    NodeJS
    - name: esp
      image: gcr.io/endpoints-release/endpoints-runtime:2
      args: [
        "--listener_port", "8081",
        "--backend", "127.0.0.1:8080",
        "--service", "SERVICE_NAME",
        "--rollout_strategy", "managed",
        "--healthz=/healthz",
      ]
      readinessProbe:
        httpGet:
          path: /healthz
          port: 8081

    Exemple :

      args: [
        "--listener_port=8081",
        "--backend=http://127.0.0.1:8080",
        "--service=echo-api.endpoints.example-project-12345.cloud.goog ",
        "--rollout_strategy=managed",
      ]
    

    L'option --rollout_strategy=managed configure ESPv2 afin d'utiliser la dernière configuration de service déployée. Si cette option est spécifiée, une minute après le déploiement d'une nouvelle configuration de service, ESPv2 détecte la modification et commence à l'utiliser automatiquement. Nous vous recommandons de spécifier cette option plutôt que de fournir un ID de configuration spécifique à utiliser avec ESPv2. Pour en savoir plus sur les autres options à utiliser avec ESPv2, consultez la section Options de démarrage d'ESPv2.

  3. Démarrez le service Kubernetes à l'aide de la commande kubectl apply :

    Java
    kubectl apply -f java-deployment.yaml
    Python
    kubectl apply -f python-deployment.yaml
    Go
    kubectl apply -f golang-deployment.yaml
    PHP
    kubectl apply -f php-deployment.yaml
    Ruby
    kubectl apply -f ruby-deployment.yaml
    NodeJS
    kubectl apply -f nodejs-deployment.yaml

Si vous recevez un message d'erreur, reportez-vous à la page Dépannage de Cloud Endpoints dans GKE. Consultez la section Déployer le backend de l'API pour plus d'informations.

Obtenir l'adresse IP externe du cluster

Pour envoyer des requêtes à l'API, vous avez besoin de l'adresse IP externe du service. Après le démarrage du service dans le conteneur, l'adresse IP externe peut nécessiter quelques minutes pour être prête.

  1. Affichez l'adresse IP externe : kubectl get ingress
  2. Notez la valeur EXTERNAL-IP. Cette adresse IP est utilisée lorsque vous envoyez une requête à l'exemple d'API.

Envoyer une requête à l'aide d'une adresse IP

Maintenant que le service est en cours d'exécution dans le cluster de conteneurs et que vous disposez de l'adresse IP externe, vous pouvez envoyer des requêtes à l'API.

Créer une clé API et définir une variable d'environnement

L'exemple de code nécessite une clé API. Pour simplifier la requête, définissez une variable d'environnement pour la clé API.

  1. Dans le projet Google Cloud utilisé pour l'API, créez une clé API depuis la page des identifiants de l'API. Si vous souhaitez créer une clé API dans un autre projet Google Cloud, consultez la page Activer une API dans votre projet Google Cloud.

    Accéder à la page Identifiants

  2. Cliquez sur Créer les identifiants, puis sélectionnez Clé API.
  3. Copiez la clé dans le presse-papier.
  4. Cliquez sur Fermer.
  5. Sur votre ordinateur local, collez la clé API pour l'attribuer à une variable d'environnement :
    • Sous Linux ou macOS : export ENDPOINTS_KEY=AIza...
    • Dans Windows PowerShell : $Env:ENDPOINTS_KEY="AIza..."

Envoyer la requête

Linux ou macOS

Utilisez curl pour envoyer une requête HTTP à l'aide de la variable d'environnement ENDPOINTS_KEY définie précédemment. Remplacez IP_ADDRESS par l'adresse IP externe de l'instance.

curl --request POST \
   --header "content-type:application/json" \
   --data '{"message":"hello world"}' \
   "http://IP_ADDRESS:80/echo?key=${ENDPOINTS_KEY}"

Dans le curl précédent:

  • L'option --data indique les données à publier sur l'API.
  • L'option --header indique que les données sont au format JSON.

PowerShell

Utilisez Invoke-WebRequest pour envoyer une requête HTTP à l'aide de la variable d'environnement ENDPOINTS_KEY définie précédemment. Remplacez IP_ADDRESS par l'adresse IP externe de l'instance.

(Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' `
    -Headers @{"content-type"="application/json"} `
    -URI "http://IP_ADDRESS:80/echo?key=$Env:ENDPOINTS_KEY").Content

Dans l'exemple ci-dessus, les deux premières lignes se terminent par un accent grave. Lorsque vous collez l'exemple dans PowerShell, assurez-vous qu'il n'y a pas d'espace après les accents graves. Pour plus d'informations sur les options utilisées dans l'exemple de requête, consultez la page Invoke-WebRequest dans la documentation Microsoft.

Application tierce

Vous pouvez utiliser une application tierce telle que l'extension Postman du navigateur Chrome pour envoyer la requête :

  • Sélectionnez POST comme verbe HTTP.
  • Pour l'en-tête, sélectionnez la clé content-type et la valeur application/json.
  • Pour le corps, saisissez ce qui suit:
    {"message":"hello world"}
  • Dans l'URL, utilisez la clé API réelle plutôt que la variable d'environnement. Par exemple :
    http://192.0.2.0:80/echo?key=AIza...

L'API renvoie le message que vous lui avez envoyé et répond avec les éléments suivants :

{
  "message": "hello world"
}

Si vous ne recevez pas de réponse positive, consultez la section Dépanner des erreurs de réponse.

Vous venez de déployer et de tester une API dans Endpoints.

Suivre l'activité de l'API

Pour suivre l'activité de l'API :

  1. Examinez les graphiques d'activité de l'API dans la page Endpoints > Services.

    Accédez à la page Services Endpoints


    Il peut s'écouler quelques instants avant que la requête ne soit reflétée dans les graphiques.
  2. Consultez les journaux de requêtes de votre API sur la page de l'explorateur de journaux.

    Accéder à la page "Explorateur de journaux"

Configurer le DNS pour Endpoints

Comme le nom du service Endpoints pour l'API se trouve dans le domaine .endpoints.YOUR_PROJECT_ID.cloud.goog, vous pouvez l'utiliser comme nom de domaine complet en modifiant légèrement la configuration de votre fichier openapi.yaml. De cette façon, vous pouvez envoyer des requêtes à l'exemple d'API à l'aide de echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog au lieu de l'adresse IP.

Pour configurer le DNS Endpoints :

  1. Ouvrez le fichier de configuration OpenAPI, openapi.yaml, et ajoutez la propriété x-google-endpoints au niveau supérieur du fichier (elle ne doit pas être en retrait ni imbriquée), comme indiqué dans l'extrait suivant:
    host: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog"
    x-google-endpoints:
    - name: "echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog"
      target: "IP_ADDRESS"
    
  2. Dans la propriété name, remplacez YOUR_PROJECT_ID par l'ID de votre projet.
  3. Dans la propriété target, remplacez IP_ADDRESS par l'adresse IP que vous avez utilisée lorsque vous avez envoyé une requête à l'exemple d'API.
  4. Déployez le fichier de configuration OpenAPI mis à jour sur Service Management :
    gcloud endpoints services deploy openapi.yaml
    

Par exemple, supposons que le fichier openapi.yaml soit configuré comme suit:

host: "echo-api.endpoints.example-project-12345.cloud.goog"
x-google-endpoints:
- name: "echo-api.endpoints.example-project-12345.cloud.goog"
  target: "192.0.2.1"

Lorsque vous déployez le fichier openapi.yaml à l'aide de la commande gcloud ci-dessus, Service Management crée un enregistrement A DNS, echo-api.endpoints.my-project-id.cloud.goog, qui est associé à l'adresse IP cible 192.0.2.1. La propagation de la nouvelle configuration DNS peut prendre quelques minutes.

Configurer SSL

Pour plus d'informations sur la configuration du DNS et de SSL, consultez la page Activer SSL pour Endpoints.

Envoyer une requête à l'aide du nom de domaine complet

Maintenant que l'enregistrement DNS est configuré pour l'exemple d'API, envoyez une requête à l'aide du nom de domaine complet (remplacez YOUR_PROJECT_ID par votre ID de projet) et de la variable d'environnement ENDPOINTS_KEY définie précédemment :
  • Sous Linux ou Mac OS :
    curl --request POST \
        --header "content-type:application/json" \
        --data '{"message":"hello world"}' \
        "http://echo-api.endpoints.YOUR_PROJECT_ID.cloud.goog:80/echo?key=${ENDPOINTS_KEY}"
  • Dans Windows PowerShell :
    (Invoke-WebRequest -Method POST -Body '{"message": "hello world"}' -Headers @{"content-type"="application/json"} -URI "http://echo-api.endpoints.[YOUR_PROJECT_ID].cloud.goog:80/echo?key=$Env:ENDPOINTS_KEY").Content

Créer un portail développeur pour l'API

Vous pouvez utiliser le portail Cloud Endpoints pour créer un portail des développeurs, c'est-à-dire un site Web qui vous permet d'interagir avec l'exemple d'API. Pour en savoir plus, consultez la page Présentation du portail Cloud Endpoints.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Pour plus d'informations sur l'arrêt des services utilisés par ce tutoriel, consultez la page Supprimer une API et des instances d'API.

Étapes suivantes