Нам нужно установить имя таблицы в зависимости от среды сборки.Рассмотрим следующий класс:
[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 можно ли задать имя таблицы следующим образом:
serverless.yml
functions: update-movies: environment: tableName: movies-prod
Затем в коде мы можем динамически загрузить имя таблицы на основеимя таблицы в переменной tableName.Мы предпочитаем использовать DynamoDBContext вместо DynamoDBv2.DocumentModel (здесь уже есть решение Как динамически изменить имя таблицы DynamodB в C # с использованием модели персистентности объекта )
DynamoDBContext
DynamoDBv2.DocumentModel
Что-то подобное в 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, хотя:
movies
[DynamoDBTable("movies")] public class Movie
DynamoDBContext добавит префикск имени таблицы при загрузке контекста.Поэтому он попытается загрузить prod-movies, stag-movies.
prod-movies
stag-movies
. Здесь префикс таблицы используется внутри AWS SDK для внутреннего использования
if (!string.IsNullOrEmpty(flatConfig.TableNamePrefix)) tableName = flatConfig.TableNamePrefix + tableName;
(https://github.com/aws/aws-sdk-net/blob/b691e46e57a3e24477e6a5fa2e849da44db7002f/sdk/src/Services/DynamoDBv2/Custom/DataModel/ContextInternal.cs)
Некоторые ссылки, которые помогли мне найти решение:
https://aws.amazon.com/blogs/developer/enhancements-to-the-dynamodb-sdk/
https://github.com/aws/aws-sdk-net/blob/b691e46e57a3e24477e6a5fa2e849da44db7002f/sdk/test/Services/DynamoDBv2/UnitTests/Custom/DynamoDBTests.cs