Boto3 Cognito-IDP 脚本冻结/挂在 lambda 中

问题描述 投票:0回答:1

我正在尝试创建一个 api,可用于邀请用户加入我的 cognito 用户池。 然而,当我调用 lambda 时,它挂起......

我尝试将 lambda 内存增加到 512Mb,并将超时设置增加到 5 分钟,但没有成功。

这是功能代码:

def cognito_register_user(user):
    print("sign up user: ", user["email"])

    try:
        aws_client = boto3.client('cognito-idp', region_name = "eu-west-2",aws_access_key_id="XXXXXX",
                                      aws_secret_access_key="XXXXXX")

        response = aws_client.admin_create_user(
UserPoolId="eu-west-2_XXXXX",
Username=user["email"],
UserAttributes=[{"Name": "email","Value": user["email"]},{ "Name": "email_verified", "Value": "true" },            {
                'Name': 'name',
                'Value': user["name"]
            },
            {
                'Name': 'family_name',
                'Value': user["family_name"]
            },],DesiredDeliveryMediums=['EMAIL'])
        print("response=", response)
        return response
    except:
        traceback.print_exc()
    return None

Cloudwatch 日志

        2024-04-22T20:00:02.514+01:00   sign up user: [email protected]

        2024-04-22T20:05:32.468+01:00   2024-04-22T19:05:32.468Z 85f32ee0-d56b-4fff-a63d-ceffb9c76d1e Task timed out after 330.10 seconds 
python amazon-web-services aws-lambda boto3 amazon-cognito
1个回答
0
投票

当 AWS Lambda 函数连接到 VPC 时,它会自动接收 Internet 访问权限。

如果您需要将 Lambda 函数连接到 VPC(例如,因为它还需要访问该 VPC 中的 Amazon RDS 数据库),则 Lambda 函数将不会自动接收 Internet 访问权限。要提供对 Lambda 函数的 Internet 访问,您应该:

  • 将 Lambda 函数连接到私有子网,它将在其中创建弹性网络接口 (ENI)
  • NAT 网关添加到公共子网(收费)

是的,可以将 Lambda 函数连接到公共子网并手动将弹性 IP 地址添加到 ENI,以授予 Lambda 函数对 Internet 的访问权限。但是,Lambda 服务有时可能会创建/删除 ENI,特别是在扩展 Lambda 函数以实现高并发时。在这种情况下,您正在使用的 ENI 可能会消失,或者可能会创建新的 ENI 。这将导致互联网连接丢失。如果您打算使用此方法,那么您将需要监视 Lambda 函数是否有错误并在发生变化时做出响应。

© www.soinside.com 2019 - 2024. All rights reserved.