本教程介绍如何使用 Cloud Scheduler 自动执行工作流,以便工作流按特定时间表运行,在本例中,每 5 分钟运行一次。
创建接收运行时参数的工作流
工作流定义由一系列使用 Workflows 语法描述的步骤组成,该语法可以采用 YAML 或 JSON 格式编写。创建工作流后,可以进行部署,使其可以执行。
控制台
在 Google Cloud 控制台中,前往 Workflows 页面:
点击创建。
输入
myFirstWorkflow作为新工作流的名称。选择 us-central1 作为区域。
选择您之前创建的服务账号。
点击下一步。
在工作流编辑器中,输入工作流的定义。
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
此工作流向以其运行时参数形式传递其名字和姓氏的用户返回“Hello”问候语。
点击部署。
gcloud
- 打开终端。
将以下工作流定义保存为 YAML 或 JSON 文件,例如 myFirstWorkflow.yaml 或 myFirstWorkflow.json。
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
此工作流向以其运行时参数形式传递其名字和姓氏的用户返回“Hello”问候语。
输入以下命令以部署工作流:
gcloud workflows deploy myFirstWorkflow \ --source=myFirstWorkflow.yaml_OR_json \ --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com
将
yaml_OR_json替换为yaml或json,具体取决于您之前创建的 Workflows 定义文件的格式。
安排工作流
通过使用先前创建的服务账号创建 Cloud Scheduler 作业,以触发工作流。
控制台
在 Google Cloud 控制台中,前往 Cloud Scheduler 页面:
点击创建作业。
将名称设置为
my-workflow-job。对于频率,输入:
这将每 5 分钟执行一次作业。该间隔使用 unix-cron 格式定义。*/5 * * * *对于时区,请选择国家/地区和时区。
例如,选择美国和洛杉矶或太平洋夏令时 (PDT)。
点击继续。
对于目标类型,选择 HTTP。
对于网址,请输入:
https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
将 HTTP 方法保留为 POST 的默认值。
添加以下两个 HTTP 标头:
- 名称:
Content-Type,值:application/octet-stream - 名称:
User-Agent,值:Google-Cloud-Scheduler
- 名称:
对于正文,请输入:
{"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}这将传递工作流参数的 JSON 编码;在此示例中,名字为“Sherlock”和姓氏“Holmes”。字符串中的双引号使用反斜杠 (\) 进行转义。
在身份验证标头部分,选择添加 OAuth 令牌。
输入您之前创建的服务账号。
您不必指定范围,因为系统将使用sa-name@PROJECT_ID.iam.gserviceaccount.com
https://www.googleapis.com/auth/cloud-platform的默认值。接受所有其他默认设置,然后点击创建。
gcloud
输入以下命令以安排名为 my-workflow-job 的作业:
gcloud scheduler jobs create http my-workflow-job \
--schedule="*/5 * * * *" \
--uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions" \
--message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \
--time-zone="America/Los_Angeles" \
--oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"该间隔使用 unix-cron 格式定义。
message-body 标志用于传递工作流参数的 JSON 编码。在本例中,名字为“Stherlock”,姓氏为“Holmes”。字符串中的双引号使用反斜杠 (\) 进行转义。
现在,您的工作流每 5 分钟执行一次。
如需详细了解 gcloud scheduler 标志,以及如何应用调用日志记录,以便记录工作流执行期间的每个调用步骤,请参阅安排工作流和 gcloud 参考文档。
运行作业并验证结果
控制台
在 Google Cloud 控制台中,前往 Cloud Scheduler 页面:
如果作业未显示,您可能需要刷新页面。
对于名为
my-workflow-job的作业,点击立即运行。您应该会看到 Result 值更新为 Success。
在 Google Cloud 控制台中,前往 Workflows 页面:
在工作流列表中,点击 myFirstWorkflow 以打开其详情页面。
工作流的执行状态应该为成功。
点击工作流的执行 ID 以打开详情页面,并在“输出”窗格中查看工作流的结果。
输出内容应为“Hello, Sherlock Holmes!”。
gcloud
运行 Cloud Scheduler 作业以执行工作流:
gcloud scheduler jobs run my-workflow-job
检索工作流的执行 ID:
gcloud workflows executions list myFirstWorkflow
输出应类似于以下内容,执行 ID 以粗体显示:
projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
检索工作流的执行结果:
gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow
将
EXECUTION_ID替换为上一步返回的执行 ID。输出应类似于以下内容:
argument: '{"firstName":"Sherlock","lastName":"Holmes"}' endTime: '2021-09-09T15:15:00.869350639Z' name: projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320 result: '"Hello, Sherlock Holmes!"' startTime: '2021-09-09T15:15:00.839175480Z' state: SUCCEEDED workflowRevisionId: 000001-4f9
恭喜!您已成功创建了一个 Cloud Scheduler 作业,该作业会自动按特定时间表运行工作流。