Как динамически установить имя таблицы в DynamodB, используя без сервера и DynamoDBContext?

2

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

[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

  • 1
    Вы на самом деле задали вопрос? Как задать ваши вопросы читается как набор требований
  • 0
    да, просто отредактируйте заголовок, чтобы отразить это. Благодарю.
Теги:
amazon-web-services
amazon-dynamodb

1 ответ

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню