对 GCP 外部函数进行故障排除

本主题提供有关 GCP 外部函数的故障排除信息。

本主题内容:

与平台无关的运行时问题

数据类型返回值与预期返回值不一致

将实参传递到外部函数或从外部函数传递实参时,请确保数据类型是合适的。如果发送的值不适合接收的数据类型,则该值可能会被截断或以其他方式损坏。

有关更多详细信息,请参阅 确保外部函数的实参与远程服务解析的实参相对应

Error: Row numbers out of order

可能原因:

在每个批处理中返回的行号应该是从 0 开始的单调升序整数。输入行号也必须遵循此规则,并且每个输出行都应与相应的输入行一致。例如,输出行 0 中的输出应与输入行 0 中的输入相对应。

可能的解决方案:

确保返回的行号与收到的行号相同,并且每个输出值都使用相应输入的行号。如果这不起作用,则输入行号可能不正确,或者您没有以正确的顺序返回行。

接下来,确保输出行号从 0 开始,增加 1,并按顺序排列。

有关数据输入和输出格式的更多信息,请参阅 远程服务输入和输出数据格式

Error: "Error parsing JSON: Invalid response"

可能原因:

最可能的原因是远程服务(例如 AWS Lambda 函数)返回的 JSON 构造不正确。

可能的解决方案:

确保外部函数返回一个数组数组,每个接收的输入行返回一个内部数组。查看以下位置中的输出格式说明:Snowflake 接收的数据格式

Error: Format of the returned value is not JSON

可能原因:

返回值内包含双引号。

可能的解决方案:

尽管 JSON 字符串由双引号分隔,但在大多数情况下,字符串本身不应以引号开头和结尾。如果嵌入的双引号不正确,请将其删除。

Error: Function received the wrong number of rows

可能原因:

远程服务尝试返回的行数多于或少于接收的行数。即使函数名义上是标量的,它也可能在 event 参数的 body 字段中接收多行,并且返回的行数应与接收的行数完全相同。

可能的解决方案:

确保远程服务为接收的每一行返回一行。

特定于 GCP 的问题

Error: Request fails with '{"message":"Audiences in Jwt are not allowed","code":403}'

可能原因:

API 集成的 google_audience 字段中的值不是允许的值。

可能的解决方案:
  • 验证 API 集成的 google_audience 值是否与 API 的托管服务名称匹配,该名称应记录在跟踪工作表的 Managed Service Identifier 字段中。

  • 如果您将 x-google-audiences 字段添加到 API 配置文件的 securityDefinitions 部分之中,请确保 x-google-audiences 中的值与 API 集成字段中的 google_audience 值匹配。

有关 Google 身份验证的更多信息,请参阅 Google 服务账户 身份验证文档 (https://cloud.google.com/api-gateway/docs/authenticate-service-account#configure_auth)。

Error: Request fails with '{"message":"Jwt is missing","code":401}'

可能原因:
  • 在配置文件中, securityDefinitions 字段中的 x-google-issuer 字段值可能与跟踪工作表中记录的 API 集成的 API_GCP_SERVICE_ACCOUNT 值不匹配。

  • x-google-issuer 中的值可能包含额外的空格。

可能的解决方案:
  • 更新 x-google-issuer,以匹配 API_GCP_SERVICE_ACCOUNT

  • 移除不需要的空格。

Error: Request fails with '403 Forbidden'

可能原因:

使用配置的服务账户在后端不具备适当的权限。

可能的解决方案:

更新服务账户的权限。

语言: 中文