Guide de démarrage rapide : Créer et déployer une application Web C++ sur Cloud Run

Découvrez comment utiliser une seule commande pour compiler et déployer une application Web "Hello World" à partir d'un exemple de code vers Google Cloudà l'aide de Cloud Run.

En suivant les étapes de ce guide de démarrage rapide, Cloud Run crée automatiquement un fichier Dockerfile pour vous lorsque vous déployez à partir du code source.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Install the Google Cloud CLI.

  5. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  6. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  9. Install the Google Cloud CLI.

  10. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  11. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  12. Pour définir le projet par défaut pour votre service Cloud Run :
     gcloud config set project PROJECT_ID
    Remplacez PROJECT_ID par l'ID de votre projet Google Cloud .
  13. Si vous êtes soumis à une règle d'administration de restriction de domaine limitant les appels non authentifiés pour votre projet, vous devez accéder au service déployé comme décrit dans la section Tester les services privés.

  14. Activez l'API Cloud Run Admin et l'API Cloud Build :

    gcloud services enable run.googleapis.com \
        cloudbuild.googleapis.com

    Une fois l'API Cloud Run Admin activée, le compte de service Compute Engine par défaut est créé automatiquement.

  15. Attribuez le rôle IAM suivant au compte de service Cloud Build.

    Cliquez ici pour afficher les rôles requis pour le compte de service Cloud Build

    Cloud Build utilise automatiquement le compte de service Compute Engine par défaut comme compte de service Cloud Build par défaut pour compiler votre code source et votre ressource Cloud Run, sauf si vous modifiez ce comportement. Pour que Cloud Build puisse créer vos sources, demandez à votre administrateur d'accorder le rôle Créateur Cloud Run (roles/run.builder) au compte de service Compute Engine par défaut sur votre projet :

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
          --role=roles/run.builder
      

    Remplacez PROJECT_NUMBER par le numéro de votre projet Google Cloudet PROJECT_ID par l'ID de votre projet Google Cloud. Pour obtenir des instructions détaillées sur la recherche de votre ID et de votre numéro de projet, consultez la section Créer et gérer des projets.

    L'attribution du rôle "Compilateur Cloud Run" au compte de service Compute Engine par défaut prend quelques minutes à se propager.

  16. Consultez les tarifs de Cloud Run ou estimez les coûts à l'aide du simulateur de coût.
  17. Coder l'exemple d'application

    Pour écrire une application en C++, procédez comme suit :

    1. Créez un répertoire nommé helloworld-cpp et modifiez les sous-répertoires comme suit :

      mkdir helloworld-cpp
      cd helloworld-cpp
      
    2. Créez un fichier nommé CMakeLists.txt et collez-y le code suivant :

      cmake_minimum_required(VERSION 3.20)
      
      # Define the project name and where to report bugs.
      set(PACKAGE_BUGREPORT
          "https://github.com/GoogleCloudPlatform/cpp-samples/issues")
      project(cpp-samples-cloud-run-hello-world CXX)
      
      find_package(functions_framework_cpp REQUIRED)
      find_package(Threads)
      
      add_executable(cloud_run_hello cloud_run_hello.cc)
      target_compile_features(cloud_run_hello PRIVATE cxx_std_17)
      target_link_libraries(cloud_run_hello functions-framework-cpp::framework)
      
      include(GNUInstallDirs)
      install(TARGETS cloud_run_hello RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    3. Créez un fichier nommé vcpkg.json et collez-y le code suivant :

      {
        "name": "cpp-samples-cloud-run-hello-world",
        "version-string": "unversioned",
        "homepage": "https://github.com/GoogleCloudPlatform/cpp-samples/",
        "description": [
          "Shows how to deploy a C++ application to Cloud Run."
        ],
        "dependencies": [
          "functions-framework-cpp"
        ]
      }
      
    4. Créez un fichier nommé cloud_run_hello.cc et collez-y le code suivant :

      #include <google/cloud/functions/framework.h>
      #include <cstdlib>
      
      namespace gcf = ::google::cloud::functions;
      
      auto hello_world_http() {
        return gcf::MakeFunction([](gcf::HttpRequest const& /*request*/) {
          std::string greeting = "Hello ";
          auto const* target = std::getenv("TARGET");
          greeting += target == nullptr ? "World" : target;
          greeting += "\n";
      
          return gcf::HttpResponse{}
              .set_header("Content-Type", "text/plain")
              .set_payload(greeting);
        });
      }
      
      int main(int argc, char* argv[]) {
        return gcf::Run(argc, argv, hello_world_http());
      }
      

      Ce code crée un serveur Web de base qui écoute le port défini par la variable d'environnement PORT.

    5. Créez un fichier nommé Dockerfile dans le même répertoire que les fichiers sources. Le fichier Dockerfile C++ démarre l'application en écoute sur le port défini par la variable d'environnement PORT :

      # We chose Alpine to build the image because it has good support for creating
      # statically-linked, small programs.
      FROM alpine:3.21 AS build
      
      # Install the typical development tools for C++, and
      # the base OS headers and libraries.
      RUN apk update && \
          apk add \
              build-base \
              cmake \
              curl \
              git \
              gcc \
              g++ \
              libc-dev \
              linux-headers \
              ninja \
              pkgconfig \
              tar \
              unzip \
              zip
      
      # Use `vcpkg`, a package manager for C++, to install
      WORKDIR /usr/local/vcpkg
      ENV VCPKG_FORCE_SYSTEM_BINARIES=1
      RUN curl -sSL "https://github.com/Microsoft/vcpkg/archive/2024.04.26.tar.gz" | \
          tar --strip-components=1 -zxf - \
          && ./bootstrap-vcpkg.sh -disableMetrics
      
      # Copy the source code to /v/source and compile it.
      COPY . /v/source
      WORKDIR /v/source
      
      # Run the CMake configuration step, setting the options to create
      # a statically linked C++ program
      RUN cmake -S/v/source -B/v/binary -GNinja \
          -DCMAKE_TOOLCHAIN_FILE=/usr/local/vcpkg/scripts/buildsystems/vcpkg.cmake \
          -DCMAKE_BUILD_TYPE=Release
      
      # Compile the binary and strip it to reduce its size.
      RUN cmake --build /v/binary
      RUN strip /v/binary/cloud_run_hello
      
      # Create the final deployment image, using `scratch` (the empty Docker image)
      # as the starting point. Effectively we create an image that only contains
      # our program.
      FROM scratch AS cloud-run-hello
      WORKDIR /r
      
      # Copy the program from the previously created stage and the shared libraries it
      # depends on.
      COPY --from=build /v/binary/cloud_run_hello /r
      COPY --from=build /lib/ld-musl-x86_64.so.1 /lib/ld-musl-x86_64.so.1
      COPY --from=build /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6
      COPY --from=build /usr/lib/libgcc_s.so.1 /usr/lib/libgcc_s.so.1
      
      # Make the program the entry point.
      ENTRYPOINT [ "/r/cloud_run_hello" ]

    Votre application est terminée et prête à être déployée.

    Déployer une image sur Cloud Run depuis une source

    Important : Dans ce guide de démarrage rapide, nous partons du principe que vous disposez de rôles de propriétaire ou d'éditeur dans le projet que vous utilisez pour les besoins du guide de démarrage rapide. Sinon, reportez-vous au rôle Développeur source Cloud Run afin de connaître les autorisations requises pour déployer une ressource Cloud Run depuis la source.

    Utilisez Cloud Build pour créer une image à partir du code source, puis déployez-la.

    1. Dans le répertoire source, utilisez Cloud Build afin de créer une image Docker pour votre service.

      gcloud builds submit --machine-type=e2_highcpu_32 --tag gcr.io/PROJECT_ID/cloud-run-hello-world
    2. Déployez l'image à l'aide de la commande suivante :

      gcloud run deploy --image=gcr.io/PROJECT_ID/cloud-run-hello-world

      Si vous êtes invité à activer l'API, répondez y pour l'activer.

      1. Lorsque vous êtes invité à saisir le nom du service, appuyez sur Entrée pour accepter le nom par défaut, par exemple helloworld.

      2. Si vous êtes invité à activer des API supplémentaires sur le projet, par exemple l'API Artifact Registry, répondez en appuyant sur y.

      3. Lorsque vous êtes invité à indiquer la région, sélectionnez la région de votre choix, par exemple europe-west1.

      4. Si vous êtes invité à créer un dépôt dans la région spécifiée, répondez en appuyant sur y.

      5. Si vous êtes invité à autoriser l'accès public, répondez y. Cette invite peut ne pas s'afficher si une règle d'administration de restriction de domaine l'empêche. Pour plus d'informations, consultez la section Avant de commencer.

      Patientez quelques instants jusqu'à la fin du déploiement. En cas de réussite, la ligne de commande affiche l'URL du service.

    3. Accédez à votre service déployé en ouvrant l'URL du service dans un navigateur Web.

    Emplacements Cloud Run

    Cloud Run est régional, ce qui signifie que l'infrastructure qui exécute vos services Cloud Run est située dans une région spécifique et gérée par Google pour être disponible de manière redondante dans toutes les zones de cette région.

    Lors de la sélection de la région dans laquelle exécuter vos services Cloud Run, vous devez tout d'abord considérer vos exigences en matière de latence, de disponibilité et de durabilité. Vous pouvez généralement sélectionner la région la plus proche de vos utilisateurs, mais vous devez tenir compte de l'emplacement des autres Google Cloudproduits utilisés par votre service Cloud Run. L'utilisation conjointe de produits Google Cloud dans plusieurs emplacements peut avoir une incidence sur la latence et le coût de votre service.

    Cloud Run est disponible dans les régions suivantes :

    Soumis aux tarifs de niveau 1

    Soumis aux tarifs de niveau 2

    Si vous avez déjà créé un service Cloud Run, vous pouvez afficher la région dans le tableau de bord Cloud Run de la consoleGoogle Cloud .

    Effectuer un nettoyage

    Pour éviter que des frais supplémentaires ne soient facturés sur votre compte Google Cloud , supprimez toutes les ressources que vous avez déployées avec ce guide de démarrage rapide.

    Supprimer votre dépôt

    Cloud Run ne vous facture pas lorsque votre service déployé n'est pas utilisé. Toutefois, il se peut que des frais vous soient facturés pour le stockage de l'image de conteneur dans Artifact Registry. Pour supprimer des dépôts Artifact Registry, suivez les étapes décrites dans Supprimer des dépôts de la documentation Artifact Registry.

    Supprimer votre service

    Les services Cloud Run n'entraînent pas de coûts tant qu'ils ne reçoivent pas de requêtes. Pour supprimer votre service Cloud Run, procédez comme suit :

    Console

    Pour supprimer un service, procédez comme suit :

    1. Dans la console Google Cloud , accédez à Cloud Run :

      Accédez à Cloud Run

    2. Recherchez le service que vous souhaitez supprimer dans la liste des services, puis cliquez la case correspondante pour le sélectionner.

    3. Cliquez sur Supprimer pour supprimer toutes les révisions du service.

    gcloud

    Pour supprimer un service, exécutez la commande suivante :

    gcloud run services delete SERVICE --region REGION

    Remplacez les éléments suivants :

    • SERVICE : nom de votre service.
    • REGION : Google Cloud région du service.

    Supprimer votre projet de test

    La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources de ce projet. Pour libérer toutes les ressources Google Cloud de votre projet, procédez comme suit :

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Étapes suivantes

    Pour savoir comment créer un conteneur à partir d'une source de code et le transférer vers un dépôt, consultez la section suivante :