Ama*_*bar 7 amazon-web-services terraform amazon-aurora terraform-provider-aws
我正在尝试使用公共和私有子网以及 Aurora mysql 集群和实例在同一个 vpc 中创建一个带有 RDS 自定义安全组的 vpc。
我在一个模块中创建了 vpc(公共/私有子网,自定义安全组)。还有不同模块中的 aurora-mysql。
我在模块文件中的 vpc 配置
resource "aws_vpc" "main" {
cidr_block = "${var.vpc_cidr}"
instance_tenancy = "${var.tenancy}"
enable_dns_support = "true"
enable_dns_hostnames = "true"
tags {
Name = "${var.tag_name}"
}
}
resource "aws_subnet" "main-public-1" {
vpc_id = "${var.vpc_id}"
cidr_block = "${var.subnet_cidr_1}"
availability_zone = "${var.region}a"
map_public_ip_on_launch = true
tags {
Name = "${var.tag_name}-subnet1"
}
}
resource "aws_subnet" "main-private-1" {
count = "${var.create_private_subnet}"
vpc_id = "${var.vpc_id}"
cidr_block = "${var.private_subnet_cidr_1}"
map_public_ip_on_launch = false
availability_zone = "${var.region}a"
tags {
Name = "${var.tag_name}-private-subnet1"
}
}
resource "aws_subnet" "main-private-2" {
count = "${var.create_private_subnet}"
vpc_id = "${var.vpc_id}"
cidr_block = "${var.private_subnet_cidr_2}"
map_public_ip_on_launch = false
availability_zone = "${var.region}b"
tags {
Name = "${var.tag_name}-private-subnet2"
}
}
resource "aws_security_group" "aurora-sg" {
name = "aurora-security-group"
vpc_id = "${var.vpc_id}"
ingress {
protocol = "tcp"
from_port = 0
to_port = 65535
cidr_blocks = ["0.0.0.0/0"]
}
egress {
protocol = -1
from_port = 0
to_port = 0
cidr_blocks = ["0.0.0.0/0"]
}
}
Run Code Online (Sandbox Code Playgroud)
我在模块文件中的 RDS 配置
resource "aws_rds_cluster" "cluster" {
cluster_identifier = "${var.cluster_name}"
engine = "aurora-mysql"
database_name = "sample_rds"
master_username = "${var.username}"
master_password = "${var.password}"
vpc_security_group_ids = ["${aws_security_group.aurora-sg.id}"]
skip_final_snapshot = true
}
resource "aws_rds_cluster_instance" "cluster_instances" {
identifier = "${var.cluster_name}-instance"
cluster_identifier = "${aws_rds_cluster.cluster.id}"
instance_class = "${var.instance_class}"
publicly_accessible = "${var.publicly_accessible}"
db_subnet_group_name =
"${aws_db_subnet_group.aurora_subnet_group.id}"
}
resource "aws_db_subnet_group" "aurora_subnet_group" {
name = "tf-rds-${var.cluster_name}"
subnet_ids = ["${var.subnets}"]
tags {
Name = "tf-rds-${var.cluster_name}"
}
}
Run Code Online (Sandbox Code Playgroud)
我的主要地形脚本。我已将变量传递给 RDS 模块,例如 vpc_id、db 用户名和密码、私有子网 ID 和安全组 ID
module "aurora_mysql" {
source = "../modules/rds-aurora"
vpc_id = "${module.my_vpc.vpc_id}"
publicly_accessible = true
instance_class = "db.t2.medium"
username = "${var.db_username}"
password = "${var.db_password}"
subnets =
["${module.my_vpc.subnet_id_1[1]}","${module.my_vpc.subnet_id_1[2]}"]
security_group_ids = "${module.my_vpc.vpc_rds_sg_id}"
}
Run Code Online (Sandbox Code Playgroud)
当我尝试apply
使用子网和安全组成功创建配置 vpc 但收到错误
Error creating DB Instance: InvalidParameterCombination: DB instance and EC2 security group are in different VPC
即使我正在传递新的 vpc 私有子网 ID 和自定义安全组 ID,我的 RDS 实例也是在默认 VPC 中创建的。
也许有点老,但我有同样的问题。对于有这个问题的其他人来说,这可能很有趣。关键是“aws_rds_cluster”或“aws_rds_cluster_instance”中的“db_subnet_group_name”。
从文档:
db_subnet_group_name -(可选)数据库子网组的名称。将在与数据库子网组关联的 VPC 中创建数据库实例。如果未指定,将在默认 VPC 中创建...
我看到你使用了“id”而不是“name”
db_subnet_group_name = "${aws_db_subnet_group.aurora_subnet_group.id}"
Run Code Online (Sandbox Code Playgroud)
与名称:
db_subnet_group_name = "${aws_db_subnet_group.aurora_subnet_group.name}"
Run Code Online (Sandbox Code Playgroud)
也许这就是问题所在。
小智 5
我遇到了类似的问题。最后,经过一番努力,在创建PostgreSQL数据库实例时,我发现我们需要创建一个至少有两个子网的资源调用子网组名称,并在实例或集群资源中调用它。
这是我的示例代码。
resource "aws_db_subnet_group" "postgresql_subnet_group" {
name = "postgresubgroup"
subnet_ids = ["${aws_subnet.postgresql_subnet1.id}",
"${aws_subnet.postgresql_subnet2.id}"]
tags = {
Name = "PostgreSQL subnet group"
}
}
db_subnet_group_name = aws_db_subnet_group.postgresql_subnet_group.name
Run Code Online (Sandbox Code Playgroud)
DB 子网组是集群 ( aws_rds_cluster
) 的参数,而不是实例的参数。在您的配置中,您似乎在实例配置中传递子网组,而不是在集群配置中传递。我相信,这会迫使 RDS 回退以使用default
子网组,该子网组是来自您的 VPC 的一组子网default
。
我不是 Terrform 专家,所以我将让您自行决定需要更改配置中的哪些内容才能正确建模。希望这可以帮助!
归档时间: |
|
查看次数: |
2903 次 |
最近记录: |