Нам нужно иметь возможность устанавливать имя таблицы на основе среды сборки. Рассмотрим следующий класс:
[DynamoDBTable("movies")]
public class Movie
{
[DynamoDBHashKey]
public string Title { get; set; }
[DynamoDBRangeKey(AttributeName = "Released")]
public DateTime ReleaseDate { get; set; }
public List<string> Genres { get; set; }
}
В serverless.yml
может быть указано имя таблицы следующим образом:
functions:
update-movies:
environment:
tableName: movies-prod
Затем в коде мы можем динамически загружать имя таблицы на основе имени таблицы в переменной tableName. Мы предпочитаем использовать DynamoDBContext
а не DynamoDBv2.DocumentModel
(у которого уже есть решение здесь. Как динамически изменять tablename dynamodb в С# с использованием модели сохранения объектов)
Что-то вроде этого в Java: https://medium.com/@onclouds/aws-lambda-use-different-dynamodb-tables-for-different-stages-5eda9f5378b2
Найден решение, передав префикс имени таблицы:
DynamoDBContextConfig config = new DynamoDBContextConfig()
{
TableNamePrefix = "prod-"
};
_dynamoDBContext = new DynamoDBContext(new AmazonDynamoDBClient(), config);
Вы все равно должны называть свои столовые movies
:
[DynamoDBTable("movies")]
public class Movie
DynamoDBContext
добавит префикс к имени таблицы при загрузке контекста. Поэтому он попытается загрузить prod-movies
stag-movies
.
Здесь используется префикс таблицы в AWS SDK
if (!string.IsNullOrEmpty(flatConfig.TableNamePrefix))
tableName = flatConfig.TableNamePrefix + tableName;
Некоторые рекомендации, которые помогли мне найти решение:
https://aws.amazon.com/blogs/developer/enhancements-to-the-dynamodb-sdk/