使用terraform为RDS aurora创建跨区域读取副本群集的问题

时间:2019-10-17 21:13:29

标签: terraform amazon-rds terraform-provider-aws amazon-rds-aurora

  

更新:问题#2实际上不是terraform问题。.问题与AWS..i固定在一起,..代码工作正常..现在剩下的只是问题#1   AZ问题

我在us-east-1中有一个具有1个实例的 RDS aurora集群,并想创建一个具有1个实例的跨区域读取副本RDS aurora集群us-west-2

尝试使用terrform从RDS aurora群集创建跨区域读取副本时遇到两个问题

这是我的main.tf文件

provider "aws" {
  region = "${var.aws_region}"

}

resource "aws_db_subnet_group" "rds-aurora" {
  name       = "${var.name}-${var.aws_region}"
  subnet_ids = ["${split(",",lookup(var.subnet_ids, "${var.aws_region}"))}"]
  tags {
    Name            = "${var.name}-${var.env}-${var.aws_region}"
  }
}

resource "aws_rds_cluster_parameter_group" "rds-aurora-cluster-pg" {
  name        = "${var.name}-cluster-pg-${var.aws_region}"
  family      = "aurora5.6"
  description = "${var.name} cluster parameter group"
  parameter {
    name  = "secure_auth"
    value = "1"
  }
  parameter {
    name  = "binlog_format"
    value = "MIXED"
    apply_method = "pending-reboot"
  }
  tags {
    Name            = "${var.name}-${var.env}-${var.aws_region}"
  }
  lifecycle {
      create_before_destroy = true
  }  
}

resource "aws_db_parameter_group" "rds-aurora-pg" {
  name   = "${var.name}-pg-${var.aws_region}"
  family = "aurora5.6"
  description = "${var.name} parameter group"
  parameter {
    name  = "secure_auth"
    value = "1"
  }
  tags {
    Name            = "${var.name}-${var.env}-${var.aws_region}"
  }
  lifecycle {
      create_before_destroy = true
  }
}

resource "aws_rds_cluster" "rds-aurora" {
  cluster_identifier      = "${var.name}"
  availability_zones      = ["${lookup(var.availability_zones, var.aws_region)}"]  
  skip_final_snapshot = "true"
  backup_retention_period = "${var.rds_backup}"
  preferred_backup_window = "09:00-09:30"
  preferred_maintenance_window = "mon:06:00-mon:06:30"
  apply_immediately = "true"
  engine_mode       = "provisioned"
  deletion_protection = "false"
  vpc_security_group_ids = ["${split(",",lookup(var.security_groups, var.aws_region))}"]
  storage_encrypted = "true"
  db_subnet_group_name = "${aws_db_subnet_group.rds-aurora.name}"
  db_cluster_parameter_group_name = "${aws_rds_cluster_parameter_group.rds-aurora-cluster-pg.name}"
  kms_key_id = "${var.kms_key_id}"
  replication_source_identifier = "${var.replication_source_identifier}${var.name}"
  source_region = "${var.source_region}"
  tags {
    Name            = "${var.name}-${var.env}-${var.aws_region}"
  }
}

resource "aws_rds_cluster_instance" "rds-aurora" {
  count              = "${var.rds_count}"
  identifier         = "${var.name}-${count.index}"
  engine = "aurora"
  db_subnet_group_name = "${aws_db_subnet_group.rds-aurora.name}"
  db_parameter_group_name = "${aws_db_parameter_group.rds-aurora-pg.name}"
  instance_class     = "${var.instance_class}"
  cluster_identifier = "${aws_rds_cluster.rds-aurora.cluster_identifier}"
  tags {
    Name            = "${var.name}-${var.env}-${var.aws_region}"
  }
}

这是面临的问题

1。第一个问题是出现此错误

aws_rds_cluster.rds-aurora: error creating RDS cluster: InvalidVPCNetworkStateFault: Availability zone '[us-west-2a,us-west-2b,us-west-2c]' is unavailable in this region, please choose another zone set.

并且那些可用区确实存在,我相信我已经以正确的方式输入了值 这是terraform如何获取可用区的值

...
availability_zones.2635104823:     "" => "us-west-2a,us-west-2b,us-west-2c"
...

这是正确的格式,并且像我说的那样存在可用区。.我从头开始创建了RDS,并且可以使用相同的格式,但是现在只有当我收到可用区不存在的错误时,才尝试创建跨区域读取副本

现在我可以通过添加1个AZ来解决下一阶段的问题。.但是问题仍然存在,我也想解决此问题

接下来,是下面的第2期...主要问题

2。现在的主要错误是我认为存在为具有Terraform的RDS aurora创建跨区域读取副本时存在的错误

在创建rds集群时,terrform应用卡住了,并且从未完成...在超时开始之前,它在这里运行了2个多小时。.我注意到的一件事是,当我检查AWS仪表板时,我可以看到RDS群集已创建,但是在其下没有RDS实例,但是terrform一直在永久运行RDS群集的创建

aws_rds_cluster.rds-aurora: Still creating... (10s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (20s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (30s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (40s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (50s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (1m0s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (1m10s elapsed)
...
...
...
aws_rds_cluster.rds-aurora: Still creating... (1h59m40s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (1h59m50s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (2h0m0s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (2h0m10s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (2h0m20s elapsed)
aws_rds_cluster.rds-aurora: Still creating... (2h0m30s elapsed)

所以我认为存在一个错误,即terrafrom不知道何时创建RDS集群,因此它可以按照上面的main.tf文件中的指定在其下创建RDS实例

有人愿意帮助解决这两个问题吗?

2 个答案:

答案 0 :(得分:0)

好吧,因此您要创建只读副本群集而不是只读副本实例,是否要指定数据库实例或群集作为源?您应将源设置为集群中的db_instance,而不是源集群。如果您使用的是多可用区HA资源,则最好是只读副本。

请记住一件事,因为如果您使用单个主机群集,由于我不了解您的环境并且必须从臀部射击。不要打扰使用集群。只需使用一个数据库实例。它更简单并且相对相同

答案 1 :(得分:0)

我的意思是,根据您提供的TF代码,很难看到您在做什么。源集群TF代码和您的变量定义在哪里?

相关问题