Início rápido: crie e implemente uma app Web C++ no Cloud Run

Saiba como usar um único comando para criar e implementar uma aplicação Web "Hello World" a partir de um exemplo de código para Google Cloud usar o Cloud Run.

Seguindo os passos neste início rápido, o Cloud Run cria automaticamente um Dockerfile para si quando implementa a partir do código-fonte.

Antes de começar

  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. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Create or select 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.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Se estiver a usar um projeto existente para este guia, verifique se tem as autorizações necessárias para concluir este guia. Se criou um novo projeto, já tem as autorizações necessárias.

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

  8. Install the Google Cloud CLI.

  9. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  10. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  11. Create or select 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.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Se estiver a usar um projeto existente para este guia, verifique se tem as autorizações necessárias para concluir este guia. Se criou um novo projeto, já tem as autorizações necessárias.

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

  14. Para definir o projeto predefinido para o seu serviço do Cloud Run:
     gcloud config set project PROJECT_ID
    Substitua PROJECT_ID pelo seu Google Cloud ID do projeto.
  15. Se estiver ao abrigo de uma política da organização de restrição de domínio que restringe as invocações não autenticadas para o seu projeto, tem de aceder ao serviço implementado conforme descrito em Testar serviços privados.

  16. Reveja os preços do Cloud Run ou estime os custos com a calculadora de preços.
  17. Funções necessárias

    Para obter as autorizações de que precisa para concluir este início rápido, peça ao seu administrador que lhe conceda as seguintes funções de IAM:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

    Conceda à conta de serviço do Cloud Build acesso ao seu projeto

    O Cloud Build usa automaticamente a conta de serviço predefinida do Compute Engine como a conta de serviço predefinida do Cloud Build para compilar o seu código-fonte e recurso do Cloud Run, a menos que substitua este comportamento.

    Para que o Cloud Build compile as suas origens, conceda à conta de serviço do Cloud Build a função Cloud Run Builder (roles/run.builder) no seu projeto:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS \
        --role=roles/run.builder

    Substitua PROJECT_ID pelo ID do seu projeto e Google Cloudpelo endereço de email da conta de serviço do Cloud Build.SERVICE_ACCOUNT_EMAIL_ADDRESS Se estiver a usar a conta de serviço predefinida do Compute Engine como conta de serviço do Cloud Build, use o seguinte formato para o endereço de email da conta de serviço:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Substitua PROJECT_NUMBER pelo seu Google Cloud número do projeto.

    Para ver instruções detalhadas sobre como encontrar o ID e o número do projeto, consulte o artigo Criar e gerir projetos.

    A atribuição da função de criador do Cloud Run demora alguns minutos a propagar-se.

    Escreva a aplicação de amostra

    Para escrever uma aplicação em C++:

    1. Crie um novo diretório com o nome helloworld-cpp e altere o diretório para:

      mkdir helloworld-cpp
      cd helloworld-cpp
      
    2. Crie um novo ficheiro denominado CMakeLists.txt e cole o seguinte código:

      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. Crie um novo ficheiro denominado vcpkg.json e cole o seguinte código:

      {
        "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. Crie um novo ficheiro com o nome cloud_run_hello.cc e cole o seguinte código no mesmo:

      #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());
      }
      

      Este código cria um servidor Web básico que escuta na porta definida pela variável de ambiente PORT.

    5. Crie um novo ficheiro denominado Dockerfile no mesmo diretório que os ficheiros de origem. O Dockerfile C++ inicia a aplicação a ouvir na porta definida pela variável de ambiente 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" ]

    A sua app está concluída e pronta para ser implementada.

    Implemente no Cloud Run a partir da origem

    Use o Cloud Build para criar uma imagem a partir do código-fonte e, em seguida, implementá-la.

    1. No diretório de origem, use o Cloud Build para criar uma imagem do Docker para o seu serviço

      gcloud builds submit --machine-type=e2_highcpu_32 --tag gcr.io/PROJECT_ID/cloud-run-hello-world
    2. Implemente a imagem com o seguinte comando:

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

      Se lhe for pedido que ative a API, responda y para a ativar.

      1. Quando lhe for pedido o nome do serviço, prima Enter para aceitar o nome predefinido, por exemplo, helloworld.

      2. Se lhe for pedido que ative APIs adicionais no projeto, por exemplo, a API Artifact Registry, responda premindo y.

      3. Quando lhe for pedido para indicar a região: selecione a região da sua escolha, por exemplo, europe-west1.

      4. Se lhe for pedido que crie um repositório na região especificada, responda premindo y.

      5. Se lhe for pedido que permita o acesso público: responda y. Pode não ver este pedido se existir uma política organizacional de restrição de domínio que o impeça. Para mais detalhes, consulte a secção Antes de começar.

      Em seguida, aguarde alguns momentos até que a implementação esteja concluída. Em caso de êxito, a linha de comandos apresenta o URL do serviço.

    3. Visite o serviço implementado abrindo o URL do serviço num navegador de Internet.

    Localizações do Cloud Run

    O Cloud Run é regional, o que significa que a infraestrutura que executa os seus serviços do Cloud Run está localizada numa região específica e é gerida pela Google para estar disponível de forma redundante em todas as zonas dessa região.

    O cumprimento dos seus requisitos de latência, disponibilidade ou durabilidade são fatores principais para selecionar a região onde os seus serviços do Cloud Run são executados. Geralmente, pode selecionar a região mais próxima dos seus utilizadores, mas deve considerar a localização dos outros Google Cloudprodutos usados pelo seu serviço do Cloud Run. A utilização Google Cloud de produtos em conjunto em várias localizações pode afetar a latência do seu serviço, bem como o custo.

    O Cloud Run está disponível nas seguintes regiões:

    Sujeito aos preços de Nível 1

    • asia-east1 (Taiwan)
    • asia-northeast1 (Tóquio)
    • asia-northeast2 (Osaca)
    • asia-south1 (Mumbai, Índia)
    • europe-north1 (Finlândia) ícone de folha Baixo CO2
    • europe-north2 (Estocolmo) ícone de folha Baixo CO2
    • europe-southwest1 (Madrid) ícone de folha Baixo CO2
    • europe-west1 (Bélgica) ícone de folha Baixo CO2
    • europe-west4 (Países Baixos) ícone de folha Baixo CO2
    • europe-west8 (Milão)
    • europe-west9 (Paris) ícone de folha Baixo CO2
    • me-west1 (Telavive)
    • northamerica-south1 (México)
    • us-central1 (Iowa) ícone de folha Baixo CO2
    • us-east1 (Carolina do Sul)
    • us-east4 (Virgínia do Norte)
    • us-east5 (Columbus)
    • us-south1 (Dallas) ícone de folha Baixo CO2
    • us-west1 (Oregão) ícone de folha Baixo CO2

    Sujeito aos preços de Nível 2

    • africa-south1 (Joanesburgo)
    • asia-east2 (Hong Kong)
    • asia-northeast3 (Seul, Coreia do Sul)
    • asia-southeast1 (Singapura)
    • asia-southeast2 (Jacarta)
    • asia-south2 (Deli, Índia)
    • australia-southeast1 (Sydney)
    • australia-southeast2 (Melbourne)
    • europe-central2 (Varsóvia, Polónia)
    • europe-west10 (Berlim)
    • europe-west12 (Turim)
    • europe-west2 (Londres, Reino Unido) ícone de folha Baixo CO2
    • europe-west3 (Frankfurt, Alemanha)
    • europe-west6 (Zurique, Suíça) ícone de folha Baixo CO2
    • me-central1 (Doha)
    • me-central2 (Dammam)
    • northamerica-northeast1 (Montreal) ícone de folha Baixo CO2
    • northamerica-northeast2 (Toronto) ícone de folha Baixo CO2
    • southamerica-east1 (São Paulo, Brasil) ícone de folha Baixo CO2
    • southamerica-west1 (Santiago, Chile) ícone de folha Baixo CO2
    • us-west2 (Los Angeles)
    • us-west3 (Salt Lake City)
    • us-west4 (Las Vegas)

    Se já criou um serviço do Cloud Run, pode ver a região no painel de controlo do Cloud Run na Google Cloud consola.

    Limpar

    Para evitar custos adicionais na sua conta Google Cloud , elimine todos os recursos implementados com este início rápido.

    Elimine o seu repositório

    O Cloud Run não lhe cobra nada quando o serviço implementado não está a ser usado. No entanto, ainda pode ser cobrado pelo armazenamento da imagem do contentor no Artifact Registry. Para eliminar repositórios do Artifact Registry, siga os passos em Eliminar repositórios na documentação do Artifact Registry.

    Elimine o seu serviço

    Os serviços do Cloud Run não incorrem em custos até receberem pedidos. Para eliminar o seu serviço do Cloud Run, siga um destes passos:

    Consola

    Para eliminar um serviço:

    1. Na Google Cloud consola, aceda à página Serviços do Cloud Run:

      Aceda ao Cloud Run

    2. Localize o serviço que quer eliminar na lista de serviços e clique na caixa de verificação para o selecionar.

    3. Clique em Eliminar. Esta ação elimina todas as revisões do serviço.

    gcloud

    Para eliminar um serviço, execute o seguinte comando:

    gcloud run services delete SERVICE --region REGION

    Substitua o seguinte:

    • SERVICE: nome do seu serviço.
    • REGION: Google Cloud região do serviço.

    Elimine o projeto de teste

    A eliminação do seu projeto Google Cloud interrompe a faturação de todos os recursos nesse projeto. Para libertar todos os Google Cloud recursos no seu projeto, siga estes passos:

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    O que se segue?

    Para mais informações sobre a criação de um contentor a partir do código-fonte e o envio para um repositório, consulte: