问题描述
我创建了一个 lambda 函数,它将在 dynamodb 中创建一个表。 我正在使用 localstack。问题是当使用命令 aws dynamodb list-tables --endpoint-url http://localhost:4566
时,表正在创建但在 dynamodb 中不可见dynamodb = boto3.resource('dynamodb',aws_access_key_id='',aws_secret_access_key='',endpoint_url="http://<ip address>:4566")
def lambda_handler(event,context):
movie_table = dynamodb.create_table(
TableName='Movies',KeySchema=[
{
'AttributeName': 'year','KeyType': 'HASH' # Partition key
},{
'AttributeName': 'title','KeyType': 'RANGE' # Sort key
}
],AttributeDeFinitions=[
{
'AttributeName': 'year','AttributeType': 'N'
},'AttributeType': 'S'
},],ProvisionedThroughput={
'ReadCapacityUnits': 10,'WriteCapacityUnits': 10
}
)
print("Table status:",movie_table.table_status)
如果给出 endpoint-url= http://localhost:4566 的值,也会得到 EndpointConnectionError
模板.yaml
AWstemplateFormatVersion: '2010-09-09'
Description: >
AWS
Sample SAM Template for AWS
# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
Function:
Timeout: 60
Resources:
AddItem:
Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: dynamodbAddItem/
Handler: app.lambda_handler
Runtime: python3.7
解决方法
- 确保 DynamoDB 服务在 localstack 内运行(使用 docker),
SERVICES=...
必须包含dynamodb
- 专门用于访问 lambda 函数文档中的 localstack 说明:
将此主机名用作端点(例如, http://${LOCALSTACK_HOSTNAME}:4566) 以访问服务 从您的 Lambda 函数中(例如,将项目存储到 DynamoDB 或来自 Lambda 的 S3)。
您是否能够通过例如与 DynamoDB 进行交互?一个简单的aws --endpoint <localstack-addr> dynamodb list-tables
?