AWS Lambda переходит в DynamoDB: время ожидания истекло

Я пытаюсь создать лямбда-функцию (Python 3.6), которая будет записывать некоторый контент в DynamoDB. В настоящее время я просто пытаюсь поприветствовать мир. Однако время ожидания моей лямбда-функции истекает всякий раз, когда я действительно пытаюсь сделать что-то с динамо-машиной, помимо простого подключения к таблице. Вы могли бы посоветовать?

Вот некоторая важная информация:

  • Я настроил свою Lambda для работы в VPC (это требование, так как в конечном итоге оно будет запущено Alexa Skills Kit)
  • Моя лямбда и динамо-машина находятся в США-Запад2 (Орегон).
  • Я добавил AWSLambdaDynamoDBExecutionRole и AmazonDynamoDBFullAccess к роли IAM, которая используется функцией Lambda.

Примечание. Я относительно новичок в AWS, поэтому, пожалуйста, простите меня, если я упускаю что-то очевидное.

Вот код:

import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('some_table')

table.put_item(
    Item = {
        'person_id': 1,
        'msg': 'hello world'
    }
)

В приведенном выше коде операторы import, Dynamodb и table выполняются без проблем. Когда я добавляю вызов table.put_item, я получаю сообщение Task timed out. Приведенный выше код основан на https://boto3.readthedocs.io/en/latest/guide/dynamodb.html#using-an-existing-table

Заранее спасибо за помощь!

Alexa Skills Kit не требует, чтобы эта функция была в VPC, поэтому я не уверен, почему вы говорите, что это так. Проблема связана с тем, что вы разместили функцию в подсети VPC без настроенного шлюза NAT или конечной точки DynamoDB VPC. Размещение лямбда-функции в VPC имеет множество недостатков и не должно выполняться, если только функции не требуется доступ к ресурсам VPC.

Mark B 14.07.2018 19:53

Спасибо @MarkB - я добавил VPC, когда планировал перейти с Lambda на RDS, и предполагал, что это требование справедливо для DynamoDB. Я попробую удалить VPC и посмотреть, разрешится ли проблема сама собой.

KingOfTheNerds 14.07.2018 20:39

Спасибо @MarkB - это решило!

KingOfTheNerds 14.07.2018 21:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
642
1

Ответы 1

Если внутри VPC предоставляется лямбда-функция, вы должны предоставить возможность подключения к сервисам DynamoDB AWS.

Для DynamoDB самый простой способ - создать конечную точку VPC для DynamoDB:

  1. Это создаст частный путь для вашего VPC для связи с DynamoDB.
  2. Он также автоматически добавит пользовательский маршрут в вашу основную таблицу маршрутов.

Процедура:

aws ec2 create-vpc-endpoint --vpc-id vpc-xxxxx --service-name com.amazonaws.us-east-2.dynamodb --route-table-ids rtb-xxxxx

Или вы можете выполнить та же процедура через Консоль AWS.

Остерегаться: если вы удалили правило выхода по умолчанию для группы безопасности, которое разрешает весь исходящий трафик, вам необходимо добавить правило исходящего трафика группы безопасности с адресом назначения, указанным в конечной точке VPC (например, pl-43a43c1)

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

Пример кода для использования в лямбда-функции:

import boto3

dynamodb_client = boto3.client('dynamodb', endpoint_url = "http://dynamodb.us-east-2.amazonaws.com")

Другие вопросы по теме