【发布时间】:2020-07-02 15:36:34
【问题描述】:
我正在 AWS Lambda 服务上使用 java 和 spring-boot 开发一个 Web 应用程序。 我正在设计它以拥有一个数据库服务。这将是 Entity(table) 和 JPARepositories 类的集合。因此,如果我需要更改任何数据库架构,我只需在此服务中进行更改即可。
将通过 API 网关公开的其他服务将使用此数据库服务作为 Lambda 层。
parent-project
|
|---database-service
|
|---API-service1
|
|---API-service2
...
问题是我需要在部署任何 Lambda 服务之前创建表。这样这个 API-Services 就可以使用它们。解决此问题的一种方法是将数据库服务部署为 Lambda 函数并调用该函数,该函数将调用如下方法来创建所有表。
@SpringBootApplication
public class DatabaseServiceApplication implements CommandLineRunner {
private DynamoDBMapper dynamoDBMapper;
private final AmazonDynamoDB amazonDynamoDB;
public DatabaseServiceApplication(AmazonDynamoDB amazonDynamoDB) {
this.amazonDynamoDB = amazonDynamoDB;
}
public static void main(String[] args) {
SpringApplication.run(DatabaseServiceApplication.class, args);
}
@Override
public void run(String... strings) {
dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB);
CreateTableRequest tableRequest = dynamoDBMapper
.generateCreateTableRequest(Association.class);
tableRequest.setProvisionedThroughput(
new ProvisionedThroughput(1L, 1L));
TableUtils.createTableIfNotExists(amazonDynamoDB, tableRequest);
}
}
或者使用脚本来创建表格。我不确定哪个是更好的选择,或者有没有更好的选择。
如果有人以前遇到过这个问题并解决了它,谁能给我建议?
【问题讨论】:
-
您如何管理部署?如果您使用的是 CloudFormation 或 Terraform 之类的东西,您可以使用它为您创建 DynamoDB 表,而不是依赖 Java 代码来执行此操作。
-
我正在使用 Terraform 部署我的 Lambda 函数并与 api-gateway 集成。
-
@MarkB - 你能建议我一种方法,我可以依靠我的 java 代码而不是使用脚本来创建表吗?
-
数据库服务是指DynamoDB还是RDS?您提到了架构更改。
-
@LLL - DynamoDB
标签: java amazon-web-services aws-lambda amazon-dynamodb terraform