Как исправить блокировку DynamoDB JS API и отключить функцию Lambda? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь получить доступ к AWS DynamoDB из функции Lambda. Когда я вызываю функцию сканирования клиента документа, используя обещание, она никогда не возвращается, даже когда я увеличиваю время ожидания функции до целой минуты.

Я использую платформу Serverless, узел 8.10, и я настроил "iamRoleStatements", чтобы разрешить DynamodB и ARN таблицы.

serverless.yml:

provider:
  name: aws
  runtime: nodejs8.10
  timeout: 6
  region: us-east-1
  iamRoleStatements:
    - Effect: Allow
      Action:
        - dynamodb:*
      Resource: "[arn from dynamodb]"

handler.js:

const dynamodb = new AWS.DynamoDB.DocumentClient()
...
...
...
    try {
      console.log('dynamodb go')
      attributes = await dynamodb.scan(queryParams).promise()
      console.log('dynamodb success')
      console.log(attributes)
    } catch (err) {
      console.log('dynamodb error')
    }

Я ожидаю, что в консоли появится «DynamodB Go», а затем «DynamodB Success» или даже «DynamoDB Error». Тем не менее, после печати «DynamodB Go» функция зависает и заканчивается тайм-аут. Я делаю обещание как-то неправильно? Кажется, это должен быть правильный формат, основанный на том, что я видел.

1 Ответ

0 голосов
/ 16 января 2019

Похоже, что ваша лямбда-функция не может подключиться к DynamoDB. Обычно это вызвано одной причиной - вы запускаете функцию Lambda в VPC, а функция Lambda не имеет жизнеспособного маршрута к DynamoDB (через общедоступный Интернет или через DynamoDB через частную конечную точку VPC).

Предположительно, вы запускаете свою функцию Lambda внутри VPC, чтобы она могла получить доступ к вашей частной базе данных RDS, которая иначе не была бы доступна через общедоступный Интернет.

У вас есть несколько вариантов:

  1. предоставляет доступ к Интернету функции Lambda , чтобы он мог подключаться к DynamoDB через общедоступный Интернет
  2. добавить конечную точку VPC для DynamoDB к VPC, чтобы он мог достичь DynamoDB в частном порядке

Обратите внимание, что оба протокола работают по протоколу TLS, поэтому они безопасны. Решение заключается в том, разрешить ли функции Lambda беспрепятственный исходящий доступ к Интернету (# 1) или ограничить ее DynamoDB (# 2).

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