IaC 下的数据库配置实践

Database provisioning practices under IaC

我正在开发一个项目,该项目包含一个 api 应用程序(AWS API 网关 + AWS Lambda)和一个数据库 (AWS DynamoDB)。我使用 Terraform 和 GitLab CI 来自动部署这个项目。当我修改 API 网关配置或 Lambda 功能来修复错误时,我需要通过执行 terraform apply 重新部署整个系统(可能包括 DynamoDB)。这可能会导致数据丢失,因为可能会重新创建 DynamoDB。我想在不更改 CI/CD 管道中的数据库的情况下发布新版本 api。我的理解,terraform apply -target=xxx适合小系统,不适合复杂系统。

我想知道是否有使用 IaC 进行数据库配置的最佳实践。单独处理数据库并在完全不同的系统中进行跟踪是否更好?我是否需要在我的 CI/CD 管道中实施数据库备份和迁移?

通常在使用 IaC 时,数据库不会像应用程序部署那样频繁修改。即使当您部署(更新)Lambda + API-Gateway 时,您也不会接触 DB,并且 terraform apply 不应修改 App 层和数据层之间的“连接”。即使是这样,尽量不要“重新创建”数据库并从 IaC 本身传递所有配置。

如果您的用例必须销毁数据库并重新创建,那么您必须在某处自动备份数据并在配置后将其加载到数据库中。这很快就会成为背部疼痛。重新创建数据库并不理想,备份需要时间,重新加载数据成本高(数据传输)且速度慢!

也许您应该重新设计您的 IAC 策略,这样您就不必经常重新创建数据库。更新小配置应该不是问题,因为配置将通过 IaC 传递(应用层到数据库层,反之亦然)