GSP080

概述
Cloud Functions 函数是为了响应事件(如 HTTP 请求、来自消息传递服务的消息或文件上传)而运行的代码段。云端事件是指在云端环境中发生的事件,这些事件可能包括数据库中的数据更改、文件添加到存储系统或正在创建新的虚拟机实例等。
Cloud Functions 函数由事件驱动,因而在事件发生时才会运行。这类函数非常适合执行需要快速完成的任务或不需要一直运行的任务。
例如,您可以使用 Cloud Functions 函数来执行以下任务:
- 自动为上传到 Cloud Storage 的图片生成缩略图。
- 在 Cloud Pub/Sub 收到新消息时向用户的手机发送通知。
- 处理来自 Cloud Firestore 数据库的数据并生成报告。
您可以使用任何支持 Node.js 的语言来编写代码,然后只需简单点击几下即可将代码部署到云端。在完成部署后,Cloud Functions 函数在有事件发生时就会自动开始运行。
本实操实验将向您介绍如何使用 Google Cloud 控制台创建、部署和测试 Cloud Functions 函数。
本实操实验将向您介绍如何使用 Google Cloud Shell 命令行创建、部署和测试 Cloud Functions 函数。
您将执行的操作
- 创建一个 Cloud Functions 函数
- 部署和测试此 Cloud Functions 函数
- 查看日志
设置
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。我们会为您提供新的临时凭据,让您可以在实验规定的时间内用来登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:如果您已有自己的个人 Google Cloud 账号或项目,请不要在此实验中使用,以避免您的账号产生额外的费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:
-
打开 Google Cloud 控制台按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示登录页面。
提示:请将这些标签页安排在不同的窗口中,并将它们并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在实验详细信息面板中找到用户名。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在实验详细信息面板中找到密码。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本次实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于该账号为临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需查看列有 Google Cloud 产品和服务的菜单,请点击左上角的导航菜单。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
- 点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
如果您连接成功,即表示您已通过身份验证,且当前项目会被设为您的 PROJECT_ID 环境变量所指的项目。输出内容中有一行说明了此会话的 PROJECT_ID:
Your Cloud Platform project in this session is set to YOUR_PROJECT_ID
gcloud
是 Google Cloud 的命令行工具。它已预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
-
点击授权。
-
现在,输出的内容应如下所示:
输出:
ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = <project_ID>
输出示例:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Note: For full documentation of gcloud
, in Google Cloud, refer to the gcloud CLI overview guide.
任务 1. 创建一个函数
首先,您需要创建一个名为 helloWorld
的简单函数。当该函数被 Cloud Functions 函数事件触发时,会向 Cloud Functions 日志写入一条消息。该函数还接受回调函数,回调函数用于发出信号来指示函数已完成运行。
本实验中,Cloud Functions 函数事件为 Cloud Pub/Sub 主题事件。Pub/Sub 是一种消息传递服务,其中消息的发送者与接收者各自独立。当有消息发送或发布时,接收者需要拥有订阅才能收到提醒并接收消息。如需详细了解 Pub/Sub,请参阅 Cloud Pub/Sub 指南中的 Google Cloud Pub/Sub:Google 级规模的传递服务。
如需详细了解事件参数和回调参数,请参阅 Cloud Functions 文档中的后台函数。
为创建 Cloud Functions 函数,请执行以下操作:
-
在 Cloud Shell 中,运行以下命令以设置默认区域:
gcloud config set run/region {{{project_0.default_region |REGION}}}
-
为函数代码创建目录:
mkdir gcf_hello_world && cd $_
-
创建并打开 index.js
以进行修改:
nano index.js
-
将以下内容复制到 index.js
文件中:
const functions = require('@google-cloud/functions-framework');
// Register a CloudEvent callback with the Functions Framework that will
// be executed when the Pub/Sub trigger topic receives a message.
functions.cloudEvent('helloPubSub', cloudEvent => {
// The Pub/Sub message is passed as the CloudEvent's data payload.
const base64name = cloudEvent.data.message.data;
const name = base64name
? Buffer.from(base64name, 'base64').toString()
: 'World';
console.log(`Hello, ${name}!`);
});
-
退出 nano (Ctrl+x) 并保存 (Y) 文件。
-
创建并打开 package.json
文件以进行修改:
-
将以下内容复制到 package.json
文件中:
{
"name": "gcf_hello_world",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
-
退出 nano (Ctrl+x) 并保存 (Y) 文件。
-
安装软件包依赖项
npm install
预期输出:
added 140 packages, and audited 141 packages in 9s
27 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
任务 2. 部署函数
在本实验中,您需要将 --trigger-topic
设置为 cf_demo
。
注意:
Cloud Functions 函数是由事件驱动的,这意味着必须指定触发器类型。部署新函数时,“--trigger-topic”“--trigger-bucket”或“--trigger-http”是常见的触发器事件。部署对现有函数的更新时,除非另行指定,否则函数将保留其现有触发器。
-
将 helloPubSub 函数部署到名为 cf-demo 的 Pub/Sub 主题
gcloud functions deploy nodejs-pubsub-function \
--gen2 \
--runtime=nodejs20 \
--region={{{ project_0.default_region | REGION }}} \
--source=. \
--entry-point=helloPubSub \
--trigger-topic cf-demo \
--stage-bucket {{{ project_0.project_id | PROJECT_ID }}}-bucket \
--service-account cloudfunctionsa@{{{ project_0.project_id | PROJECT_ID }}}.iam.gserviceaccount.com \
--allow-unauthenticated
注意:
如果您收到服务账号 serviceAccountTokenCreator 通知,请选择“n”。
-
验证函数的状态:
gcloud functions describe nodejs-pubsub-function \
--region={{{ project_0.default_region | REGION }}}
“ACTIVE”状态表示该函数已部署。
预期输出:
BuildConfig:
automaticUpdatePolicy: {}
build: projects/630521560493/locations/{{{ project_0.default_region | REGION }}}/builds/7ff9d415-50d9-4557-9bcd-5afad42a6390
dockerRegistry: ARTIFACT_REGISTRY
dockerRepository: projects/{{{ project_0.project_id | PROJECT_ID }}}/locations/{{{ project_0.default_region | REGION }}}/repositories/gcf-artifacts
entryPoint: helloPubSub
...
State: ACTIVE
...
UpdateTime: '2024-08-05T13:51:05.317298824Z'
Url: https://{{{ project_0.default_region | REGION }}}-{{{ project_0.project_id | PROJECT_ID }}}.cloudfunctions.net/nodejs-pubsub-function
发布到此主题的每条消息都将触发函数的执行,同时,消息内容将作为输入数据进行传递。
测试完成的任务
点击检查我的进度,验证您完成的任务。
如果您成功完成了任务,系统会给出评分。
部署该函数。
任务 3. 测试函数
在部署函数并确认函数有效后,您需要测试该函数,看它能否在检测到事件时将消息写入云日志。
-
使用一些数据调用 PubSub。
gcloud pubsub topics publish cf-demo --message="Cloud Function Gen2"
输出示例:
messageIds:
- '11927162971409664'
查看日志,确认其中有包含该执行 ID 的日志消息。
任务 4. 查看日志
-
检查日志以通过日志历史记录查看您的消息:
gcloud functions logs read nodejs-pubsub-function \
--region={{{ project_0.default_region | REGION }}}
注意:
日志可能大约需要 10 分钟才会显示。
此外,查看日志的另一种方法是转到 Logging > Logs Explorer。
此 Cloud Functions 函数将输出类似于以下内容的信息:
LEVEL:
NAME: nodejs-pubsub-function
EXECUTION_ID: h4v6akxf4sxt
TIME_UTC: 2024-08-05 15:15:25.723
LOG: Hello, Cloud Function Gen2!
LEVEL: I
NAME: nodejs-pubsub-function
EXECUTION_ID:
TIME_UTC: 2024-08-05 15:15:25.711
LOG:
LEVEL:
NAME: nodejs-pubsub-function
EXECUTION_ID: h4oxfjn7zlyu
TIME_UTC: 2024-08-05 15:10:34.303
LOG: Hello, Friend!
LEVEL: I
NAME: nodejs-pubsub-function
EXECUTION_ID:
TIME_UTC: 2024-08-05 15:10:34.291
LOG:
LEVEL:
NAME: nodejs-pubsub-function
EXECUTION_ID: h4fjhyfxua3k
TIME_UTC: 2024-08-05 15:03:16.342
LOG: Hello, "SGVsbG8gZnJvbSB0aGUgY29tbWFuZCBsaW5l"!
您的应用得到部署和测试,并且您可以查看其日志。
任务 5. 检验您的掌握情况
-
我们在下方准备了一些单选题,以加强您对本实验所涉概念的理解。请尽您所能回答。
恭喜!
您已使用 Google Cloud 控制台,通过命令行创建、部署和测试了一个 Cloud Functions 函数。
参与下一项实验
本实验是 Qwik Starts 系列实验的其中一项。通过这些实验,您可以一窥 Google Cloud 的诸多功能。请在实验目录中搜索“Qwik Starts”,找到您要参与的下一项实验!
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2024 年 8 月 5 日
上次测试实验的时间:2024 年 8 月 5 日
版权所有 2025 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。