我正在从事一个由api应用程序( application + AWS )和数据库(AWS )组成的项目。我使用Terraform和GitLab CI来自动化这个项目的部署。当我修改API配置或Lambda函数以修复bug时,我需要通过执行DynamoDB重新部署整个系统(可能包括terraform apply
)。这可能会导致数据丢失,因为DynamoDB可能会被重新创建。我想在不改变CI/CD管道数据库的情况下发布一个新版本的api。据我理解,terraform apply -target=xxx
适用于小型系统,但不适合复杂系统。
我想知道是否有使用IaC提供数据库的最佳实践。在一个完全不同的系统中分别对待数据库和跟踪数据库更好吗?是否需要在CI/CD管道中实现数据库备份和迁移?
发布于 2022-01-18 09:36:22
通常,在使用IaC时,数据库并不像应用程序部署那样频繁地被修改。即使在部署(更新) Lambda +API时,您也没有接触到DB,terraform apply
也不应该修改应用程序层和数据层之间的“连接”。即使是这样,也不要试图“重新创建”数据库,并传递来自IaC本身的所有信任。
如果您的用例必须破坏数据库并重新创建,那么您必须在某个地方自动备份数据,并在提供之后将其加载到DB中。这很快就会让人感到背部疼痛。重新创建数据库是不理想的,备份需要时间,重新加载数据是昂贵的(数据传输)和缓慢!
也许您应该重新设计您的IAC策略,这样您就不必经常重新创建DB了。更新小的信任不应该是一个问题,因为信任将通过IaC传递(应用程序层到DB层,反之亦然)
https://stackoverflow.com/questions/70750205
复制相似问题