You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda调用SNS发送邮件遇ConnectTimeoutError求助

Lambda调用SNS超时问题排查与修复

遇到的错误

"errorMessage": "Connect timeout on endpoint URL: "https://sns.us-west-1.amazonaws.com/"",
"errorType": "ConnectTimeoutError"

核心修改点与排查方向

1. 网络配置(最可能的根因)

  • 如果Lambda部署在VPC内:
    • VPC内的Lambda默认无公网访问权限,无法调用SNS公网端点,需二选一解决:
      • 给Lambda所在子网配置NAT网关,确保子网路由表指向NAT网关访问公网。
      • 在VPC中创建SNS的接口型VPC端点,让Lambda通过内网访问SNS服务。
  • 若Lambda无需访问VPC内资源(比如你的Redshift是公网可访问状态),可直接将Lambda移出VPC,默认即可访问公网SNS端点。

2. 代码逻辑与语法修复

  • SQL语法错误:原查询中so.isclosed as cls后缺少逗号,导致表关联逻辑失效,必须修复:
    -- 错误代码段
    so.isclosed as cls
    salesforce.opportunity so
    -- 修改后
    so.isclosed as cls,
    salesforce.opportunity so
    
  • 数据读取逻辑冗余:for row in cur:后调用cur.fetchall()会跳过第一行数据,应直接读取所有结果:
    cur.execute(sql_query)
    rows = cur.fetchall()
    if rows:
        df = pd.DataFrame.from_records(rows, columns=[desc[0] for desc in cur.description])
        df['Time_Stamp'] = pd.to_datetime('now', utc=True)
        df['ca_active_hosts'] = df['ca_active_hosts'].astype('Int64', errors='ignore')
        df['ca_active_hosts'].fillna(0, inplace=True)
        
        if (df['ca_active_hosts'] >= 0).all():
            print('准备发送通知')
            response = client2.publish(
                TopicArn='arn:aws:sns:us-west-1:##########:email-data-lake',
                Message=f'Warning User active_hosts is {df["Time_Stamp"].iloc[0]}',
                Subject='User Warning'
            )
        else:
            print('不符合通知条件')
    else:
        print('查询无结果')
    
  • 显式指定SNS区域:初始化客户端时明确指定区域,避免自动识别出错:
    client2 = boto3.client('sns', region_name='us-west-1')
    
  • 添加异常捕获:增加错误处理便于排查问题:
    try:
        response = client2.publish(...)
        print(f'SNS发送成功: {response}')
    except Exception as e:
        print(f'SNS发送失败: {str(e)}')
        raise e
    

3. 权限与配置验证

  • 确认Lambda角色的信任策略允许Lambda服务扮演该角色:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "lambda.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  • 调整Lambda执行超时时间:建议设置为10-15秒,避免因数据库查询耗时过长中断流程。
  • 核对SNS Topic ARN:确认账号ID、区域、Topic名称与控制台完全一致。

内容的提问来源于stack exchange,提问作者Dinho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:36:23