AWS SAM CLI не может получить доступ к DB Dynamo, когда функция вызывается локально - PullRequest
0 голосов
/ 09 февраля 2020

Я строю AWS лямбду с aws -sam-cli . В этой функции я хочу получить доступ к определенной таблице DynamoDB. Моя проблема в том, что функция возвращается с этой ошибкой, когда я вызываю ее локально с помощью команды 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, это регистрирует информацию таблицы правильно.

{
  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'

1 Ответ

0 голосов
/ 10 февраля 2020

Я полагаю, что когда вы вызываете 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...