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

API Gateway集成Lambda返回{"message":"Not Found"}求解决及功能优化

API Gateway集成Lambda问题排查+代码优化方案

一、先解决"Not Found"错误

这个报错大概率是API Gateway配置的问题,按以下步骤排查:

  • 核对资源路径:你配置的API资源(比如/sum)和实际调用的URL路径必须完全一致,别写错路径
  • 检查方法绑定:POST/GET方法有没有正确关联到你的Lambda函数,集成请求里的Lambda函数要选对;同时要确保API Gateway有调用Lambda的权限——得给API Gateway添加AWSLambdaRole权限
  • 确认API是否部署:API Gateway创建后必须部署到某个阶段(比如prod)才能对外访问,没部署直接调用肯定返回Not Found
  • 检查Lambda权限:Lambda的执行角色得有对应的权限,比如用SES发邮件的话,要给角色加SES发送权限

二、优化Lambda代码:浏览器显示结果+保留发邮件功能

根据你提供的代码截图,我给你调整成同时支持GET/POST、浏览器直接显示结果还能保留发邮件功能的版本(以Python为例,是Lambda最常用的开发语言):

import json
import boto3

def lambda_handler(event, context):
    # 处理GET和POST请求的参数获取
    if event['httpMethod'] == 'GET':
        # GET请求从URL参数中提取num1和num2
        params = event.get('queryStringParameters', {})
        num1 = float(params.get('num1', 0))
        num2 = float(params.get('num2', 0))
    elif event['httpMethod'] == 'POST':
        # POST请求从JSON Body中提取参数
        try:
            body = json.loads(event['body']) if event['body'] else {}
        except:
            return {
                'statusCode': 400,
                'headers': {'Content-Type': 'text/html'},
                'body': '<h1>POST请求格式错误,请传入合法JSON数据</h1>'
            }
        num1 = float(body.get('num1', 0))
        num2 = float(body.get('num2', 0))
    else:
        return {
            'statusCode': 400,
            'headers': {'Content-Type': 'text/html'},
            'body': '<h1>仅支持GET和POST请求</h1>'
        }
    
    # 计算两数之和
    sum_result = num1 + num2
    
    # 发送邮件(基于AWS SES,需提前配置验证邮箱和权限)
    ses = boto3.client('ses', region_name='你的AWS区域,比如us-east-1')
    email_status = '邮件发送成功'
    try:
        ses.send_email(
            Source='你的发件邮箱@example.com',
            Destination={'ToAddresses': ['收件邮箱@example.com']},
            Message={
                'Subject': {'Data': f'两数求和结果通知'},
                'Body': {'Text': {'Data': f'数字{num1}和{num2}的和为:{sum_result}'}}
            }
        )
    except Exception as e:
        email_status = f'邮件发送失败:{str(e)}'
    
    # 返回HTML格式响应,浏览器打开可直接查看结果
    html_content = f'''
    <html>
        <body style="font-family: Arial, sans-serif; margin: 20px;">
            <h2>两数求和结果</h2>
            <p>输入数字1:{num1}</p>
            <p>输入数字2:{num2}</p>
            <p style="font-size: 18px; color: #2ecc71;">求和结果:<strong>{sum_result}</strong></p>
            <p>邮件状态:{email_status}</p>
        </body>
    </html>
    '''
    
    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'text/html'},
        'body': html_content
    }

代码说明

  • 兼容GET/POST请求:GET请求直接在URL后拼接?num1=5&num2=3即可测试,POST请求可通过Postman等工具传递JSON格式参数
  • 浏览器友好:返回HTML格式响应,打开API链接就能看到排版清晰的结果,无需解析JSON
  • 错误处理:对非法请求格式、不支持的请求方法返回明确的错误提示
  • 保留邮件功能:基于AWS SES实现,需替换成你自己的邮箱和AWS区域,同时给Lambda执行角色添加SES发送权限

三、验证步骤

  1. 重新部署API Gateway到你的目标阶段(比如prod)
  2. 浏览器测试GET请求:直接访问https://你的API ID.execute-api.你的区域.amazonaws.com/prod/你的资源路径?num1=5&num2=3,查看页面显示结果和邮件发送状态
  3. 工具测试POST请求:用Postman发送POST请求到上述URL,Body选择JSON格式并传入参数,验证结果
  4. 排查日志:如果仍有问题,前往CloudWatch查看Lambda和API Gateway的日志,里面会显示具体错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:04:53