gpt4 book ai didi

java - 在 AWS Lambda 中创建数据库服务

转载 作者:行者123 更新时间:2023-12-01 19:28:07 24 4
gpt4 key购买 nike

我正在 AWS Lambda 服务上使用 java 和 spring-boot 开发一个 Web 应用程序。我正在将其设计为拥有一项数据库服务。这将是 Entity(table) 和 JPARepositories 类的集合。因此,如果我需要更改任何数据库架构,我只需在此服务中进行更改即可。

将通过 API 网关公开的其他服务将使用此数据库服务作为 Lambda 层。

parent-project 
|
|---database-service
|
|---API-service1
|
|---API-service2
...

问题是我需要在部署任何 Lambda 服务之前创建表。这样 API 服务就可以使用它们。解决此问题的一种方法是将数据库服务部署为 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);
}
}

或者使用脚本来创建表。我不确定哪个是更好的选择,或者是否有更好的选择。

如果有人以前遇到过这个问题并解决了它,有人可以建议我吗?

最佳答案

对我来说,最好的方法是使用 Lambda 冷启动。您的代码需要足够智能,不关心数据库是否已经正确。根据您显示的代码,我会执行以下操作:

public class LambdaExample implements RequestStreamHandler {

// only called on cold start
public LambdaExample() {
dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB);
CreateTableRequest tableRequest = dynamoDBMapper
.generateCreateTableRequest(Association.class);
tableRequest.setProvisionedThroughput(
new ProvisionedThroughput(1L, 1L));
TableUtils.createTableIfNotExists(amazonDynamoDB, tableRequest);
}

public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {
// handle request. this lambda type requires reading the inputStream
// yourself but use whatever you normally have here.
}

如果您使用传统的关系数据库,则可以使用 Flyway反而。它也知道数据库是否已经更新。

请注意,如果您有数千个 Lambda,它们都会调用此函数,从而减慢其中每一个的冷启动速度。这就是为什么@MarkB 建议一个将数据库创建外部化的过程,因为实际上只有第一个启动的 Lambda 才会做任何有用的事情。之后,您会在每个新 Lambda 上浪费一些时间/金钱。

关于java - 在 AWS Lambda 中创建数据库服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60792115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com