【问题标题】:Restoring a AWS documentdb snapshot with terraform使用 terraform 恢复 AWS documentdb 快照
【发布时间】:2022-12-12 07:39:38
【问题描述】:

我不确定如何恢复由 terraform 管理的 AWS documentdb 集群。

我的地形设置如下所示:

resource "aws_docdb_cluster" "this" {
  cluster_identifier              = var.env_name
  engine                          = "docdb"
  engine_version                  = "4.0.0"
  master_username                 = "USERNAME"
  master_password                 = random_password.this.result
  db_cluster_parameter_group_name = aws_docdb_cluster_parameter_group.this.name
  availability_zones              = ["us-east-1a", "us-east-1b", "us-east-1c"]
  db_subnet_group_name            = aws_docdb_subnet_group.this.name
  deletion_protection             = true
  backup_retention_period         = 7
  preferred_backup_window         = "07:00-09:00"
  skip_final_snapshot             = false

  # Added on 6.25.22 to rollback an incorrect application of the namespace
  # migration, which occurred at 2AM EST on June 23.
  snapshot_identifier             = "...the arn for the snapshot..."
}

resource "aws_docdb_cluster_instance" "this_2a" {
  count                      = 1
  engine                     = "docdb"
  availability_zone          = "us-east-1a"
  auto_minor_version_upgrade = true
  cluster_identifier         = aws_docdb_cluster.this.id
  instance_class             = "db.r5.large"
}

resource "aws_docdb_cluster_instance" "this_2b" {
  count                      = 1
  engine                     = "docdb"
  availability_zone          = "us-east-1b"
  auto_minor_version_upgrade = true
  cluster_identifier         = aws_docdb_cluster.this.id
  instance_class             = "db.r5.large"
}

resource "aws_docdb_subnet_group" "this" {
  name       = var.env_name
  subnet_ids = module.vpc.private_subnets
}

我添加了 snapshot_identifier 参数并应用了它,期待回滚。但是,这并没有达到将 documentdb 状态恢复到 6 月 23 日的设置的预期效果。 (据我所知,根本没有任何改变)

我想避免使用 AWS 控制台方法 (described here),因为这会创建一个新的Terraform 不会跟踪的集群。

使用 Terraform 完成此回滚的正确方法是什么?

【问题讨论】:

    标签: mongodb amazon-web-services terraform aws-documentdb


    【解决方案1】:

    snapshot_identifier 参数仅在 Terraform 创建新集群时使用。在创建集群后设置它只会告诉 Terraform “如果您必须重新创建此集群,请使用此快照”。

    要真正让 Terraform 重新创建集群,您需要执行其他操作以使 Terraform 认为需要重新创建集群。可能的选项是:

    • 运行terraform taint aws_docdb_cluster.this 向 Terraform 发出需要重新创建资源的信号。然后它将在您下次运行terraform apply 时重新创建它。
    • 通过其他方式(如 AWS 控制台)删除集群,然后运行terraform apply

    【讨论】:

    • 污点+应用有效。谢谢!
    【解决方案2】:

    一般方法是这样的,但我没有使用 documentdb 的经验。希望这可以帮助。 0. 备份你的 terrafrom 状态文件 terraform state pull > backup_state_file_timestamp.json

    1. 通过控制台恢复到你想要的时间点。
    2. 从 Terraform 状态文件中删除旧实例和集群
      terraform state rm aws_docdb_cluster_instance.this_2a 
      terraform state rm aws_docdb_cluster_instance.this_2b 
      terraform state rm aws_docdb_cluster.this
      
      1. 将手动恢复的集群和实例导入terraform
      terraform import aws_docdb_cluster.this cluster_identifier
      terraform import rm aws_docdb_cluster_instance.this_2a identifier
      terraform import rm aws_docdb_cluster_instance.this_2b identifier
      

      (见底部的导入 https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/docdb_cluster_instancehttps://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/docdb_cluster

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2019-09-08
      • 1970-01-01
      相关资源
      最近更新 更多