代码之家  ›  专栏  ›  技术社区  ›  Skod

通过单个Terraform脚本从快照恢复Aurora DB

  •  0
  • Skod  · 技术社区  · 2 年前

    我希望创建一个回滚作业,以按需恢复Aurora Postresql DB集群(这是将在自动化服务器中运行的灾难恢复工作的一部分)。

    现有集群是的一部分 Aurora Global Database 通过Terraform提供给2个AWS区域。

    注意:对DB的访问是通过Route53记录进行的,该记录直接指向主区域中集群的写入程序端点。

    全局数据库创建:

    resource "aws_rds_global_cluster" "example-global" {
      count = var.primary ? 1 : 0 // only one region is the primary
      global_cluster_identifier = "global-db"
      engine = "aurora-postgresql"
      # etc...
    }
    

    集群(仅在主区域中创建数据库):

    resource "aws_rds_cluster" "example-cluster" {
      cluster_identifier = "example"
      engine = "aurora-postgresql"
      global_cluster_identifier = "global-db"
    
      depends_on = [aws_rds_global_cluster.example-global]
      # etc...
    }
    

    每个区域3个实例:

    resource "aws_rds_cluster_instance" "example-instance" {
      count = 3
    
      cluster_identifier = aws_rds_cluster.example-cluster.id
      engine = aws_rds_cluster.example-cluster.engine
    
      depends_on = [aws_rds_cluster.example-cluster]
      # etc...
    }
    

    上面的工作很好,并部署了资源。它每天创建一次快照(默认设置)。来自 docs (以及SO中的其他答案)很明显,没有办法从快照恢复到同一个DB,所以最终我想到的计划是:

    1. 创建具有辅助区域的新集群(有效地创建 全局数据库)
    2. 使用所述快照在主区域中填充新实例
    3. 更新Route53记录以指向新集群的端点
    4. 删除旧的集群(从所有区域)和旧的全局数据库

    到目前为止,我所尝试的是使用AWS CLI实际创建DB(从快照)。但我真正不知道的是如何更新TF状态以包括新资源,然后使用TF销毁旧的DB/集群资源(理想情况下是在同一步骤中)。

    如果有办法在Terraform中描述上述步骤,那就更好了 as in the example 而不是必须使用自定义脚本来恢复DB,然后手动更新TF状态。

    有什么建议或想法吗?

    0 回复  |  直到 2 年前