Да, автоматизировать такую структуру развертывания вполне возможно. Пока у вас есть код для создания таблицы, должно быть довольно просто получить все данные из старой таблицы, изменить данные, а затем загрузить все это в новую таблицу без каких-либо потерь времени безотказной работы. Если вы напишите, на каком языке вы хотели бы сделать это, я могу помочь немного больше.
Я делал это раньше и добавил ниже небольшой обобщенный пример кода о том, как вы могли бы сделать это на Java.
Метод Java для создания таблицы с учетом класса типа объекта, хранящегося в динамо:
/**
* Creates a single table with its appropriate configuration (CreateTableRequest)
*/
public void createTable(Class tableClass) {
DynamoDBMapper mapper = createMapper(); // you'll need your own function to do this.
ProvisionedThroughput pt = new ProvisionedThroughput(1L, 1L);
CreateTableRequest ctr = mapper.generateCreateTableRequest(tableClass);
ctr.withProvisionedThroughput(new ProvisionedThroughput(1L, 1L));
// Provision throughput and configure projection for secondary indices.
if (ctr.getGlobalSecondaryIndexes() != null) {
for (GlobalSecondaryIndex idx : ctr.getGlobalSecondaryIndexes()) {
if (idx != null) {
idx.withProvisionedThroughput(pt).withProjection(new Projection().withProjectionType("ALL"));
}
}
}
TableUtils.createTableIfNotExists(client, ctr);
}
Метод Java для удаления таблицы:
private static void deleteTable(String tableName) {
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();
DynamoDB dynamoDB = new DynamoDB(client);
Table table = dynamoDB.getTable(tableName);
try {
System.out.println("Issuing DeleteTable request for " + tableName);
table.delete();
System.out.println("Waiting for " + tableName + " to be deleted...this may take a while...");
table.waitForDelete();
}
catch (Exception e) {
System.err.println("DeleteTable request failed for " + tableName);
System.err.println(e.getMessage());
}
}
Я просматривал всю таблицу и помещал все содержимое в список, а затем отображал этот список, преобразовывая объекты в ваш новый тип, а затем создавал новую таблицу этого типа, но с другим именем, проталкивал все ваши новые объекты, а затем удалите старую таблицу после переключения любых ссылок, которые у вас могут быть из старой таблицы, на новую. К сожалению, это означает, что все, что потребляет ваши таблицы, должно иметь возможность переключаться между двумя промежуточными таблицами.
person
John Gallagher
schedule
04.05.2017