1. Présentation
Cet atelier présente des fonctionnalités conçues pour simplifier le workflow de développement des ingénieurs logiciel chargés de développer des applications Python dans un environnement conteneurisé. En règle générale, le développement de conteneurs nécessite que l'utilisateur comprenne les détails des conteneurs et le processus de création de conteneurs. De plus, les développeurs doivent généralement interrompre leur flux et sortir de leur IDE pour tester et déboguer leurs applications dans des environnements distants. Grâce aux outils et technologies mentionnés dans ce tutoriel, les développeurs peuvent travailler efficacement avec des applications conteneurisées sans quitter leur IDE.
Qu'est-ce que Cloud Workstations ?
Cloud Workstations fournit des environnements de développement gérés sur Google Cloud avec une sécurité intégrée et des environnements de développement préconfigurés, mais personnalisables. Accédez à Cloud Workstations via un IDE intégré au navigateur, depuis plusieurs éditeurs de code locaux (tels que VSCode ou les IDE JetBrains tels que IntelliJ IDEA Ultimate et PyCharm Professional) ou SSH.
Cloud Workstations utilise les ressources suivantes:
- Les administrateurs créent des clusters de stations de travail
- Dans chaque cluster de stations de travail, les administrateurs créent une ou plusieurs configurations de stations de travail qui servent de modèles pour les stations de travail.
- Les développeurs peuvent créer des stations de travail qui définissent des environnements de développement et fournissent un IDE Cloud, des outils de langage, des bibliothèques, etc.
Cloud Workstations permet aux administrateurs informatiques et de sécurité de provisionner, faire évoluer, gérer et sécuriser facilement leurs environnements de développement. Les développeurs peuvent également accéder aux environnements de développement à l'aide de configurations cohérentes et d'outils personnalisables.
Cloud Workstations vous aide à faire évoluer la sécurité en renforçant la stratégie de sécurité de vos environnements de développement d'applications. Il offre des fonctionnalités de sécurité telles que VPC Service Controls, une entrée ou une sortie privées, la mise à jour forcée des images et des règles d'accès Identity and Access Management.
Qu'est-ce que Cloud Code ?
Cloud Code fournit une compatibilité IDE pour tout le cycle de développement des applications Kubernetes et Cloud Run, de la création et de la personnalisation d'une application à partir d'exemples de modèles à l'exécution de votre application finale. Cloud Code vous accompagne tout au long du processus grâce à des exemples prêts à l'emploi, des extraits de configuration prêts à l'emploi et une expérience de débogage sur mesure, ce qui facilite grandement le développement avec Kubernetes et Cloud Run.
Voici quelques-unes des fonctionnalités de Cloud Code:
- Créer et exécuter des applications en continu
- Assistance au débogage de votre application Kubernetes en cours de développement
- Lecture en streaming et affichage des journaux
Découvrez les autres fonctionnalités de Cloud Code.
Objectifs de l'atelier
Dans cet atelier, vous allez découvrir des méthodes de développement avec des conteneurs dans GCP, y compris:
- Examiner Cloud Workstations
- Lancer la station de travail
- Examiner Cloud Code
- Déboguer sur Kubernetes
2. Préparation
Configuration de l'environnement d'auto-formation
- 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. généralement, vous ne vous souciez
pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre au hasard. Vous pouvez également essayer la vôtre pour voir si elle est disponible. Il ne peut pas être modifié après cette étape et restera actif pendant toute la durée du projet. - Pour votre information, il existe une troisième valeur, le numéro de projet, utilisé par certaines API. 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 arrêter les ressources afin d'éviter que des frais ne vous soient facturés au-delà de ce tutoriel, vous pouvez supprimer les ressources que vous avez créées ou l'ensemble du projet. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.
Configuration de l'environnement
Dans Cloud Shell, définissez l'ID et le numéro de votre projet. Enregistrez-les en tant que variables PROJECT_ID
et PROJECT_ID
.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
Dans cet atelier, vous allez déployer du code sur GKE. Vous utiliserez également des stations de travail Cloud comme IDE.
Le script de configuration ci-dessous prépare cette infrastructure pour vous.
- Téléchargez le script d'installation et rendez-le exécutable.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/setup_with_cw.sh
chmod +x setup_with_cw.sh
- Ouvrir le fichier
setup_with_cw.sh
et modifier les valeurs des mots de passe actuellement définis sur CHANGEME - Exécutez le script de configuration pour mettre en place un cluster GKE que vous utiliserez dans cet atelier. Cette configuration prendra environ 20 minutes.
./setup_with_cw.sh &
- Ouvrez Cloud Workstations dans la console Cloud. Attendez que le cluster soit à l'état
READY
avant de passer aux étapes suivantes. - Si votre session Cloud Shell a été déconnectée, cliquez sur "Reconnecter". puis exécutez la commande gcloud cli pour définir l'ID du projet. Remplacez l'exemple d'ID de projet ci-dessous par l'ID de votre projet Qwiklabs avant d'exécuter la commande.
gcloud config set project qwiklabs-gcp-project-id
- Téléchargez et exécutez le script ci-dessous dans le terminal pour créer une configuration Cloud Workstations.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
Cluster et configuration Cloud Workstations
Ouvrez Cloud Workstations dans la console Cloud. Vérifiez que le cluster est à l'état READY
.
Vérifiez l'état des configurations existantes.
Créez une station de travail.
Remplacez le nom par my-workstation
et sélectionnez la configuration existante: codeoss-python
.
Lancer la station de travail
- Démarrez et lancez la station de travail. Le démarrage de la station de travail prend quelques instants.
- Autorisez les cookies tiers en cliquant sur l'icône dans la barre d'adresse.
- Cliquez sur "Site inactif ?".
- Cliquez sur "Autoriser les cookies".
- Une fois la station de travail lancée, l'IDE Code OSS s'affiche.
Cliquez sur "Marquer comme terminé". sur la page "Premiers pas", l'IDE du poste de travail
3. Présentation de Cloud Code
Passez en revue les différentes sections disponibles dans Cloud Code.
- Développement Kubernetes. Bénéficiez d'un environnement de développement et de débogage Kubernetes entièrement intégré à votre IDE. Créez et gérez les clusters directement depuis votre IDE.
- Déboguer les applications en cours d'exécution. Déboguez le code directement dans vos IDE avec Cloud Code pour VS Code et Cloud Code pour IntelliJ grâce aux fonctionnalités de débogage IDE intégrées.
- Découvrir les déploiements Affichez les ressources et les métadonnées sous-jacentes de vos clusters Kubernetes et services Cloud Run. Vous pouvez récupérer une description, afficher les journaux, gérer les secrets ou intégrer un terminal directement dans un pod.
- Simplifiez le développement local Kubernetes. En coulisses, Cloud Code pour les IDE utilise des outils populaires tels que Skaffold, Jib et kubectl pour vous fournir un retour continu et en temps réel sur votre code.
Se connecter à Google Cloud
- Cliquez sur l'icône Cloud Code et sélectionnez "Sign in to Google Cloud" (Se connecter à Google Cloud) :
- Cliquez sur "Procéder à la connexion".
- Vérifiez le résultat dans le terminal et ouvrez le lien:
- Connectez-vous avec vos identifiants d'étudiant Qwiklabs.
- Sélectionnez "Autoriser" :
- Copiez le code de validation et revenez à l'onglet "Station de travail".
- Collez le code de validation, puis appuyez sur Entrée.
Cliquez sur le bouton "Autoriser" si ce message s'affiche, afin que vous puissiez copier et coller le contenu sur le poste de travail.
4. Créer une application de démarrage Python
Dans cette section, vous allez créer une application Python.
- Ouvrez un nouveau terminal.
- Créer un répertoire et l'ouvrir en tant qu'espace de travail
mkdir music-service && cd music-service
code-oss-cloud-workstations -r --folder-uri="$PWD"
- Créez un fichier nommé
requirements.txt
et copiez-y le contenu suivant.
Flask
gunicorn
ptvsd==4.3.2
- Créez un fichier nommé
app.py
et collez-y le code suivant.
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/")
def hello_world():
message="Hello, World!"
return message
if __name__ == '__main__':
server_port = os.environ.get('PORT', '8080')
app.run(debug=False, port=server_port, host='0.0.0.0')
- Créez un fichier nommé
Dockerfile
et collez-y le code suivant.
FROM python:3.8
ARG FLASK_DEBUG=0
ENV FLASK_DEBUG=$FLASK_DEBUG
ENV FLASK_APP=app.py
WORKDIR /app
COPY requirements.txt .
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "-m", "flask", "run", "--port=8080", "--host=0.0.0.0"]
Remarque: FLASK_DEBUG=1 vous permet d'actualiser automatiquement les modifications de code dans une application de flask Python. Ce Dockerfile vous permet de transmettre cette valeur en tant qu'argument de compilation.
Générer des fichiers manifestes
Dans votre terminal, exécutez la commande suivante pour générer un skaffold.yaml
et un deployment.yaml
par défaut.
- Initialisez Skaffold à l'aide de la commande suivante :
skaffold init --generate-manifests
Lorsque vous y êtes invité, utilisez les flèches pour déplacer votre curseur et la barre d'espace pour sélectionner les options.
Choisissez :
8080
pour le porty
pour enregistrer la configuration
Mettre à jour les configurations Skaffold
- Modifier le nom d'application par défaut
- Ouvrir
skaffold.yaml
- Sélectionnez le nom de l'image actuellement défini sur
dockerfile-image
- Effectuez un clic droit et sélectionnez "Modifier toutes les occurrences"
- Saisissez le nouveau nom
python-app
. - Modifiez ensuite la section de compilation pour
- ajoutez
docker.buildArgs
pour transmettreFLASK_DEBUG=1
- Synchronisez les paramètres pour charger les modifications apportées aux fichiers
*.py
depuis l'IDE vers le conteneur en cours d'exécution
Une fois les modifications effectuées, la section de compilation du fichier skaffold.yaml
se présente comme suit:
build:
artifacts:
- image: python-app
docker:
buildArgs:
FLASK_DEBUG: "1"
dockerfile: Dockerfile
sync:
infer:
- '**/*.py'
Modifier le fichier de configuration Kubernetes
- Modifier le nom par défaut
- Ouvrir le fichier
deployment.yaml
- Sélectionnez le nom de l'image actuellement défini sur
dockerfile-image
- Effectuez un clic droit et sélectionnez "Modifier toutes les occurrences"
- Saisissez le nouveau nom
python-app
.
5. Parcourir le processus de développement
Une fois la logique métier ajoutée, vous pouvez déployer et tester votre application. La section suivante présente l'utilisation du plug-in Cloud Code. Entre autres, ce plug-in s'intègre à Skaffold pour simplifier votre processus de développement. Lors des étapes suivantes, Cloud Code et Skaffold créent automatiquement votre image de conteneur, la transfèrent vers Container Registry, puis déploient l'application your
sur GKE. Cela se produit en arrière-plan afin d'éliminer les détails du flux de développement.
Ajouter un cluster Kubernetes
- Ajouter un cluster
- Sélectionnez Google Kubernetes Engine:
- Sélectionnez un projet.
- Sélectionnez "python-cluster" créé lors de la configuration initiale.
- Le cluster apparaît désormais dans la liste des clusters Kubernetes sous Cloud Code. Naviguez et explorez le cluster à partir de cette page.
Déployer sur Kubernetes
- Dans le volet situé en bas de l'éditeur Cloud Shell, sélectionnez Cloud Code .
- Dans le panneau qui s'affiche en haut de l'écran, sélectionnez Exécuter sur Kubernetes.
Si vous y êtes invité, sélectionnez "Oui" pour utiliser le contexte Kubernetes actuel.
Cette commande lance une compilation du code source, puis exécute les tests. L'exécution de la compilation et des tests prend quelques minutes. Ces tests incluent des tests unitaires et une étape de validation qui vérifie les règles définies pour l'environnement de déploiement. Cette étape de validation est déjà configurée. Elle vous permet de recevoir des avertissements en cas de problèmes de déploiement, même lorsque vous travaillez encore dans votre environnement de développement.
- Lorsque vous exécutez la commande pour la première fois, une invite s'affiche en haut de l'écran pour vous demander si vous voulez le contexte Kubernetes actuel. Sélectionnez "Oui" accepter et utiliser le contexte actuel.
- Une invite s'affiche ensuite pour vous demander quel registre de conteneurs utiliser. Appuyez sur Entrée pour accepter la valeur par défaut fournie
- Sélectionnez la sortie dans le volet inférieur pour afficher la progression et les notifications. Dans le menu déroulant, sélectionnez "Kubernetes: Run/Debug" (Kubernetes : Exécuter/Déboguer).
- Sélectionnez "Kubernetes: Run/Debug - Détaillé". dans le menu déroulant du canal à droite pour afficher des informations supplémentaires et les journaux diffusés en direct depuis les conteneurs.
Une fois la compilation et les tests terminés, les journaux de l'onglet "Output" (Sortie) présentent l'URL http://localhost:8080 dans la liste "Kubernetes: Run/Debug" (Kubernetes : Run/Debug). vue.
- Dans le terminal Cloud Code, pointez sur la première URL du résultat (http://localhost:8080), puis sélectionnez "Ouvrir l'aperçu sur le Web" dans l'info-bulle qui s'affiche.
- Un nouvel onglet de navigateur s'ouvre et affiche le message suivant:
Hello, World!
Actualisation à chaud
- Ouvrez le fichier
app.py
. - Remplacez le message d'accueil par
Hello from Python
Notez immédiatement que dans la fenêtre Output
(vue Kubernetes: Run/Debug
), l'observateur synchronise les fichiers mis à jour avec le conteneur dans Kubernetes.
Update initiated Build started for artifact python-app Build completed for artifact python-app Deploy started Deploy completed Status check started Resource pod/python-app-6f646ffcbb-tn7qd status updated to In Progress Resource deployment/python-app status updated to In Progress Resource deployment/python-app status completed successfully Status check succeeded ...
- Si vous passez à la vue
Kubernetes: Run/Debug - Detailed
, vous remarquerez qu'elle reconnaît les modifications apportées aux fichiers, puis qu'elle crée et redéploie l'application.
files modified: [app.py]
Syncing 1 files for gcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Copying files:map[app.py:[/app/app.py]]togcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Watching for changes...
[python-app] * Detected change in '/app/app.py', reloading
[python-app] * Restarting with stat
[python-app] * Debugger is active!
[python-app] * Debugger PIN: 744-729-662
- Actualisez l'onglet du navigateur dans lequel vous avez vu les résultats précédents pour voir les résultats mis à jour.
Débogage
- Accédez à la vue de débogage et arrêtez le thread actuel
. Si l'invite s'affiche, vous pouvez choisir de procéder à un nettoyage après chaque exécution.
- Cliquez sur
Cloud Code
dans le menu du bas et sélectionnezDebug on Kubernetes
pour exécuter l'application en modedebug
.
- Dans la vue
Kubernetes Run/Debug - Detailed
de la fenêtreOutput
, notez que Skaffold va déployer cette application en mode débogage.
- Lors de la première exécution, une invite vous demande où se trouve la source dans le conteneur. Cette valeur est liée aux répertoires du Dockerfile.
Appuyez sur Entrée pour accepter les valeurs par défaut
La création et le déploiement de l'application prennent quelques minutes. Si la session de débogage est déconnectée, réexécutez les étapes pour "Déboguer sur Kubernetes". de l'événement "Development Sessions" .
- Une fois le processus terminé. Vous remarquerez qu'un débogueur est joint et que l'onglet "Output" (Sortie) indique
Attached debugger to container "python-app-8476f4bbc-h6dsl" successfully.
. L'URL http://localhost:8080 est indiquée.
Port forwarding pod/python-app-8bd64cf8b-cskfl in namespace default, remote port 5678 -> http://127.0.0.1:5678
- La barre d'état inférieure passe du bleu à l'orange pour indiquer qu'elle est en mode débogage.
- Dans la vue
Kubernetes Run/Debug
, vous remarquerez qu'un conteneur débogable a démarré.
**************URLs***************** Forwarded URL from service python-app: http://localhost:8080 Debuggable container started pod/python-app-8bd64cf8b-cskfl:python-app (default) Update succeeded ***********************************
Utiliser des points d'arrêt
- Ouvrez le fichier
app.py
. - Recherchez l'instruction
return message
- Ajoutez un point d'arrêt à cette ligne en cliquant sur l'espace vide à gauche du numéro de ligne. Un indicateur rouge s'affiche pour indiquer que le point d'arrêt est défini.
- Actualisez votre navigateur et notez que le débogueur arrête le processus au point d'arrêt et vous permet d'examiner les variables et l'état de l'application qui s'exécute à distance dans GKE.
- Cliquez sur la section "VARIABLES" vers le bas.
- Cliquez sur "Locals", vous trouverez la variable
"message"
. - Double-cliquez sur le nom de variable "message". Dans la fenêtre pop-up, remplacez la valeur par un autre élément, comme
"Greetings from Python"
. - Cliquez sur le bouton "Continuer" dans le panneau de configuration du débogage
.
- Examinez la réponse dans votre navigateur qui affiche à présent la nouvelle valeur que vous venez de saisir.
- Arrêter le processus de débogage en appuyant sur le bouton d'arrêt
. Pour supprimer le point d'arrêt, cliquez à nouveau dessus.
6. Nettoyage
Félicitations ! Dans cet atelier, vous avez entièrement créé une application Python et l'avez configurée pour fonctionner efficacement avec des conteneurs. Vous avez ensuite déployé et débogué votre application sur un cluster GKE distant en suivant le même parcours de développement que dans les piles d'applications traditionnelles.
Pour effectuer un nettoyage une fois l'atelier terminé:
- Supprimer les fichiers utilisés dans l'atelier
cd ~ && rm -rf ~/music-service
- Supprimer le projet pour retirer toute l'infrastructure et toutes les ressources associées
—
Dernière mise à jour: 22/03/2023