本页面介绍如何解决在使用 Workflows 时可能遇到的问题。
部署错误
部署工作流后,Workflows 会检查源代码是否正确无误,并符合语言语法。 如果发现错误,Workflows 会返回该错误。最常见的部署错误类型包括:
- 引用未定义的变量、步骤或子工作流
- 语法不正确
- 缩进不正确
{、}、"、-或:缺失或无关紧要
例如,以下源代码抛出部署错误,因为返回语句引用了未定义的变量 varC:
- step1: assign: - varA: "Hello" - varB: "World" - step2: return: ${varC + varB}
此错误源代码将用于以下 Google Cloud 控制台和 gcloud CLI 示例。
控制台
发生部署错误时,Workflows 会在修改工作流页面上以横幅显示错误消息:
错误消息会标记源代码中的问题,尽可能指定错误来源:
Could not deploy workflow: failed to build: error in step step2: error
evaluating return value: symbol 'varC' is neither a variable nor a
sub-workflow name (Code: 3)
gcloud
运行 gcloud workflows deploy 命令时,如果部署失败,Workflows 会向命令行返回错误消息。错误消息会标记源代码中的问题,尽可能指定错误来源:
ERROR: (gcloud.workflows.deploy) [INVALID_ARGUMENT] failed to build:
error in step step2: error evaluating return value: symbol 'varC' is neither
a variable nor a sub-workflow name
如需解决此问题,请修改工作流的源代码。在这种情况下,请参阅 varA 而不是 varC。
HTTP 403 服务账号权限错误
当 HTTP 服务器以 403 的错误代码进行响应时,工作流执行会失败。例如:
Permission 'iam.serviceaccounts.actAs' denied on service account PROJECT_NUMBER-compute@developer.gserviceaccount.com (or it may not exist).
或
SERVICE_ACCOUNT does not have storage.objects.create access to the Google Cloud Storage object. Permission 'storage.objects.create' denied on resource (or it may not exist).
每个工作流在创建时都会与一个 IAM 服务账号相关联。如需解决此问题,您必须向服务账号授予一个或多个 IAM 角色,这些角色包含管理工作流所需的最低权限。例如,如果您想让工作流将日志发送到 Cloud Logging,请确保执行工作流的服务账号已获授包含 logging.logEntries.create 权限的角色。如需了解详情,请参阅向工作流授予访问 Google Cloud 资源的权限。
HTTP 404 No such object 或 Not found 错误
使用 Cloud Storage 连接器时,如果 HTTP 服务器以 404 的错误代码进行响应,工作流执行会失败。例如:
HTTP server responded with error code 404 in step "read_input_file", routine "main", line: 13 { "body": "Not Found", "code": 404, ... }
您应对对象名称进行网址编码,以使其具备路径安全性。您可以使用 url_encode 和 url_encode_plus 函数对请求网址的对象名称或查询字符串中出现的适用字符进行编码。例如:
- init: assign: - source_bucket: "my-bucket" - file_name: "my-folder/my-file.json" - list_objects: call: googleapis.storage.v1.objects.get args: bucket: ${source_bucket} object: