我正在尝试创建一个Lambda函数(Python 3.6),该函数将一些内容写入DynamoDB。目前,我只是想让世界变得更好。但是,无论何时我实际上尝试用发电机执行某些操作,而不仅仅是连接到桌子,我的Lambda函数都会超时。你能请教吗?
以下是一些相关信息:
AWSLambdaDynamoDBExecutionRole
和AmazonDynamoDBFullAccess
添加到Lambda函数使用的IAM角色中。注意:我对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
预先感谢您的帮助!
答案 0 :(得分:0)
如果在VPC内配置了lambda函数,则由您决定是否提供与DynamoDB AWS服务的连接。
对于DynamoDB,最简单的方法是为DynamoDB创建VPC端点:
程序:
aws ec2 create-vpc-endpoint --vpc-id vpc-xxxxx --service-name com.amazonaws.us-east-2.dynamodb --route-table-ids rtb-xxxxx
或者您可以执行same procedure via the AWS Console。
当心:如果您删除了允许所有传出流量的安全组默认出口规则,则需要添加一个安全组出站规则,其目的地为VPC端点的引用(即:pl -43a43c1)
此后,假设Lambda函数已连接到正确的VPC,具有正确路由的子网(包括VPC端点路由)以及在有权访问VPC端点的安全组中,则Lambda函数应该能够与DynamoDB通信
在lambda函数中使用的代码示例:
import boto3
dynamodb_client = boto3.client('dynamodb', endpoint_url="http://dynamodb.us-east-2.amazonaws.com")