1. Présentation
Dans cet atelier, vous allez déployer un microservice à deux niveaux avec un pod exécuté sur GKE Autopilot et le connecter à une instance privée de base de données AlloyDB. L'application Customer Service fait partie du système Cymbal Eats et permet de gérer les utilisateurs enregistrés. L'application de service client est un microservice basé sur Java qui utilise le framework Quarkus.

AlloyDB est compatible avec la connectivité réseau via des adresses IP privées et internes configurées pour l'accès aux services privés.
L'accès aux services privés est implémenté sous la forme d'une connexion d'appairage VPC entre votre réseau VPC et le réseau VPC Google Cloud sous-jacent où résident vos ressources AlloyDB (clusters et instances). La connexion privée permet aux ressources de votre réseau VPC de communiquer avec les ressources AlloyDB auxquelles elles accèdent exclusivement à l'aide d'adresses IP internes. Les ressources de votre réseau VPC n'ont pas besoin d'accéder à Internet ni de disposer d'adresses IP externes pour atteindre les ressources AlloyDB.

Qu'est-ce que GKE Autopilot ?
GKE Autopilot est un mode de fonctionnement de GKE dans lequel Google gère la configuration de votre cluster, y compris vos nœuds, le scaling, la sécurité et d'autres paramètres préconfigurés. Les clusters Autopilot sont optimisés pour exécuter la plupart des charges de travail de production et provisionner des ressources de calcul en fonction de vos fichiers manifestes Kubernetes. La configuration simplifiée respecte les bonnes pratiques et recommandations de GKE concernant la configuration, l'évolutivité et la sécurité des clusters et des charges de travail. Pour obtenir la liste des paramètres intégrés, reportez-vous au tableau de comparaison Standard et Autopilot.
Qu'est-ce qu'AlloyDB ?
Service de base de données entièrement géré compatible avec PostgreSQL pour vos charges de travail de bases de données d'entreprise les plus exigeantes. AlloyDB associe le meilleur de Google à l'un des moteurs de base de données Open Source les plus utilisés, PostgreSQL, pour des performances, une évolutivité et une disponibilité optimales.
Objectifs de l'atelier
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
- Créer une instance privée de base de données AlloyDB
- Déployer une application sur un cluster GKE Autopilot qui se connecte à une instance AlloyDB
Prérequis
- Dans cet atelier, nous considérons que vous connaissez la console Cloud et les environnements Cloud Shell.
- Une expérience préalable avec GKE et AlloyDB est utile, mais pas obligatoire.
2. Préparation
Configuration du projet Cloud
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pouvez le modifier à tout moment.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID du projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.
Configuration de l'environnement
Activez Cloud Shell en cliquant sur l'icône à droite de la barre de recherche.

Clonez le dépôt et accédez au répertoire. Pour ce faire, copiez et collez la commande ci-dessous dans le terminal, puis appuyez sur Entrée :
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/customer-service
Déployez les dépendances requises en exécutant gke-lab-setup.sh.
Les ressources suivantes seront créées :
- Cluster et instance AlloyDB
- Artifact Registry pour stocker les images de conteneurs pour les jobs Cloud Run et le service client
- Connecteur d'accès au VPC pour que Cloud Run Job communique avec la base de données AlloyDB
- Job Cloud Run pour créer une base de données AlloyDB
- Cluster GKE Autopilot
./gke-lab-setup.sh
Si vous êtes invité à donner votre autorisation, cliquez sur "Autoriser" pour continuer.

La configuration prendra environ 10 minutes. Examinez le script de configuration utilisé pour créer les dépendances requises.
gke-lab-setup.sh
Attendez que le script soit terminé et que le résultat ci-dessous s'affiche avant de passer aux étapes suivantes.
Job [db-job] has successfully been created. To execute this job, use: gcloud beta run jobs execute db-job OK Creating execution... Done. OK Provisioning resources... Done. Execution [db-job-k94ps] has successfully started running.
3. Déploiement d'applications
Examiner le cluster AlloyDB
Exécutez la commande ci-dessous pour examiner l'instance AlloyDB créée :
gcloud alloydb instances describe customer-instance --cluster=customer-cluster --region=us-central1
Exemple de résultat :
createTime: '2023-01-06T14:40:07.213288293Z' instanceType: PRIMARY ipAddress: 10.77.176.2 machineConfig: cpuCount: 2 name: projects/cymbal-eats-20056-16671/locations/us-central1/clusters/customer-cluster/instances/customer-instance nodes: - zoneId: us-central1-f queryInsightsConfig: queryPlansPerMinute: 5 queryStringLength: 1024 recordApplicationTags: true recordClientAddress: true reconciling: false state: READY uid: df90d57d-88df-49be-a626-6dfec0513e64 updateTime: '2023-01-06T14:49:40.907977843Z' writableNode: zoneId: us-central1-b
Découvrez les fonctionnalités disponibles(insights sur les requêtes, surveillance) dans la console.

Examiner un cluster GKE Autopilot
Définissez les variables d'environnement du projet :
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
Lors de la configuration initiale, le cluster a été créé à l'aide de la commande ci-dessous (vous n'avez pas besoin d'exécuter cette commande) :
gcloud container clusters create-auto $CLUSTER_NAME --region $REGION
Exécutez la commande pour afficher le cluster GKE Autopilot créé :
gcloud container clusters list
Exemple de résultat :

