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

使用AWS SAM CLI本地调用Lambda时无法访问DynamoDB问题咨询

解决SAM Local Invoke访问DynamoDB时的ResourceNotFoundException问题

这不是预期行为,本地调用时出现这个错误,通常是因为本地环境和云端环境的DynamoDB访问配置不一致导致的,下面分两种常见场景给出解决方案:

场景1:本地调用时访问云端的真实DynamoDB表

如果你的需求是直接用本地代码调用AWS云端的DynamoDB表,需要检查以下几点:

  • 确保本地的AWS凭证配置正确:本地环境的~/.aws/credentials和~/.aws/config文件要和你部署SAM用的是同一个AWS账号,并且区域设置和表所在区域匹配。你可以在调用时指定profile来明确使用的凭证:
    sam local invoke --profile your-aws-profile
    
  • 确认代码里的区域配置是实际表所在的区域:把代码里的<MY REGION>替换成具体的区域值,比如'us-east-1',避免占位符导致区域不匹配。
  • 检查本地凭证的权限:确保你的本地AWS用户拥有访问example-table的权限(比如和template里的DynamoDBCrudPolicy类似的权限)。

场景2:本地调用时使用离线DynamoDB实例(推荐用于开发测试)

如果想完全离线测试,不依赖云端服务,可以用本地DynamoDB容器:

  1. 启动本地DynamoDB容器:用Docker运行官方的DynamoDB本地镜像:
    docker run -d -p 8000:8000 amazon/dynamodb-local
    
  2. 配置函数指向本地DynamoDB:
    你可以直接在代码里指定端点,或者通过环境变量配置(更灵活,不用修改代码):
    • 方式一:修改代码添加端点配置
      const dynamo = new AWS.DynamoDB.DocumentClient({
        endpoint: 'http://localhost:8000',
        region: '<MY REGION>'
      })
      
    • 方式二:在template.yaml里添加环境变量
      Resources:
        ExampleFunction:
          Type: AWS::Serverless::Function
          Properties:
            Handler: index.handler
            Runtime: nodejs12.x
            Environment:
              Variables:
                DYNAMODB_ENDPOINT: http://localhost:8000
            Policies:
              - DynamoDBCrudPolicy: TableName: 'example-table'
      
      然后代码里读取环境变量:
      const dynamo = new AWS.DynamoDB.DocumentClient({
        endpoint: process.env.DYNAMODB_ENDPOINT || undefined,
        region: '<MY REGION>'
      })
      
  3. 在本地创建测试表:用AWS CLI命令在本地DynamoDB中创建和云端结构一致的example-table:
    aws dynamodb create-table \
      --table-name example-table \
      --attribute-definitions AttributeName=id,AttributeType=S \
      --key-schema AttributeName=id,KeyType=HASH \
      --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
      --endpoint-url http://localhost:8000
    
    (注意替换成你实际表的属性定义和键架构)

为什么部署到AWS后能正常运行?

部署到AWS后,Lambda函数运行在AWS托管环境中:

  • 会自动使用你在template.yaml中配置的DynamoDBCrudPolicy权限,拥有访问指定DynamoDB表的权限。
  • Lambda默认会使用所在区域的DynamoDB服务,不需要额外配置端点,所以能正常访问同区域的表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:57:39