对 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.
Copy
可能的原因:
  • 在角色的 AWS 信任关系策略中,AWS ARN 不正确。可能的原因包括:

    • 您未进行设置。

    • 您已进行设置,但您使用了 AWS 角色的 ARN (不正确),而未使用用户 ARN,您可以通过 Snowflake 的 DESCRIBE INTEGRATION 命令中看到这一点。请务必使用工作表的 API_AWS_IAM_USER_ARN 字段中的值,而不是“API_AWS_ROLE_ARN”字段中的值。

  • 在您的 AWS 信任关系策略中,std:ExternalId 不正确。可能的原因包括:

    • 您未进行设置。

    • 您重新创建了 API 集成对象。重新创建 API 对象会更改其外部 ID。

Error: 403 '{"Message":"User: <ARN> is not authorized to perform: execute-api:Invoke"}'

该消息的全文是:

Request failed for external function <function_name>.
Error: 403 '{"Message":"User: <ARN> is not authorized to perform: execute-api:Invoke on resource: <MethodRequestARN>"}'
Copy
可能的原因:
  • API Gateway 资源策略的以下内容有误:

    • IAM 角色 ARN。

    • 承担的角色。

    • 方法请求 ARN。

  • IAM 角色没有附加正确的策略。

可能的解决方案:
  • 确保您遵循了 保护您的 Amazon API Gateway 端点 中的资源策略模板。具体而言,请确保您的资源策略:

    • <12-digit number> 替换为了工作表中名为 Your AWS account ID 的字段的相应值。

    • <external_function_role> 替换为了工作表中 New IAM Role Name 字段中的值。

    • Resource`字段中的 :extui:`method_request_ARN 替换为了工作表中 Method Request ARN 字段中的值。确保末尾没有斜杠。

  • 如果您需要确保 IAM 角色附加了正确的权限策略,则可以按照以下步骤操作以找到该角色的权限策略列表:

    1. 在 AWS 中,转到 Identity and Access Management (IAM),然后选择角色。

    2. 查看该角色的 Summary

    3. 点击 Permissions 选项卡。

    4. 验证所需的策略是否在 Permissions policies 列表中。

  • 确保被调用的端点是在 API Gateway 上设置的资源,而不是暂存区。

Error: 403 '{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke"}'

该消息的全文是:

Request failed for external function <function_name>.
Error: 403 '{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: <MethodRequestARN>"}'
Copy
可能的原因:

一个可能的原因是,在为 API Gateway 配置授权时,您可能没有指定 Method Request 需要针对资源的 AWS_IAM 授权。

可能的解决方案:

如果您没有按照 保护 Amazon API Gateway 中的说明进行操作,请立即按照说明指定 AWS_IAM 授权。

解析 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
Copy
可能的原因:
  • 您可能没有为 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 外部函数 故障排除 页面,了解更多故障排除提示。

语言: 中文