对 AWS 外部函数进行故障排除¶
本主题提供有关 AWS 外部函数的故障排除信息。
本主题内容:
与平台无关的运行时问题¶
数据类型返回值与预期返回值不一致¶
将实参传递到外部函数或从外部函数传递实参时,请确保数据类型是合适的。如果发送的值不适合接收的数据类型,则该值可能会被截断或以其他方式损坏。
有关更多详细信息,请参阅 确保外部函数的实参与远程服务解析的实参相对应。
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
字段中接收多行,并且返回的行数应与接收的行数完全相同。- 可能的解决方案:
确保远程服务为接收的每一行返回一行。
特定于 AWS 的问题¶
当端点使用 Lambda 代理集成时,API Gateway 返回错误 502¶
- 可能的原因:
Lambda 函数可能发生了以下情况:
超时。
抛出了异常。
因其他原因失败。
- 可能的解决方案:
如果 Lambda 或 API Gateway 日志可供您查看,请检查这些日志。
如果 Lambda 函数的源代码可供您使用,请分析和调试 Lambda 函数中的代码。在某些情况下,您可能能够在更简单的上下文(AWS 外部)中执行该代码的副本,以帮助对其进行调试。
验证发送到 Lambda 函数的数据是否采用了 Lambda 函数期望接收的格式。您可能需要尝试发送一个更小、更简单的数据集,看看能否成功。
确认您一次没有发送过多数据。
在某些情况下,增加超时时间可能会解决问题,尤其是当 Lambda 函数需要大量 CPU 资源时,或者因 Lambda 函数本身调用其他远程服务而需要更多时间时。
无法读取 Amazon AWS Lambda 函数内部 HTTP POST 方法中的请求正文¶
- 可能的原因:
您可能没有启用 Lambda 代理集成。
- 可能的解决方案:
启用 Lambda 代理集成。
有关更多详细信息,请参阅 创建 API Gateway 端点 中的步骤。
承担 AWS_ROLE 角色时出错¶
该消息的全文是:
SQL execution error: Error assuming AWS_ROLE. Please verify the role and externalId are configured correctly in your AWS policy.
- 可能的原因:
在角色的 AWS 信任关系策略中,AWS ARN 不正确。可能的原因包括:
您未进行设置。
您已进行设置,但您使用了 AWS 角色的 ARN (不正确),而未使用用户 ARN,您可以通过 Snowflake 的 DESCRIBE INTEGRATION 命令中看到这一点。请务必使用工作表的
API_AWS_IAM_USER_ARN
字段中的值,而不是“API_AWS_ROLE_ARN”字段中的值。
在您的 AWS 信任关系策略中,std:ExternalId 不正确。可能的原因包括:
您未进行设置。
您重新创建了 API 集成对象。重新创建 API 对象会更改其外部 ID。
解析 JSON 响应时出错...Error: top-level JSON object must contain "data" JSON array element¶
该消息的全文是:
Error parsing JSON response for external function ... Error: top-level JSON object must contain "data" JSON array element
- 可能的原因:
您可能没有为 API Gateway 资源中的 POST 命令指定 Lambda 代理集成。
- 可能的解决方案:
为您的 API Gateway 资源指定 Lambda 代理集成。
有关 Lambda 代理集成的更多详细信息,请参阅 创建 API Gateway 端点 中的步骤。
Request failed for external function EXT_FUNC with remote service error: 403 '{"message":"Forbidden"}';¶
- 可能的原因:
代理服务需要 API 密钥,通常用于身份验证或计费。API 密钥丢失或不正确。
- 可能的解决方案:
使用 ALTER API INTEGRATION 命令指定正确的 API 密钥。
CloudFormation 堆栈创建失败¶
如果您使用 AWS CloudFormation 模板创建外部函数,则可能会出现此错误。
- 可能的原因:
您没有创建 CloudFormation 模板中指定的资源所需的权限。
- 可能的解决方案:
查看堆栈的 Events 选项卡以了解错误详细信息。
另请查看 AWS 外部函数 故障排除 页面,了解更多故障排除提示。