更新:问题#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}"
}
}
这是面临的问题
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期...主要问题
在创建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实例
有人愿意帮助解决这两个问题吗?
答案 0 :(得分:0)
好吧,因此您要创建只读副本群集而不是只读副本实例,是否要指定数据库实例或群集作为源?您应将源设置为集群中的db_instance,而不是源集群。如果您使用的是多可用区HA资源,则最好是只读副本。
请记住一件事,因为如果您使用单个主机群集,由于我不了解您的环境并且必须从臀部射击。不要打扰使用集群。只需使用一个数据库实例。它更简单并且相对相同
答案 1 :(得分:0)
我的意思是,根据您提供的TF代码,很难看到您在做什么。源集群TF代码和您的变量定义在哪里?