在本地调用函数时,AWS SAM CLI 无法访问 Dynamo DB

AWS SAM CLI cannot access Dynamo DB when function is invoked locally

我正在使用 aws-sam-cli 构建 AWS lambda。在函数中,我想访问某个DynamoDB table。 我的问题是,当我使用 sam local invoke 命令在本地调用该函数时,该函数返回此错误:ResourceNotFoundException: Requested resource not found

const axios = require('axios')
const AWS = require('aws-sdk')
AWS.config.update({region: <MY REGION>})
const dynamo = new AWS.DynamoDB.DocumentClient()

exports.handler = async (event) => {
  const scanParams = {
    TableName: 'example-table'
  }
  const scanResult = await dynamo.scan(scanParams).promise().catch((error) => {
    console.log(`Scan error: ${error}`)
    // => Scan error: ResourceNotFoundException: Requested resource not found
  })

  console.log(scanResult)
}

但是,如果我实际上 sam deploy 它到 AWS 并在实际的 Lambda 控制台中测试它,它会正确记录 table 信息。

{
  Items: <TABLE ITEMS>,
  Count: 1,
  ScannedCount: 1
}

这是预期的行为吗?或者我需要做一些额外的配置才能在本地工作吗?我的 template.yaml 看起来像这样:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: 'Example SAM stack'
Resources:
  ExampleFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs12.x
      Policies:
      - DynamoDBCrudPolicy:
          TableName: 'example-table'

我相信当您在本地调用 Lambda 时,SAM 无法识别将哪个配置文件用于远程资源,例如:DynamoDB

尝试为您的远程 dynamoDB 传递凭据配置文件

例如:

sam local invoke --profile default

您可以在此处查看命令文档:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-local-invoke.html