Google 表格是一种基于云的电子表格解决方案,支持实时协作,并提供用于直观呈现、处理和传达数据的工具。
本教程演示了如何从 Google 表格触发 Workflows。
目标
在此教程中,您将学习以下操作:
- 使用基于云端的问卷调查解决方案 Google 表单创建表单,以便提交创建虚拟机 (VM) 实例的请求。
- 将 Google 表格电子表格与表单相关联,以收集并保存所有回答。
- 使用 Google Apps 脚本(一种基于云端的 JavaScript 平台,可让您以编程方式创建、读取和修改 Google Workspace 产品),在电子表格更新时触发工作流,以便在请求获得批准时触发工作流。
- 部署一个工作流,该工作流会调用 Compute Engine API 连接器,并根据通过表单收集的规范创建 Compute Engine 虚拟机实例。连接器可简化其他 Google CloudAPI 的调用。详细了解 Workflows 连接器。
- 测试整个流程,并确认虚拟机实例是否按预期创建。
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
本教程还使用了 Google Workspace。 Google 向个人用户免费提供的应用不包含的企业级服务需要付费。
准备工作
您可以在 Google Cloud 控制台中运行以下部分命令,也可以在终端或 Cloud Shell 中使用 Google Cloud CLI 运行这些命令。
您的组织定义的安全限制条件可能会导致您无法完成以下步骤。如需了解相关问题排查信息,请参阅在受限的 Google Cloud 环境中开发应用。
控制台
在 Google Cloud 控制台的项目选择器页面上,选择或创建 Google Cloud 项目。
确保您的 Google Cloud 项目已启用结算功能。 了解如何检查项目是否已启用结算功能。
启用 Compute Engine 和 Workflows API。
记下 Compute Engine 默认服务账号,因为您将在本教程中将其与工作流相关联以进行测试。已启用 Compute Engine API 的新项目会创建此服务账号,该账号具有 IAM 基本 Editor 角色,并且电子邮件地址格式如下:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
您可以在 Google Cloud 控制台的欢迎页面上找到项目编号。
对于生产环境,我们强烈建议创建新的服务账号,并为其授予一个或多个 IAM 角色,这些角色包含所需的最小权限并遵循最小权限原则。
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
确保您的 Google Cloud 项目已启用结算功能。 了解如何检查项目是否已启用结算功能。
启用 Compute Engine 和 Workflows API。
gcloud services enable \ compute.googleapis.com \ workflows.googleapis.com
记下 Compute Engine 默认服务账号,因为您将在本教程中将其与工作流相关联以进行测试。已启用 Compute Engine API 的新项目会创建此服务账号,该账号具有 IAM 基本 Editor 角色,并且电子邮件地址格式如下:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
您可以检索项目编号:
gcloud projects describe PROJECT_ID
对于生产环境,我们强烈建议创建新的服务账号,并为其授予一个或多个 IAM 角色,这些角色包含所需的最小权限并遵循最小权限原则。
创建用于请求虚拟机实例的表单
创建一个可用于提交创建 Compute Engine 虚拟机 (VM) 实例的请求的表单。默认情况下,当您通过 Google 表单创建表单时,系统会将其保存在 Google 云端硬盘中。
- 前往 forms.google.com。
- 点击空白图标
。
系统会打开一个新表单。
- 创建一个包含 5 个必填部分的表单。该表单应类似于以下内容:
查看表单示例
机器名称 简短回答文本
可用区 下拉菜单:
- us-central1-a
- us-central1-b
- us-central1-c
- us-central1-f
类型 下拉菜单:
- e2-micro
- e2-small
- e2-medium
- e2-standard-2
- e2-standard-4
磁盘大小 (GB) 简短回答文本
操作系统 下拉菜单:
- debian-10
- centos-stream-9
- cos-93-lts
- cos-97-lts
- 启用电子邮件地址收集功能,以记录表单填写者的电子邮件地址:
- 点击设置。
- 展开回答部分。
- 点击收集电子邮件地址切换开关。
将电子表格与表单相关联
创建表单后,请将其与电子表格相关联,以便将表单回复保存在该电子表格中。系统会将电子表格保存在 Google 云端硬盘中。
- 在表单中打开相应表单。
- 点击回复。
- 点击关联到 Google 表格。
- 在选择回复的目标位置对话框中,选择新建电子表格。
点击创建。
系统会打开关联的电子表格。
在 H 列中,添加已获批?标题。
将光标放在 H 列的第一行中,然后依次选择插入 > 复选框。
电子表格应类似于如下所示:
每次在工作表中添加回答时,相应回答的行中也会显示复选框。
使用 Apps 脚本扩展 Google 表格
借助 Apps 脚本,您可以以程序化的方式创建、读取和修改 Google 表格。大多数为 Google 表格设计的脚本都会通过操纵数组来与电子表格中的单元格、行和列进行交互。如需了解如何将 Apps 脚本与 Google 表格搭配使用,请参阅自定义函数快速入门。
通过 Google 表格创建 Apps 脚本项目:
- 打开您的 Google 表格电子表格。
- 依次选择扩展程序 > Apps 脚本。
- 在脚本编辑器中,点击无标题项目。
- 为项目命名,然后点击重命名。
您的脚本现在已绑定到电子表格,这使脚本能够更改界面或在电子表格打开时做出响应。
脚本项目表示一组 Apps 脚本文件和资源。脚本项目中的代码文件具有
.gs
扩展名。您可以使用 Apps 脚本编写自定义函数,然后在 Google 表格中像使用内置函数一样使用这些自定义函数。自定义函数使用标准 JavaScript 创建。创建函数:
- 打开您的 Apps 脚本项目。
- 点击编辑器 。
- 脚本文件会显示为名为
Code.gs
的项目文件。如需修改文件,请选择相应文件。 将脚本编辑器中的任何代码替换为以下代码,该代码可读取电子表格中的数据并将其作为输入传递给工作流执行:
请将
your-project-id
替换为您的 Google Cloud 项目 ID。您可以在 Google Cloud 控制台的欢迎页面上找到项目 ID。
点击“保存”图标
。
借助 Apps 脚本可安装的触发器,脚本项目可以在满足特定条件时(例如打开或修改电子表格时)执行指定函数。创建触发器:
- 打开您的 Apps 脚本项目。
- 点击触发器 。
- 点击添加触发器。
- 在为 YOUR_PROJECT_NAME 添加触发器对话框中,配置触发器:
- 在选择要运行的函数列表中,选择 handleEdit。
- 在选择要运行的部署列表中,选择 Head。
- 在选择活动来源列表中,选择来自电子表格。
- 在选择事件类型列表中,选择 On edit。
- 在失败通知设置列表中,选择每天通知我。
- 点击保存。
如果您收到选择 Google 账号的提示,请选择相应的账号,然后点击允许。
这允许您的 Apps 脚本项目查看、修改、创建和删除您的 Google 表格电子表格,以及连接到外部服务。
Apps 脚本项目的清单文件是一个 JSON 文件,用于指定 Apps 脚本成功运行脚本所需的基本项目信息。请注意,Apps 脚本编辑器默认会隐藏清单文件,以保护您的 Apps 脚本项目设置。修改清单文件:
- 打开您的 Apps 脚本项目。
- 点击项目设置 。
- 选中在编辑器中显示“appsscript.json”清单文件复选框。
- 点击编辑器 。
- 清单文件会显示为名为
appsscript.json
的项目文件。如需修改文件,请选择相应文件。 oauthScopes
字段指定一个字符串数组。如需设置项目使用的授权范围,请添加一个包含您希望支持的范围的数组。例如:{ "timeZone": "America/Toronto", "dependencies": { }, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8", "oauthScopes": [ "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/spreadsheets" ] }
这会设置以下明确的范围:
- 连接到外部服务
- 查看、修改、配置和删除您的 Google Cloud 数据,并查看您 Google 账号的电子邮件地址
- 查看、修改、创建和删除您使用 Google 表格创建的所有电子表格
点击“保存”图标
。
部署用于创建虚拟机实例的工作流
部署一个工作流,该工作流在创建虚拟机实例的请求获得批准时触发。该工作流会调用 Compute Engine API 连接器,以根据通过表单收集的规范创建 Compute Engine 虚拟机实例。
控制台
在 Google Cloud 控制台中,前往 Workflows 页面:
点击
创建。输入新工作流的名称:
create-vm-from-form
。在区域列表中,选择 us-central1(爱荷华)。
对于服务账号,请选择 Compute Engine 默认服务账号 (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
)。点击下一步。
在工作流编辑器中,输入工作流的定义:
点击部署。
gcloud
为工作流创建源代码文件:
touch create-vm-from-form.yaml
在文本编辑器中,将以下工作流复制到您的源代码文件中:
输入以下命令以部署工作流:
gcloud workflows deploy create-vm-from-form \ --source=create-vm-from-form.yaml \ --location=us-central1 \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
将
PROJECT_NUMBER
替换为您的 Google Cloud项目编号。您可以检索项目编号:gcloud projects describe PROJECT_ID
测试端到端流程
如需确认一切正常运行,请尝试完成整个流程。
将表单发送给自己,并适当回答问题。
确保您用于创建虚拟机实例的规范有效;否则,工作流执行将会失败。如需了解详情,请参阅 Compute Engine 通用机器系列。
如需提交回答,请点击提交。
在表单中打开相应表单。
点击回复。
点击在 Google 表格中查看。
系统会打开关联的电子表格。
在您的回答对应的行中,选中已批准?复选框。
打开您的 Apps 脚本项目。
点击执行
。触发器应已执行,并列出,状态为
Completed
。确认
create-vm-from-form
工作流已成功完成:控制台
在 Google Cloud 控制台中,前往 Workflows 页面。
在工作流页面上,点击 create-vm-from-form 工作流,前往其详情页面。
在工作流详情页面上,如需检索特定执行的详细信息,请点击相应的执行 ID。
执行状态应为成功,并且在“输入”窗格中,您应该会看到您请求的虚拟机规范。
gcloud
检索工作流的执行尝试列表:
gcloud workflows executions list create-vm-from-form
结果应如下所示:
NAME: projects/918619793306/locations/us-central1/workflows/create-vm-from-form/executions/d8947ecb-9ccb-4ea1-ba10-e5c10414e3be STATE: SUCCEEDED START_TIME: 2023-01-24T15:07:40.404741791Z END_TIME: 2023-01-24T15:07:55.649373625Z
确认已按预期创建新虚拟机:
清理
如果您为本教程创建了一个新项目,请删除项目。 如果您使用的是现有项目,希望保留此项目且不保留本教程中添加的任何更改,请删除为教程创建的资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
要删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.