如何解决 Amazon Connect 联系流中的 Lambda 函数故障?

2 分钟阅读
0

我想知道我的联系流尝试在 Amazon Connect 中调用函数时为什么无法调用我的 AWS Lambda 函数。

解决方法

验证联系流日志中的错误消息

完成以下步骤:

  • 如果您尚未配置联系流日志,请为您的 Amazon Connect 实例启用联系流日志记录
  • 搜索联系流日志中的任何错误消息。例如,要搜索特定时间范围内的错误消息,请运行类似于以下内容的查询:
    fields @timestamp, @message
    | filter @message like 'Results'
    | parse @message '"Results":"*","ContactId":"*","ContactFlowId":"*","ContactFlowName":"*","ContactFlowModuleType":"*"' as Results, ContactId, ContactFlowId, ContactFlowName, BlockType
    | filter Results like 'rror' or Results like 'ailed' or Results like 'imeout' or Results like 'xception' or Results like 'No prompt provided' or Results like 'Instance has reached concurrent Lambda thread access limit' or Results like 'nsupported' or Results like 'nvalid' or Results like 'not found' or Results like 'execution limit reached'
    | filter BlockType = 'InvokeExternalResource'
    | sort @timestamp asc
    | display Timestamp, Results, ContactId, ContactFlowId, ContactFlowName, BlockType

根据错误消息,完成以下任务。

Status Code: 403; Error Code: AccessDeniedException; RequestId: XXXXXXXX

如果函数的基于资源的策略未授予 Amazon Connect 调用该函数的权限,则您可能会遇到上述错误。您可以查看函数的基于资源的策略,以查看该策略是否包含所需的权限。

要向策略添加所需的权限,请使用以下方法之一:

  • 使用 Amazon Connect 控制台将 Lambda 函数添加到您的实例。该函数在添加到实例后会自动获取资源权限。

  • 运行 AWS 命令行界面 (AWS CLI) 命令 add-permission。请包含主体 connect.amazonaws.com 和您的 Amazon Connect 实例的 Amazon资源名称 (ARN)
    示例:

    aws lambda add-permission --function-name function-name --action lambda:InvokeFunction --statement-id connect-to-lambda --principal connect.amazonaws.com --source-arn connect-instance-arn
  • 使用 Lambda 控制台创建基于资源的策略。有关详细信息,请参阅在 AWS Lambda 中管理权限
    基于资源的策略示例:

    {
      "Version": "2012-10-17",
      "Id": "default",
      "Statement": [
        {
          "Sid": "100",
          "Effect": "Allow",
          "Principal": {
            "Service": "connect.amazonaws.com"
          },
          "Action": "lambda:InvokeFunction",
          "Resource": "<Qualified AWS Lambda ARN>",
          "Condition": {
            "ArnLike": {
              "AWS:SourceArn": "<Amazon Connect ARN>"
            }
          }
        }
      ]
    }

“The Lambda Function Returned An Error”(Lambda 函数返回错误)

要了解可能导致上述错误的原因,请查看 Lambda 的 Amazon CloudWatch 指标。查看相关时间戳的数据的指标。

如果错误指标不包含相关时间戳的数据,则请验证函数的响应

**注意:**最佳做法是测试 Lambda 函数返回的输出。确认 Lambda 函数以与 Amazon Connect 兼容的格式返回输出。

有关输出,请查看以下配置:

  • Lambda 有效载荷必须为 NULL 以外的值。
  • 如果响应验证类型为 STRING_MAP,则输出必须是键值对的平面对象,且不能嵌套。如果类型为 JSON,则该对象必须是有效的 JSON 值,且可以包含嵌套的 JSON。
  • 键值对只能包含字母数字字符、短划线字符或下划线字符。
  • 返回的数据大小必须小于 32 KB 的 UTF-8 数据。
  • 验证您的 Lambda 函数的超时设置是否设为足够高的值。该值必须足够高,以允许您的函数调用和处理数据,然后返回响应。

当您在联系流中使用调用 Lambda 函数时,该限制将小于在 Lambda 最大超时限制中配置的值。超时设置的默认值为 3 秒,最大值为 8 秒。

例如,假设您的 Lambda 函数配置的超时值为 15 秒,而您的 Lambda 运行时间为 10 秒。尽管您没有收到超时错误,但联系流会将执行路由到错误分支,因为允许的最大超时值为 8 秒。

要了解调用函数所需的时间,请在 Amazon CloudWatch 中查看该函数的持续时间指标。然后,根据需要更新调用 Lambda 函数Lambda 函数的超时值。

**注意:**要在联系流中包含调用时间超过八秒的 Lambda 函数,请在 Amazon Connect 中使用异步 Lambda 函数。如果调用多个 Lambda 函数,则函数序列的持续时间必须等于或小于 20 秒

如果 Lambda 错误指标包含相关时间戳的数据,请完成如何排查 Lambda 函数故障?中的步骤

相关信息

从 Amazon Connect 调用 AWS Lambda 函数别名

AWS 官方
AWS 官方已更新 4 个月前