本教程介绍如何在 App Engine 应用中使用 Cloud Tasks 触发 Cloud Run 函数并定期发送电子邮件。
了解代码
此部分介绍了应用代码及其工作原理。
创建任务
索引页面使用 app.yaml 中的处理程序提供。创建任务所需的变量将作为环境变量传入。
此代码会创建端点 /send-email。此端点会处理从索引页面提交的表单,并将该数据传递给任务创建代码。
此代码实际上会创建任务并将其发送到 Cloud Tasks 队列。代码通过以下方式构建任务:
- 将目标类型指定为 - HTTP Request。
- 指定要使用的 - HTTP method和目标的- URL。
- 将 - Content-Type标头设置为- application/json,以便下游应用可以解析结构化载荷。
- 添加服务账号电子邮件,以便 Cloud Tasks 可以向请求目标提供凭据,这需要身份验证。此服务账号是单独创建的。 
- 检查以确保用户输入日期不超过 30 天,并将其作为字段 - scheduleTime添加到请求中。
创建电子邮件
此代码会创建 Cloud Run 函数,该函数是 Cloud Tasks 请求的目标。它使用请求正文来构建电子邮件并通过 SendGrid API 发送它。
准备应用
设置 SendGrid
- 创建一个 SendGrid 账号。 - 您可以通过 SendGrid 网站手动执行此操作
- 您也可以使用 Google Cloud Launcher(该服务将为您创建一个账号,并集成结算功能)。请参阅使用 Cloud Launcher 创建 SendGrid 账号。
 
- 创建 SendGrid API 密钥: - 登录您的 SendGrid 账号。 
- 在左侧导航栏中,打开设置,然后点击 API 密钥。 
- 点击创建 API 密钥,然后选择受限访问权限。在邮件发送标头下,选择完整访问权限。 
- 复制所显示的 API 密钥(您只能看到一次,请务必将其粘贴到别处,方便日后使用)。 
 
下载源代码
- 将示例应用代码库克隆到本地机器: - git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
- 转到包含示例代码的目录: - cd cloud-tasks/
部署 Cloud Run 函数
- 导航到 - function/目录:- cd function/
- 部署函数的方法如下: - gcloud functions deploy sendEmail --runtime nodejs14 --trigger-http \ --no-allow-unauthenticated \ --set-env-vars SENDGRID_API_KEY=SENDGRID_API_KEY \ - 将 - SENDGRID_API_KEY替换为您的 API 密钥。- 此命令使用以下标志: - 使用 - --trigger-http以指定 Cloud Run functions 触发器类型。
- --no-allow-unauthenticated以指定函数调用需要进行身份验证。
- 使用 - --set-env-var以设置您的 SendGrid 凭据
 
- 将该函数的访问权限控制设置为仅允许经过身份验证的用户。 - 在 Cloud Run functions 界面中选择 - sendEmail函数。
- 如果您没有看到 - sendEmail的权限信息,请点击右上角的显示信息面板。
- 点击上方的添加主账号按钮。 
- 将新的主账号设置为 - allAuthenticatedUsers。
- 设置角色。 - 第 1 代函数:将角色设置为 Cloud Function Invoker
- 第 2 代函数:将角色设置为 Cloud Run Invoker
 
- 第 1 代函数:将角色设置为 
- 点击保存。 
 
创建 Cloud Tasks 队列
- 使用以下 - gcloud命令创建队列:- gcloud tasks queues create my-queue --location=LOCATION - 将 - LOCATION替换为队列的首选位置,例如- us-west2。如果您未指定位置,gcloud CLI 会选择默认位置。
- 验证是否已成功创建队列: - gcloud tasks queues describe my-queue --location=LOCATION - 将 - LOCATION替换为队列的位置。
创建服务账号
Cloud Tasks 请求必须在 Authorization 标头中提供凭据,以便 Cloud Run functions 函数对请求进行身份验证。此服务账号允许 Cloud 任务为此创建和添加 OIDC 令牌。
- 在服务账号界面中,点击 +创建服务账号。 
- 添加服务账号名称(易记显示名),然后选择创建。 
- 设置角色,然后点击继续。 - 第 1 代函数:将角色设置为 Cloud Function Invoker
- 第 2 代函数:将角色设置为 Cloud Run Invoker
 
- 第 1 代函数:将角色设置为 
- 选择完成。 
将端点和任务创建者部署到 App Engine
- 导航到 - app/目录:- cd ../app/
- 使用您的值更新 - app.yaml中的变量:- 如需查找您的队列位置,请使用以下命令: - gcloud tasks queues describe my-queue --location=LOCATION - 将 - LOCATION替换为队列的位置。- 如需查找函数网址,请使用以下命令: - gcloud functions describe sendEmail 
- 使用以下命令将应用部署到 App Engine 标准环境: - gcloud app deploy 
- 打开应用,以电子邮件的形式发送明信片: - gcloud app browse