Comment lancer des requetes https avec Google Cloud Functions en Python ?

La plateforme Google Cloud Platform (GCP) permet de déployer facilement en ligne des micro-services (code executant des tâches rapides) grâce aux Google Cloud Functions. Les Google Cloud Functions permettent d’executer du code Python en ligne sans avoir à gerer l’infrastructure (serveur, conteneurs, etc) (l’equivalent côté Amazon WebServices est Lambdas). Ces fonctions se déclenchent selon des règles précises (horaire défini, appel http par un autre service, evenement Pub/Sub).

Pour lancer une requete HTTPS à une API via une Google Cloud Function, il est possible de passer par du code Python.

Les librairies utilisées sont :

  • requests (pour faire des requetes http simples)
  • google.auth.transport.requests et google.oauth2.id_token (pour recupérer les infos d’authentification de notre compte GCP)
  • urllib (pour faire des requetes http plus complexes)

Ensuite, il s’agit de préciser les différents composants d’une requête (header, payload, authentification), puis de rassembler tous ces elements pour envoyer la requete avec urllib.

Code d’exemple pour qu’un micro-service en appelle un autre (entre un service maitre et un service élève) :

import functions_framework

import requests
import google.auth.transport.requests
import google.oauth2.id_token
import urllib
from urllib import request, parse

#print("-- URL de la Google Cloud Run Function associee")
url = "https://mon-service-micro.europe-west1.run.app"

#print("-- infos a transmettre dans objet data")
data = {
	"dates" : {
		"date_debut" : date_start,
		"date_fin" : date_end
	}
}

#print("-- preparation de la requete")
req = urllib.request.Request(url, data=json.dumps(data).encode("utf-8"))

#print("-- recuperation des infos d authentification")
auth_req = google.auth.transport.requests.Request()
id_token = google.oauth2.id_token.fetch_id_token(auth_req, url)

#print("-- preparation des infos d authentification pour la requete")
req.add_header("Authorization", "Bearer " + id_token)
req.add_header("Content-Type", "application/json")

#print("-- envoi de la requete")
response = urllib.request.urlopen(req)

#print("-- recuperation de la reponse")
response_content = response.read()

0.00 avg. rating (0% score) - 0 votes

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *