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

通过API Gateway+Lambda调用DynamoDB Scan遇403及端点错误排查

问题分析与解决方案

阶段1:"No valid endpoint provider available" 错误

  • 触发原因:使用AWS SDK v3调用空DynamoDB表的Scan/GetItem命令时,SDK内部端点解析逻辑会抛出该错误,而非返回空结果集。
  • 临时解决:向DynamoDB表填充模拟数据后,错误自动消失。
  • 长期优化:在Lambda函数中添加错误捕获逻辑,针对该错误返回友好空结果,避免触发API Gateway内部错误:
    import { DynamoDBClient, ScanCommand } from "@aws-sdk/client-dynamodb";
    const client = new DynamoDBClient({ region: process.env.AWS_REGION });
    
    export const handler = async (event) => {
      try {
        const command = new ScanCommand({
          TableName: process.env.MOVIE_TABLE,
        });
        const response = await client.send(command);
        return {
          statusCode: 200,
          body: JSON.stringify(response.Items || []),
        };
      } catch (error) {
        console.error("Lambda execution error:", error);
        // 捕获空表导致的端点错误
        if (error.name === "EndpointProviderError") {
          return {
            statusCode: 200,
            body: JSON.stringify([]),
          };
        }
        return {
          statusCode: 500,
          body: JSON.stringify({ message: error.message }),
        };
      }
    };
    

阶段2:Postman调用API返回403 Forbidden(curl/浏览器正常)

以下是几种常见原因及对应解决方式:

1. CORS配置不兼容Postman请求

Postman会自动携带Origin头,若API Gateway未配置对应的CORS规则,会触发403错误。需在SAM模板的Globals中添加完整CORS配置:

Globals:
  Api:
    Cors:
      AllowMethods: "'GET,POST,OPTIONS'"
      AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
      AllowOrigin: "'*'" # 测试环境可临时设为*,生产环境指定具体域名

更新后重新执行sam deploy --guided部署配置。

2. Postman携带了冲突的请求头

  • 若API Gateway未配置认证(授权类型为NONE),检查Postman是否自动添加了Authorization头,可在Postman的"Headers"标签下删除该头后重试。
  • 若使用API Key认证,确保Postman正确添加x-api-key头,且Key值与API Gateway配置一致。

3. 请求方法/路径不匹配

对比curl的请求参数与Postman配置:

  • 确认请求方法(GET/POST)完全一致;
  • 检查API路径是否拼写正确(如是否多了斜杠、大小写错误);
  • 验证查询参数、请求体是否与curl请求一致。

权限验证补充

确认Lambda执行角色的权限策略正确关联到DynamoDB表:

DynamoDBCrudPolicy:
  Type: AWS::IAM::Policy
  Properties:
    PolicyName: DynamoDBCrudPolicy
    PolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Action:
            - dynamodb:Scan
            - dynamodb:GetItem
            - dynamodb:PutItem
            - dynamodb:UpdateItem
            - dynamodb:DeleteItem
          Resource: !GetAtt MovieTable.Arn
    Roles:
      - !Ref LambdaExecutionRole

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:35:34