Tun*_*yen 6 c# amazon-web-services amazon-dynamodb
我们需要能够根据构建环境设置表名。考虑以下类:
[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; }
}
Run Code Online (Sandbox Code Playgroud)
在serverless.yml,表名可以这样设置:
functions:
update-movies:
environment:
tableName: movies-prod
Run Code Online (Sandbox Code Playgroud)
然后在代码中我们可以根据tableName变量中的表名动态加载表名。我们更喜欢使用DynamoDBContext而不是DynamoDBv2.DocumentModel(这里已经有了解决方案How do I dynamic change dynamodb tablename in c# using object persistence model)
在 Java 中是这样的:https : //medium.com/@onclouds/aws-lambda-use-different-dynamodb-tables-for-different-stages-5eda9f5378b2
Tun*_*yen 13
通过传递表名前缀找到了解决方案:
DynamoDBContextConfig config = new DynamoDBContextConfig()
{
TableNamePrefix = "prod-"
};
_dynamoDBContext = new DynamoDBContext(new AmazonDynamoDBClient(), config);
Run Code Online (Sandbox Code Playgroud)
不过,您仍然必须为您的表命名movies:
[DynamoDBTable("movies")]
public class Movie
Run Code Online (Sandbox Code Playgroud)
DynamoDBContext加载上下文时将前缀添加到表名。所以它会尝试加载prod-movies, stag-movies.
这是 AWS SDK 内部使用表前缀的地方
if (!string.IsNullOrEmpty(flatConfig.TableNamePrefix))
tableName = flatConfig.TableNamePrefix + tableName;
Run Code Online (Sandbox Code Playgroud)
一些帮助我找到解决方案的参考资料:
https://aws.amazon.com/blogs/developer/enhancements-to-the-dynamodb-sdk/
| 归档时间: |
|
| 查看次数: |
3324 次 |
| 最近记录: |