1. Présentation
Dans cet atelier, vous allez déployer un microservice à deux niveaux avec un pod s'exécutant 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 fournit des fonctionnalités permettant de gérer les utilisateurs enregistrés. L'application Customer Service est un microservice basé sur Java qui utilise le framework Quarkus.

AlloyDB est compatible avec la connectivité réseau via des adresses IP internes privées configurées pour l'accès aux services privés.
L'accès aux services privés est mis en œuvre sous la forme d'une connexion d'appairage VPC entre votre réseau VPC et le réseau VPC Google Cloud sous-jacent dans lequel 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 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, ce qui inclut 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
Configurer un 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 la 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 de votre 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. 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 le gke-lab-setup.sh
Les ressources suivantes seront créées :
- Cluster et instance AlloyDB
- Artifact Registry pour stocker les images de conteneurs pour Cloud Run Job et Customer Service
- Connecteur d'accès VPC pour que Cloud Run Job communique avec la base de données AlloyDB
- Cloud Run Job pour créer une base de données AlloyDB
- Cluster GKE Autopilot
./gke-lab-setup.sh
Si vous êtes invité à autoriser, 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 de l'application
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
Explorez les fonctionnalités disponibles(Query Insight, Monitoring) dans la console.

Examiner le 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)')
Dans le cadre 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 Customer Service.
L'application Customer Service 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 examiner les détails de la dernière compilation.

Définissez la variable d'environnement ci-dessous à l'aide de 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 afin de stocker les identifiants de base de données qui seront utilisés par l'application Customer Service 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
L'application passera à l'état RUNNING (En cours d'exécution) dans quelques instants.
Exécutez la commande pour créer une adresse IP externe qui sera utilisée lors des é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 de Customer Service.
kubectl get svc
Définissez la variable d'environnement ci-dessous à l'aide de la valeur de l'adresse IP externe du résultat précédent.
CUSTOMER_SERVICE_URL=$(kubectl get svc customer-service -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')
Exécutez les commandes ci-dessous pour créer un enregistrement 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 enregistrements client
Exécutez les commandes ci-dessous pour afficher l'enregistrement client créé.
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 "Customer already exists" (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 à CloudSQL privé depuis Cloud Run
- Se connecter à des bases de données entièrement gérées à partir de Cloud Run
- Sécuriser une application sans serveur avec Identity-Aware Proxy (IAP)
- Déclencher des jobs Cloud Run avec Cloud Scheduler
- Déployer en toute sécurité sur Cloud Run
- Sécuriser le trafic d'entrée Cloud Run
Libérer de l'espace
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.