lambda python dynamodb 写入出现超时错误
lambda python dynamodb write gets timeout error
我一直在尝试完成我的第一个关于 lambda dynamodb 连接的教程,但 运行 遇到了超时错误。
在 lambda 控制台中,我有以下代码:
from __future__ import print_function
import json
import boto3
print('Loading function')
def lambda_handler(event, context):
dynamodb = boto3.resource('dynamodb', region_name='us-east-1', endpoint_url="http://localhost:8000")
print('Dynamodb loaded')
pages_table = dynamodb.Table('Pages')
print('Pages table referenced')
for item in event:
print('Item: {}'.format(item))
response = pages_table.put_item( Item=item)
print('Response: {}'.format(response))
return "hi"
我已经通过 dynamodb 控制台创建了页面 table。
当我从 lambda 控制台测试 运行 lambda 函数时,我得到:
START RequestId: 4008f77f-3b3e-11e7-ad79-0713f3bd7f4e Version: $LATEST
Dynamodb loaded
Pages table referenced
Item: {'UID': 1, 'id': 1, 'label': 'Original', 'snippet': 'Style', 'type': 'item', '$$hashKey': 'object:4'}
END RequestId: 4008f77f-3b3e-11e7-ad79-0713f3bd7f4e
REPORT RequestId: 4008f77f-3b3e-11e7-ad79-0713f3bd7f4e Duration: 3002.30 ms
Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 36 MB
2017-05-17T20:20:24.159Z 4008f77f-3b3e-11e7-ad79-0713f3bd7f4e Task timed out after 3.00 seconds
我的调试打印语句表明第一个 pages_table.put_item()
是超时发生的地方,因为没有后续的响应打印。 (我的 Item 数组中有几个元素用于测试)
当我检查我的 dynamodb table 时 table 中没有数据,甚至几天后。
我认为我已经准确地遵循了 AWS 文档中创建可通过 lambda 访问的 dynamodb 的所有步骤(IAM 权限、dynamodb table 密钥等),但在搜索其他实例时被难住了类似的超时体验。我能找到的最接近的内容参考了 VPC 配置,但对于教程中的这种基本默认设置,这对我来说似乎没有意义,因为教程没有提到 VPC 设置。此外,当我深入 VPC 控制台时,那里的设置似乎是默认设置。
我错过了什么?
DynamoDB 的端点 URL 似乎不正确:
endpoint_url="http://localhost:8000"
这仅用于 DynamoDB 的本地测试。在 Lambda 函数中,us-east-1 的端点需要是:
endpoint_url="https://dynamodb.us-east-1.amazonaws.com"
根据 AWS Regions and Endpoints 文档。
我一直在尝试完成我的第一个关于 lambda dynamodb 连接的教程,但 运行 遇到了超时错误。
在 lambda 控制台中,我有以下代码:
from __future__ import print_function
import json
import boto3
print('Loading function')
def lambda_handler(event, context):
dynamodb = boto3.resource('dynamodb', region_name='us-east-1', endpoint_url="http://localhost:8000")
print('Dynamodb loaded')
pages_table = dynamodb.Table('Pages')
print('Pages table referenced')
for item in event:
print('Item: {}'.format(item))
response = pages_table.put_item( Item=item)
print('Response: {}'.format(response))
return "hi"
我已经通过 dynamodb 控制台创建了页面 table。
当我从 lambda 控制台测试 运行 lambda 函数时,我得到:
START RequestId: 4008f77f-3b3e-11e7-ad79-0713f3bd7f4e Version: $LATEST
Dynamodb loaded
Pages table referenced
Item: {'UID': 1, 'id': 1, 'label': 'Original', 'snippet': 'Style', 'type': 'item', '$$hashKey': 'object:4'}
END RequestId: 4008f77f-3b3e-11e7-ad79-0713f3bd7f4e
REPORT RequestId: 4008f77f-3b3e-11e7-ad79-0713f3bd7f4e Duration: 3002.30 ms
Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 36 MB
2017-05-17T20:20:24.159Z 4008f77f-3b3e-11e7-ad79-0713f3bd7f4e Task timed out after 3.00 seconds
我的调试打印语句表明第一个 pages_table.put_item()
是超时发生的地方,因为没有后续的响应打印。 (我的 Item 数组中有几个元素用于测试)
当我检查我的 dynamodb table 时 table 中没有数据,甚至几天后。
我认为我已经准确地遵循了 AWS 文档中创建可通过 lambda 访问的 dynamodb 的所有步骤(IAM 权限、dynamodb table 密钥等),但在搜索其他实例时被难住了类似的超时体验。我能找到的最接近的内容参考了 VPC 配置,但对于教程中的这种基本默认设置,这对我来说似乎没有意义,因为教程没有提到 VPC 设置。此外,当我深入 VPC 控制台时,那里的设置似乎是默认设置。
我错过了什么?
DynamoDB 的端点 URL 似乎不正确:
endpoint_url="http://localhost:8000"
这仅用于 DynamoDB 的本地测试。在 Lambda 函数中,us-east-1 的端点需要是:
endpoint_url="https://dynamodb.us-east-1.amazonaws.com"
根据 AWS Regions and Endpoints 文档。