Таблица, созданная лямбда-функцией, не отображается в Dynamodb. Использование loclstack для тестирования

Я создал лямбда-функцию, которая создаст таблицу в Dynamodb. Я использую localstack. Проблема в том, что таблица создается, но не отображается в Dynamodb при использовании команды aws Dynamodb list-tables --endpoint-url http: // localhost: 4566

мой код лямбда-функции:

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'
            },
            {
                'AttributeName': 'title',
                'AttributeType': 'S'
            },

        ],
        ProvisionedThroughput={
            'ReadCapacityUnits': 10,
            'WriteCapacityUnits': 10
        }
    )
    print("Table status:", movie_table.table_status)

Также получение EndpointConnectionError, если указано значение endpoint-url = http: // localhost: 4566

template.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

person Shobhna Dhami    schedule 10.05.2021    source источник


Ответы (1)


  1. Убедитесь, что служба DynamoDB работает внутри локального стека (с помощью докера), SERVICES=... должен включать dynamodb
  2. Специально для доступа к localstack внутри документации лямбда-функции говорится следующее:

Используйте это имя хоста в качестве конечной точки (например, http: // $ {LOCALSTACK_HOSTNAME}: 4566) для доступа к службам из ваших функций Lambda (например, для сохранения элемента в DynamoDB или S3 из Lambda).

Можете ли вы взаимодействовать с DynamoDB, например, простой aws --endpoint <localstack-addr> dynamodb list-tables?

person Sjoukedv    schedule 12.05.2021
comment
Да, я могу взаимодействовать с Dynamodb, но таблица не отображается, когда я пытаюсь взаимодействовать с Dynamodb через лямбда. Хотя lmbda может создавать таблицы и вставлять данные, когда они не видны, когда я запускаю aws --endpoint ‹localstack-addr› таблицы списка Dynamodb - person Shobhna Dhami; 30.05.2021
comment
@ShobhnaDhami, у вашей лямбды также есть обработка ошибок для команды создания таблицы? Запуск лямбда-выражения может быть успешным без фактического выполнения команды должным образом. Возможно, вы можете привести этот пример попробуйте проверить, будет ли в списке указана таблица «Музыка». В этом случае DynamoDB должен работать правильно. - person Sjoukedv; 31.05.2021
comment
@Sjoukdev Я попробовал, и да, таблица отображается, когда я использую cli, но когда таблица создается с помощью кода, она не отображается в списке таблиц. - person Shobhna Dhami; 06.06.2021
comment
Ладно, странно. Я предполагаю, что ваше последнее средство создает проблему на github - person Sjoukedv; 07.06.2021