由 lambda 函数创建的表在 dynamodb 中不可见使用 loclstack 进行测试

问题描述

我创建了一个 lambda 函数,它将在 dynamodb 中创建一个表。 我正在使用 localstack。问题是当使用命令 aws dynamodb list-tables --endpoint-url http://localhost:4566

时,表正在创建但在 dynamodb 中不可见

我的 lambda 函数代码

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

解决方法

  1. 确保 DynamoDB 服务在 localstack 内运行(使用 docker),SERVICES=... 必须包含 dynamodb
  2. 专门用于访问 lambda 函数文档中的 localstack 说明:

将此主机名用作端点(例如, http://${LOCALSTACK_HOSTNAME}:4566) 以访问服务 从您的 Lambda 函数中(例如,将项目存储到 DynamoDB 或来自 Lambda 的 S3)。

您是否能够通过例如与 DynamoDB 进行交互?一个简单的aws --endpoint <localstack-addr> dynamodb list-tables