如何解决与 Amazon Cognito 中的 Lambda 触发器相关的错误?

2 分钟阅读
0

我想要解决在 Amazon Cognito 中将 AWS Lambda 函数配置为触发器时遇到的错误。

解决方法

以下是在 Amazon Cognito 中使用 Lambda 触发器时需要解决的常见错误。

“由于错误 AccessDeniedException,PreSignUp 调用失败。”

**注意:**错误消息中提到了触发器类型。例如,作为 PreSignUp 触发器附加到您的用户群体的 Lambda 函数会响应上述错误。

错误原因

当从 Amazon Cognito 控制台将 Lambda 函数作为触发器添加到您的用户群体时,Amazon Cognito 会执行以下操作:

  • 向函数的资源策略添加所需的权限。此资源策略允许 Amazon Cognito 对某些事件触发器类型调用函数。
  • 显示下列消息: “调用 Lambda 函数的权限 - 您授予了 Amazon Cognito 代表您调用此 Lambda 函数的权限。Amazon Cognito 将向该函数添加基于资源的策略语句。”

当删除作为触发器添加的函数时,也会发生此错误。如果删除 Lambda 触发器,则您必须更新用户群体中相应的触发器。例如,在删除后身份验证触发器时,您必须将相应用户群体中的后身份验证触发器设置为

解决错误

当在 Amazon Cognito 控制台之外创建触发器时,在将触发器分配给用户群体时,您必须明确添加权限。若要添加权限,请使用 AWS SDK、AWS 命令行界面 (AWS CLI) 或 Amazon CloudFormation。

当您添加权限时,Amazon Cognito 仅代表您的用户群体和账户调用函数。若要从 Lambda 控制台添加权限,请按照将基于资源的策略用于 Lambda 中的步骤进行操作。您也可以使用 AddPermission 操作。

以下是基于 Lambda 资源的策略示例,该策略允许 Amazon Cognito 调用函数。用户群体处于 aws:SourceArn 条件,账户处于 aws:SourceAccount 条件。

**注意:**请将 example_lambda_function_arnexample_account_numberexample_user_pool_arn 替换为您自己的值。

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "lambda-allow-cognito",
      "Effect": "Allow",
      "Principal": {
        "Service": "cognito-idp.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "example_lambda_function_arn",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "example_account_number"
        },
        "ArnLike": {
          "AWS:SourceArn": "example_user_pool_arn"
        }
      }
    }
  ]
}

“身份验证错误,请联系应用所有者。”

错误原因

发生此错误有两个原因:

  • 除了自定义发件人 Lambda 触发器外,Amazon Cognito 同步调用了 Lambda 函数。该函数必须在 5 秒钟内响应。如果该函数没有响应,则 Amazon Cognito 会重试调用。在三次尝试失败后,该函数将超时。您无法更改 5 秒超时值。
  • 如果 Amazon Cognito 在 5 秒内未收到触发器的响应,则在三次尝试失败后,Amazon Cognito 会返回错误。

解决错误

如果函数超时,则应用使用 AWS Lambda 函数的最佳实践来优化该函数。您可以让与用户群体关联的 Lambda 函数异步调用第二个 Lambda 函数。通过此设置,函数可以在不超时的情况下执行所有必需的操作。

“PreSignUp 失败,错误是模块 lambda_function 中出现语法错误。”

错误原因

当 Lambda 函数中存在任何语法错误时,Amazon Cognito 会返回此错误。

解决错误

请重新检查函数代码,并更正所有语法错误。

“PreSignUp 失败,错误是模块 lambda_function 上缺失处理程序“lambda_handler”。”

错误原因

函数的运行时设置包括处理程序参数。如果为 HandlerInfo 设置了错误的信息或语法,则函数将无法运行并导致此错误。

解决错误

在函数的配置中配置处理程序参数,以告知 Lambda 运行时需要调用的处理程序方法。

在 Python 中配置函数时,处理程序设置值是用点分隔的文件名和处理程序模块名称。例如,main.Handler 调用 main.py 中定义的处理程序方法。

有关处理程序语法的详细信息,请参阅修改运行时环境

相关信息

重要注意事项

自定义 AWS Lambda 运行时

AWS 官方
AWS 官方已更新 1 年前