Я пытаюсь создать лямбда-функцию (Python 3.6), которая будет записывать некоторый контент в DynamoDB. В настоящее время я просто пытаюсь поприветствовать мир. Однако время ожидания моей лямбда-функции истекает всякий раз, когда я действительно пытаюсь сделать что-то с динамо-машиной, помимо простого подключения к таблице. Вы могли бы посоветовать?
Вот некоторая важная информация:
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
Заранее спасибо за помощь!
Спасибо @MarkB - я добавил VPC, когда планировал перейти с Lambda на RDS, и предполагал, что это требование справедливо для DynamoDB. Я попробую удалить VPC и посмотреть, разрешится ли проблема сама собой.
Спасибо @MarkB - это решило!





Если внутри VPC предоставляется лямбда-функция, вы должны предоставить возможность подключения к сервисам DynamoDB AWS.
Для DynamoDB самый простой способ - создать конечную точку VPC для DynamoDB:
Процедура:
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")
Alexa Skills Kit не требует, чтобы эта функция была в VPC, поэтому я не уверен, почему вы говорите, что это так. Проблема связана с тем, что вы разместили функцию в подсети VPC без настроенного шлюза NAT или конечной точки DynamoDB VPC. Размещение лямбда-функции в VPC имеет множество недостатков и не должно выполняться, если только функции не требуется доступ к ресурсам VPC.