Premiers pas avec Java sur Compute Engine

Ce tutoriel explique comment débuter avec Compute Engine. Suivez-le pour déployer une application Web Java Hello World dans Compute Engine. Si vous avez besoin d'aide pour vous familiariser avec App Engine, consultez la page sur l'environnement standard App Engine.

Objectifs

  • Télécharger et déployer un exemple d'application Hello World en utilisant Cloud Shell
  • Déployer un exemple d'application Hello World sur une instance Compute Engine unique

Coûts

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

Obtenez une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.

Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai sans frais.

Avant de commencer

  1. Connectez-vous à votre Google Cloud compte. 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 sans frais pour exécuter, tester et déployer des charges de travail.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Dans la Google Cloud console, ouvrez l'application dans Cloud Shell.

    Accéder à Cloud Shell

    Cloud Shell vous permet d'accéder en ligne de commande à vos ressources cloud, directement depuis votre navigateur.

  9. Si vous acceptez de cloner le dépôt, cliquez sur Confirmer pour télécharger l'exemple de code et accéder au répertoire de l'application.

  10. Dans Cloud Shell, configurez gcloud CLI pour qu'il utilise votre nouveau Google Cloud projet :
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID

Exécuter l'application dans Cloud Shell

  1. Dans Cloud Shell, démarrez un serveur Web local :

    mvn -Plocal clean jetty:run-exploded -DprojectID=YOUR-PROJECT-ID
    
  2. Dans Cloud Shell, cliquez sur Aperçu sur le Web , puis sélectionnez Prévisualiser sur le port 8080. Une nouvelle fenêtre s'affiche avec votre application en cours d'exécution.

    Dans votre navigateur Web, vous voyez du texte Hello World, diffusé depuis votre ordinateur local.

  3. Lorsque vous êtes prêt à continuer, arrêtez le serveur Web local en appuyant sur Ctrl + C dans Cloud Shell.

Déployer l'application sur une instance unique

Cette section décrit la procédure d'exécution d'une instance unique de votre application sur Compute Engine.

Déploiement d'une instance unique

Depuis Cloud Shell, vous pouvez déployer une machine virtuelle (VM) d'instance unique Compute Engine, qui exécute votre application.

Utiliser un script de démarrage pour initialiser une instance

Vous avez besoin d'un outil qui indique à votre instance de télécharger et d'exécuter votre code. Une instance peut disposer d'un script de démarrage qui s'exécute à chaque démarrage ou redémarrage de l'instance.

Un script de démarrage s'exécute lorsqu'une instance démarre.

set -e
set -v

# Talk to the metadata server to get the project id
PROJECTID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")

echo "Project ID: ${PROJECTID}"

# Install dependencies from apt
apt-get install -yq openjdk-11-jdk git maven

mvn --version

# Jetty Setup
mkdir -p /opt/jetty/temp
mkdir -p /var/log/jetty

# Get Jetty
curl -L https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.13.v20181111/jetty-distribution-9.4.13.v20181111.tar.gz -o jetty9.tgz
tar xf jetty9.tgz  --strip-components=1 -C /opt/jetty

# Add a Jetty User
useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty

cd /opt/jetty
# Add running as "jetty"
java -jar /opt/jetty/start.jar --add-to-startd=setuid
cd /

# Clone the source repository.
git clone https://github.com/GoogleCloudPlatform/getting-started-java
cd getting-started-java/gce

# Build the .war file and rename.
# very important - by renaming the war to root.war, it will run as the root servlet.
mvn clean package -q
mv target/getting-started-gce-1.0-SNAPSHOT.war /opt/jetty/webapps/root.war

# Make sure "jetty" owns everything.
chown --recursive jetty /opt/jetty

# Configure the default paths for the Jetty service
cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty
echo "JETTY_HOME=/opt/jetty" > /etc/default/jetty
{
  echo "JETTY_BASE=/opt/jetty"
  echo "TMPDIR=/opt/jetty/temp"
  echo "JAVA_OPTIONS=-Djetty.http.port=80"
  echo "JETTY_LOGS=/var/log/jetty"
} >> /etc/default/jetty

# Reload daemon to pick up new service
systemctl daemon-reload

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
sudo bash add-logging-agent-repo.sh --also-install

service google-fluentd restart &

service jetty start
service jetty check

echo "Startup Complete"

Le script de démarrage effectue les tâches suivantes :

  • Il installe Java 11 et en fait la version par défaut.

  • installe et configure Jetty ;

  • Il copie le fichier Java WAR du bucket Cloud Storage vers les webapps de Jetty et le renomme root.war. (cela en fait le servlet racine, et il n'a donc pas besoin d'être nommé dans l'URL).

  • Il installe l'agent Cloud Logging et le configure pour surveiller les journaux de l'application. (cela signifie que les journaux configurés aux étapes précédentes de ce tutoriel sont importés comme si vous utilisiez l'environnement flexible App Engine).

Créer et configurer une instance Compute Engine

  1. Créez une instance Compute Engine :

    gcloud compute instances create my-app-instance 
    --image-family=debian-10
    --image-project=debian-cloud
    --machine-type=g1-small
    --scopes userinfo-email,cloud-platform
    --metadata-from-file startup-script=gce/startup-script.sh
    --zone YOUR_ZONE
    --tags http-server
    Remplacez YOUR_ZONE par une zone de développement, par exemple us-central1-a. Pour en savoir plus sur les régions et les zones, consultez la page Zones géographiques et régions.

    Cette commande crée une instance, l'autorise à accéder aux Google Cloud services et exécute votre script de démarrage. Le nom de l'instance est my-app-instance.

  2. Vérifiez l'avancement de la création de l'instance :

    gcloud compute instances get-serial-port-output my-app-instance --zone YOUR_ZONE
    

    Une fois l'exécution du script de démarrage terminée, le message suivant s'affiche :

    startup-script: INFO Finished running startup scripts.
    
  3. Créez une règle de pare-feu pour autoriser le trafic vers votre instance :

    gcloud compute firewall-rules create default-allow-http-80 \
        --allow tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 80 access to http-server"
    

  4. Obtenez l'adresse IP externe de votre instance :

    gcloud compute instances list
    
  5. Pour voir votre application en cours d'exécution, saisissez cette URL dans votre navigateur :

    http://YOUR_INSTANCE_IP
    

    Remplacez YOUR_INSTANCE_IP par l'adresse IP externe de votre instance.

Gérer et surveiller une instance

Vous pouvez surveiller et gérer votre instance à l'aide de la Google Cloud console.

  1. Dans la Google Cloud console, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Dans la liste des instances de machine virtuelle, cliquez sur SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.
  3. Pour afficher tous les journaux générés par vos ressources Compute Engine, accédez à la page Explorateur de journaux.

    Accéder à l'explorateur de journaux

    Cloud Logging est automatiquement configuré pour collecter les journaux issus de divers services courants, comme syslog.

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.

Supprimer le projet

  1. Dans la Google Cloud console, accédez à la page Gérer les ressources.

    Accéder à la page "Gérer les ressources"

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez Arrêter pour supprimer le projet.

Supprimer les ressources individuelles

gcloud compute instances delete my-app-instance --zone=YOUR_ZONE --delete-disks=all
gcloud compute firewall-rules delete default-allow-http-80

Étape suivante