使用 Java 创建和部署 HTTP Cloud Functions 函数
本指南将引导您完成用 Java 运行时编写 Cloud Functions 函数的过程。Cloud Functions 函数有两种类型:
- HTTP 函数,通过标准 HTTP 请求调用。
- 事件驱动函数,用于处理来自云基础架构的事件,例如 Cloud Pub/Sub 主题中收到消息或 Cloud Storage 存储分区发生更改。
本文档介绍了如何创建简单的 HTTP 函数并使用 Maven 或 Gradle 来构建它。
指南结构
使用 Google Cloud SDK 创建 GCP 项目
- 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Cloud Functions and Cloud Build API。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Cloud Functions and Cloud Build API。
- 安装并初始化 Google Cloud SDK。
- 更新并安装
gcloud
组件:gcloud components update
- 准备开发环境。
创建函数
本部分介绍如何创建函数。
Maven
在本地系统上为函数代码创建一个目录:
Linux 或 Mac OS X:
mkdir ~/helloworld cd ~/helloworld
Windows:
mkdir %HOMEPATH%\helloworld cd %HOMEPATH%\helloworld
创建项目结构以包含源目录和源文件。
mkdir -p src/main/java/functions touch src/main/java/functions/HelloWorld.java
将以下内容添加到
HelloWorld.java
文件中:此示例函数会输出问候语“Hello World!”
Gradle
在本地系统上为函数代码创建一个目录:
Linux 或 Mac OS X:
mkdir ~/helloworld-gradle cd ~/helloworld-gradle
Windows:
mkdir %HOMEPATH%\helloworld-gradle cd %HOMEPATH%\helloworld-gradle
创建项目结构以包含源目录和源文件。
mkdir -p src/main/java/functions touch src/main/java/functions/HelloWorld.java
将以下内容添加到
HelloWorld.java
文件中:此示例函数会输出问候语“Hello World!”
指定依赖项
下一步是设置依赖项:
Maven
将目录切换到您之前创建的 helloworld
目录,然后创建 pom.xml
文件:
cd ~/helloworld
touch pom.xml
如需使用 Maven 管理依赖项,请在项目的 pom.xml 文件内的 <dependencies>
部分中指定依赖项。对于此练习,请将以下内容复制到 pom.xml
文件中。
如需查看基于 Maven 的完整示例,请参阅 helloworld。
Gradle
将目录切换到您之前创建的 helloworld-gradle
目录,然后创建 build.gradle
文件:
cd ~/helloworld-gradle
touch build.gradle
如需使用 Gradle 管理依赖项,请在项目的 build.gradle 文件中指定依赖项。对于此练习,请将以下内容复制到 build.gradle
文件中。请注意,此 build.gradle
文件包含一项自定义任务,可以帮助您在本地运行函数。
如需查看基于 Gradle 的完整示例,请参阅 helloworld-gradle。
在本地构建和测试
在部署函数之前,您可以在本地构建和测试该函数:
Maven
运行以下命令以确认函数已构建:
mvn compile
您还可以选择使用 mvn package
命令来编译 Java 代码、运行任何测试以及将代码打包到目标目录内的 JAR 文件中。您可以点击此处详细了解 Maven 构建生命周期。
如需测试函数,请运行以下命令:
mvn function:run
Gradle
运行以下命令以确认函数已构建:
gradle build
如需测试函数,请运行以下命令:
gradle runFunction -Prun.functionTarget=functions.HelloWorld
如果测试成功完成,它会显示一个网址,您可以在网络浏览器中访问该网址,以查看实际应用中的函数:http://localhost:8080/
。您应该会看到 Hello World!
消息。
或者,您也可以从另一个终端窗口使用 curl
向此函数发送请求:
curl localhost:8080
# Output: Hello World!
部署函数
Maven
如需使用 HTTP 触发器部署该函数,请在 helloworld
目录中运行以下命令:
gcloud functions deploy my-first-function --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated
其中,my-first-function
是在控制台中用来标识函数的注册名称,而 --entry-point
用于指定函数的完全限定类名称 (FQN)。
Gradle
如需使用 HTTP 触发器部署该函数,请在 helloworld-gradle
目录中运行以下命令:
gcloud functions deploy my-first-function --entry-point functions.HelloWorld --runtime java17 --trigger-http --memory 512MB --allow-unauthenticated
其中,my-first-function
是在控制台中用来标识函数的注册名称,而 --entry-point
用于指定函数的完全限定类名称 (FQN)。
测试已部署的函数
当函数完成部署时,请记下
httpsTrigger.url
属性,或使用以下命令查找该属性:gcloud functions describe my-first-function
该属性应如下所示:
https://GCP_REGION-PROJECT_ID.cloudfunctions.net/my-first-function
在浏览器中访问此网址。您应该会看到
Hello World!
消息。
查看日志
使用命令行工具
您可以在 Cloud Logging 界面中查看 Cloud Functions 的日志,也可以通过 Google Cloud CLI 查看。
如需使用 gcloud CLI 查看函数的日志,请使用 logs read
命令,后跟函数名称:
gcloud functions logs read my-first-function
输出应类似于以下内容:
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 ...
使用日志记录信息中心
您还可以通过控制台查看 Cloud Functions 函数的日志。