Crie e implemente uma função HTTP do Cloud Run com Java (1.ª geração)
Este guia explica o processo de escrita de uma função do Cloud Run usando o tempo de execução do Java. Existem dois tipos de funções do Cloud Run:
- Uma função HTTP, que invoca a partir de pedidos HTTP padrão.
- Uma função orientada por eventos, que usa para processar eventos da sua infraestrutura do Google Cloud, como mensagens num tópico Pub/Sub ou alterações num contentor do Cloud Storage.
O documento mostra como criar uma função HTTP simples e criá-la através do Maven ou do Gradle.
Antes de começar
- 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.
-
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions and Cloud Build APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions and Cloud Build APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Instale e inicialize o SDK do Google Cloud.
- Atualize e instale os componentes do
gcloud
:gcloud components update
- Prepare o seu ambiente de desenvolvimento.
Crie um diretório no seu sistema local para o código da função:
Linux ou Mac OS X:
mkdir ~/helloworld cd ~/helloworld
Windows:
mkdir %HOMEPATH%\helloworld cd %HOMEPATH%\helloworld
Crie a estrutura do projeto para conter o diretório de origem e o ficheiro de origem.
mkdir -p src/main/java/functions touch src/main/java/functions/HelloWorld.java
Adicione os seguintes conteúdos ao ficheiro
HelloWorld.java
:Esta função de exemplo produz a saudação "Olá mundo!"
Crie um diretório no seu sistema local para o código da função:
Linux ou Mac OS X:
mkdir ~/helloworld-gradle cd ~/helloworld-gradle
Windows:
mkdir %HOMEPATH%\helloworld-gradle cd %HOMEPATH%\helloworld-gradle
Crie a estrutura do projeto para conter o diretório de origem e o ficheiro de origem.
mkdir -p src/main/java/functions touch src/main/java/functions/HelloWorld.java
Adicione os seguintes conteúdos ao ficheiro
HelloWorld.java
:Esta função de exemplo produz a saudação "Olá mundo!"
Quando a implementação da função terminar, tome nota da propriedade
httpsTrigger.url
ou encontre-a através do seguinte comando: Deve ter este aspeto:gcloud functions describe my-first-function
https://GCP_REGION-PROJECT_ID.cloudfunctions.net/my-first-function
Visite este URL no seu navegador. Deverá ver uma mensagem
Hello World!
.
Crie uma função
Esta secção descreve como criar uma função.
Maven
Gradle
Especifique dependências
O passo seguinte é configurar as dependências:
Maven
Mude o diretório para o diretório helloworld
que criou acima e crie um ficheiro pom.xml
:
cd ~/helloworld
touch pom.xml
Para gerir dependências através do Maven, especifique as dependências na secção <dependencies>
no ficheiro pom.xml do seu projeto. Para este exercício, copie o seguinte conteúdo
para o ficheiro pom.xml
.
Consulte helloworld para ver um exemplo completo baseado no Maven.
Gradle
Mude o diretório para o diretório helloworld-gradle
que criou acima e
crie um ficheiro build.gradle
:
cd ~/helloworld-gradle
touch build.gradle
Para gerir as dependências através do Gradle, especifique-as no ficheiro build.gradle do seu projeto. Para este exercício, copie o seguinte conteúdo
para o ficheiro build.gradle
. Tenha em atenção que este ficheiro build.gradle
inclui uma tarefa personalizada para ajudar a executar funções localmente.
Consulte helloworld-gradle para ver um exemplo completo baseado no Gradle.
Crie e teste localmente
Antes de implementar a função, pode criá-la e testá-la localmente:
Maven
Execute o seguinte comando para confirmar que a função é criada:
mvn compile
Outra opção é usar o comando mvn package
para compilar o código Java, executar quaisquer testes e agrupar o código num ficheiro JAR no diretório de destino. Pode saber mais sobre o ciclo de vida de compilação do Maven aqui.
Para testar a função, execute o seguinte comando:
mvn function:run
Gradle
Execute o seguinte comando para confirmar que a função é criada:
gradle build
Para testar a função, execute o seguinte comando:
gradle runFunction -Prun.functionTarget=functions.HelloWorld
Se o teste for concluído com êxito, é apresentado o URL que pode visitar no seu navegador de Internet para ver a função em ação:
http://localhost:8080/
. Deverá ver uma mensagem Hello World!
.
Em alternativa, pode enviar pedidos para esta função através de curl
a partir de outra janela de terminal:
curl localhost:8080
# Output: Hello World!
Implemente a função
Maven
Para implementar a função com um acionador HTTP, execute o seguinte comando no diretório helloworld
:
gcloud functions deploy my-first-function --no-gen2 --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated
my-first-function
é o nome registado pelo qual a sua função
vai ser identificada na Google Cloud consola e --entry-point
especifica
o nome da classe totalmente qualificado (FQN) da sua função.Gradle
Para implementar a função com um acionador HTTP, execute o seguinte comando no diretório helloworld-gradle
:
gcloud functions deploy my-first-function --no-gen2 --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated
my-first-function
é o nome registado pelo qual a sua função
vai ser identificada na Google Cloud consola e --entry-point
especifica
o nome da classe totalmente qualificado (FQN) da sua função.Teste a função implementada
Ver registos
Os registos das funções do Cloud Run são visíveis através da CLI gcloud e na IU do Cloud Logging.
Use a ferramenta de linha de comandos
Para ver os registos da sua função com a CLI gcloud, use o comando
logs read
, seguido do nome da função:
gcloud functions logs read my-first-function
O resultado deve ser semelhante ao seguinte:
LEVEL NAME EXECUTION_ID TIME_UTC LOG D my-first-function k2bqgroszo4u 2020-07-24 18:18:01.791 Function execution started D my-first-function k2bqgroszo4u 2020-07-24 18:18:01.958 Function execution took 168 ms, finished with status code: 200 ...
Use o painel de controlo de registo
Também pode ver os registos das funções do Cloud Run a partir da Google Cloud consola.