Как динамически установить имя таблицы в DynamodB, используя без сервера и DynamoDBContext? - PullRequest
0 голосов
/ 20 сентября 2018

Нам нужно установить имя таблицы в зависимости от среды сборки.Рассмотрим следующий класс:

[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 (здесь уже есть решение Как динамически изменить имя таблицы DynamodB в C # с использованием модели персистентности объекта )

Что-то подобное в Java: https://medium.com/@onclouds/aws-lambda-use-different-dynamodb-tables-for-different-stages-5eda9f5378b2

1 Ответ

0 голосов
/ 21 сентября 2018

Нашел решение, передав префикс имени таблицы:

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://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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...