求助:Lambda中Boto3调用Cognito-IDP接口超时挂起问题
Cognito用户邀请API的Lambda函数超时问题
我正在开发一个邀请用户加入Cognito用户池的API,但调用对应的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: XXXX@gmail.com 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
排查与解决建议
- 检查Lambda网络配置:如果Lambda部署在VPC内,需确保所在安全组和NACL允许出站访问eu-west-2区域的Cognito服务端点,或配置NAT网关/互联网网关提供公网访问能力。未部署在VPC的Lambda默认可访问公网,但VPC内的必须配置正确的网络出口。
- 替换硬编码密钥为IAM角色:代码中直接写入AWS密钥存在安全风险,且可能导致凭证配置错误。给Lambda关联具备
cognito-idp:AdminCreateUser权限的IAM角色,boto3会自动获取角色凭证,避免手动配置密钥引发的请求阻塞。 - 优化异常捕获逻辑:当前
except:捕获所有异常仅打印堆栈,建议明确捕获botocore.exceptions.ClientError并打印详细错误信息,判断请求是在连接阶段卡住还是Cognito服务返回异常。 - 排查邮件发送环节:
DesiredDeliveryMediums=['EMAIL']会触发Cognito发送邀请邮件,若SES配置异常(如未验证域名/邮箱、发送额度耗尽),可能导致Cognito处理请求时阻塞。可先移除该参数测试是否仍超时,排除邮件环节问题。 - 本地测试Cognito API:使用相同凭证(或对应IAM权限)在本地调用
admin_create_user接口,验证请求是否能正常返回,以此区分是Lambda环境问题还是Cognito服务/配置问题。
内容的提问来源于stack exchange,提问作者azy141
相关产品推荐
相关产品推荐