Exécutez la commande pour stocker les identifiants du cluster :
CLUSTER_NAME=rewards-cluster
REGION=us-central1
gcloud container clusters get-credentials $CLUSTER_NAME --region=$REGION
Déployer une application
Vous allez ensuite déployer une application de service client.
L'application de service client est un microservice basé sur Java qui utilise le framework Quarkus.
Accédez au dossier cymbal-eats/customer-service et exécutez les commandes pour créer et importer l'image de conteneur :
./mvnw clean package -DskipTests
export CUSTOMER_SERVICE_IMAGE=gcr.io/$PROJECT_ID/customer-service:1.0.0
gcloud builds submit --tag $CUSTOMER_SERVICE_IMAGE .
Ouvrez Cloud Build dans la console pour consulter les détails de la dernière compilation.

Définissez la variable d'environnement ci-dessous en utilisant la valeur de l'adresse IP privée AlloyDB :
export DB_HOST=$(gcloud beta alloydb instances describe customer-instance \
--cluster=customer-cluster \
--region=$REGION \
--format=json | jq \
--raw-output ".ipAddress")
echo $DB_HOST
Exécutez les commandes ci-dessous pour créer un objet secret Kubernetes permettant de stocker les identifiants de base de données qui seront utilisés par l'application de service client pour se connecter à la base de données :
DB_NAME=customers
DB_USER=postgres
DB_PASSWORD=password123
kubectl create secret generic gke-alloydb-secrets \
--from-literal=database=$DB_NAME \
--from-literal=username=$DB_USER \
--from-literal=password=$DB_PASSWORD \
--from-literal=db_host=$DB_HOST
Exécutez la commande pour remplacer CUSTOMER_SERVICE_IMAGE dans le fichier deployment.yaml :
sed "s@CUSTOMER_SERVICE_IMAGE@$CUSTOMER_SERVICE_IMAGE@g" deployment.yaml.tmpl > customer-service-deployment.yaml
Exécutez la commande pour déployer l'application :
kubectl apply -f customer-service-deployment.yaml
Il faut quelques instants pour que l'application passe à l'état "RUNNING" (En cours d'exécution).
Exécutez la commande pour créer l'adresse IP externe qui sera utilisée dans les étapes de test :
SERVICE_NAME=customer-service
kubectl expose deployment $SERVICE_NAME \
--type LoadBalancer --port 80 --target-port 8080
Exécutez la commande pour vérifier les ressources créées :
kubectl get all
Exemple de résultat :

4. Tester l'application
Exécutez les commandes ci-dessous pour enregistrer l'URL du service client.
kubectl get svc
Définissez la variable d'environnement ci-dessous en utilisant la valeur de l'adresse IP externe de la sortie précédente.
CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
Exécutez les commandes ci-dessous pour créer une fiche client :
curl -X POST $CUSTOMER_SERVICE_URL/customer \
-H 'Content-Type: application/json' \
-d '{"id": "id1","rewardPoints": 3,"address": "1845 Denise St","city": "Mountain View","createDateTime": "2022-11-11T15:56:45.487566","email": "ajensen9090+eats@gmail.com","name": "Angela Jensen","state": "CA","updateDateTime": "2022-11-11T15:56:45.866125","zip": "94043"}'
Exécutez la commande ci-dessus plusieurs fois pour générer des messages de journal que vous pourrez afficher ultérieurement dans l'explorateur de journaux.
Examiner les fiches client
Exécutez les commandes ci-dessous pour afficher la fiche client créée.
curl $CUSTOMER_SERVICE_URL/customer | jq
Exemple de résultat :
[
{
"address": "1845 Denise St",
"city": "Mountain View",
"createDateTime": "2023-01-06T16:13:19.118744",
"email": "ajensen9090+eats@gmail.com",
"id": "id1",
"name": "Angela Jensen",
"rewardPoints": 3,
"state": "CA",
"updateDateTime": "2023-01-06T16:13:19.118896",
"zip": "94043"
}
]
Examiner les charges de travail et les services GKE
Ouvrez Kubernetes Engine dans la console Cloud et examinez les charges de travail et les services créés.


Journaux d'application
Ouvrez l'explorateur de journaux et recherchez les journaux contenant le texte "Le client existe déjà".

5. Félicitations !
Félicitations, vous avez terminé cet atelier de programmation.
Points abordés
- Créer une instance privée de base de données AlloyDB
- Déployer une application sur un cluster GKE Autopilot qui se connecte à une instance AlloyDB
Étapes suivantes :
Découvrez d'autres ateliers de programmation Cymbal Eats :
- Déclencher des workflows Cloud avec Eventarc
- Déclencher le traitement des événements à partir de Cloud Storage
- Se connecter à une instance CloudSQL privée depuis Cloud Run
- Se connecter à des bases de données entièrement gérées depuis Cloud Run
- Sécuriser une application serverless avec Identity-Aware Proxy (IAP)
- Déclencher des jobs Cloud Run avec Cloud Scheduler
- Déployer de manière sécurisée sur Cloud Run
- Sécuriser le trafic d'entrée Cloud Run
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 chaque ressource individuellement.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.