Используйте DynamoDB с функцией Alexa Lambda

Что ж, у меня проблема, с которой я работал последние 2 дня, и, похоже, до сих пор не могу решить ее.

По сути, я пытаюсь развить навык для эхо-точки Amazon, но мой конкретный навык требует использования постоянных данных. Я просмотрел документацию и нашел информацию о привязке учетных записей и DynamoDB, привязка учетных записей казалась сложной для простого исследовательского проекта, поэтому я выбрал DynamoDB.

Я использовал лямбда-функцию, и она работала нормально, пока я не поместил строку таблицы DynamoDB:

alexa.dynamoDBTableName = 'rememberThisDB';

Эта строка полностью останавливает мой навык и возвращает следующее сообщение:

The remote endpoint could not be called, or the response it returned was invalid.

Я, честно говоря, понятия не имею, как с этим бороться; Я совершенно не знаком со всей концепцией AWS, поэтому я даже не знаю, как получить фактическое сообщение об ошибке, возвращаемое функцией Lambda.

Я изменил роль и дал ей следующую конфигурацию:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:Scan",
                "dynamodb:UpdateItem"
            ],
            "Resource": "*Yes, I did put the correct ARN*"
        }
  ]
}

Но на самом деле это ничего не изменило, а просто вернуло ту же ошибку.

Проблема в том, что я вообще ничего не делаю с DynamoDB, я просто определяю свойство dynamoDBTableName объекта alexa, вот и все.

Да, таблица DynamoDB существует.

Я чувствую, что моя голова вот-вот взорвется, поэтому я буду благодарен за любую помощь.

ОБНОВЛЕНИЕ: узнал, как просматривать журналы, вот последний журнал: Error fetching user state: ValidationException: The provided key element does not match the schema, не уверен, почему он выдает эту ошибку, поскольку я никогда ничего не запрашивал, единственное, что я сделал, - это объявил имя таблицы.


person CristianHG    schedule 25.02.2017    source источник
comment
Какая схема у вашей таблицы? Предполагая, что вы используете alexa-skills-kit-sdk-for-nodejs, в вашей таблице должен быть единственный userId строковый HASH-ключ.   -  person idbehold    schedule 25.02.2017
comment
Только что проверил, и у меня был id первичный индекс, но не userId, после добавления он снова начал работать. Я не видел, чтобы это было задокументировано в Readme. Спасибо тебе большое, ты спасатель жизни   -  person CristianHG    schedule 25.02.2017
comment
Привет, Александр, у меня такая же проблема. Вы нашли для этого решение? :)   -  person Anna K    schedule 05.05.2017


Ответы (1)


Просто чтобы задокументировать решение вопроса в комментариях и чтобы этот вопрос не остался «без ответа» на SO:

Предполагая, что вы используете alexa-skills-kit-sdk-for-nodejs, в вашей таблице должен быть один хэш-ключ строки userId.

var newTableParams = {
    AttributeDefinitions: [
        {
            AttributeName: 'userId',
            AttributeType: 'S'
        }
    ],
    KeySchema: [
        {
            AttributeName: 'userId',
            KeyType: 'HASH'
        }
    ],
    ProvisionedThroughput: {
        ReadCapacityUnits: 5,
        WriteCapacityUnits: 5
    }
}

Оказалось, что у пользователя не было соответствующей настройки схемы для своей таблицы DynamoDB.

person idbehold    schedule 25.02.2017