Ошибка: таблица не была зарегистрирована, в DynamoDB
Получение ошибки, так как таблица не была зарегистрирована при использовании pocodynamo для моей локальной DynamodB. Я пытаюсь выполнить операцию crud, но при вставке данных в локальную таблицу DynamodB я получаю сообщение об ошибке:
System.ArgumentNullException: "Табель не был зарегистрирован: Todo. Имя параметра: таблица"
var awsDb = new AmazonDynamoDBClient("access key", "secret key", new AmazonDynamoDBConfig
{
ServiceURL = "http://localhost:8000",
});
var db = new PocoDynamo(awsDb);
db.InitSchema();
var todos = 100.Times(i => new Todo { Content = "TODO " + i, Order = i });
db.PutItems(todos);//getting error on this line
Я уже создал таблицу по:
//AWSSDK
var request = new CreateTableRequest
{
TableName = "Todo",
KeySchema = new List<KeySchemaElement>
{
new KeySchemaElement("Id", KeyType.HASH),
},
AttributeDefinitions = new List<AttributeDefinition>
{
new AttributeDefinition("Id", ScalarAttributeType.N),
},
ProvisionedThroughput = new ProvisionedThroughput
{
ReadCapacityUnits = 10,
WriteCapacityUnits = 5,
}
};
awsDb.CreateTable(request);
Убедитесь, что таблица создана и находится в активном состоянии:
var startAt = DateTime.UtcNow;
var timeout = TimeSpan.FromSeconds(60);
do
{
try
{
var descResponse = awsDb.DescribeTable("Todo");
if (descResponse.Table.TableStatus == DynamoStatus.Active)
{
Console.WriteLine("table Todo is Active");
break;
}
Thread.Sleep(TimeSpan.FromSeconds(2));
}
catch (ResourceNotFoundException)
{
Console.WriteLine("resource not found");
// DescribeTable is eventually consistent. So you might get resource not found.
}
if (DateTime.UtcNow - startAt > timeout)
throw new TimeoutException("Exceeded timeout of {0}".Fmt(timeout));
} while (true);
0 ответов
Проблема была не в коде, а в экземпляре DynamoDB. Я использовал загруженную локальную базу данных DynamoDB и запустил ее из командной строки в соответствии с документацией DynamoDB. Однако, когда я проверил AWS Explorer в Visual Studio, он сказал, что экземпляр был остановлен. Итак, окончательное решение сработало для меня: 1. Если DynamoDB был запущен вручную, остановите его! 2. Убедитесь, что порт 8000 свободен. 3. Запустите DynamoDB из AWS Explorer. Готово..!
Чтобы запустить DynamoDB из AWS Explorer: 1. Откройте AWS Explorer 2. Выберите локальный (localhost) в раскрывающемся списке "Регион" 3. Щелкните правой кнопкой мыши Amazon DynamoDB и выберите "Подключиться к локальному DynamoDB" 4. Отметьте "Запустить новый локальный процесс DynamoDB". 5. Установите последнюю версию 6. Убедитесь, что путь к java правильный (если java не установлена, установите его) 7. Нажмите кнопку OK