【发布时间】:2022-11-27 11:59:11
【问题描述】:
尝试从外部源连接到我的 RDS Aurora Serverless (v1) MySQL 集群时,我的连接握手超时。
我在 terraform 中指定集群及其安全组,并为账户/区域利用默认的 AWS VPC。
我的集群的参数:
cluster_identifier = "some-cluster-name",
engine = "aurora-mysql",
engine_mode = "serverless",
database_name = "db",
master_username = "********",
master_password = "********",
backup_retention_period = 5,
preferred_backup_window = "07:00-09:00",
skip_final_snapshot = true,
storage_encrypted = true,
scaling_configuration = {
max_capacity = 4,
min_capacity = 1,
seconds_until_auto_pause = 300
},
vpc_security_group_ids = ["${aws_security_group.my_sg_defined_elsewhere.id}"]
安全组规则:
type = "ingress",
from_port = 3306,
to_port = 3306,
protocol = "tcp",
cidr_blocks = ["0.0.0.0/0"],
ipv6_cidr_blocks = ["::/0"],
security_group_id = "${aws_security_group.my_sg_defined_elsewhere.id}"
type = "egress",
from_port = 0,
to_port = 0,
protocol = "-1",
cidr_blocks = ["0.0.0.0/0"],
ipv6_cidr_blocks = ["::/0"],
security_group_id = "${aws_security_group.my_sg_defined_elsewhere.id}"
因为我只是使用默认的 VPC,我相信它有公共子网,所以我假设如果我的安全组规则足以用于公共 MySQL 访问,那么这应该就可以了。不幸的是,使用集群生成的端点和正确的凭据,我在尝试连接时只是超时。
【问题讨论】:
-
您必须在 RDS/Aurora 集群上启用“可公开访问”标志,以便 Amazon 为集群的服务器分配公共 IP。如果您没有启用它,那么您将只能从 VPC 内部访问它。我知道 Aurora Serverless v1 不支持可公开访问的设置。我不确定 v2,我似乎无法在文档中找到该信息。您是否启用了该设置?当您从 VPC 外部解析 DNS 名称时,它会提供公共 IP 地址还是内部 IP 地址?
-
@MarkB“我知道 Aurora Serverless v1 不支持”——呃,是的,我现在才看到。并且可以确认 DNS 名称显示的是一个内部地址。我在这个用例中完全使用 AWS 的唯一原因是利用 v1 能够逐渐降为零以节省成本。出于同样的原因,通过 EC2 进行路由并不能真正帮助我,lambda 似乎也不存在延迟问题。如果 v1 能给我,我不确定是否还有其他聪明的选择来精简访问私有端点。
-
您将其用于什么类型的应用程序?应用程序本身不在 AWS 中运行?
-
不,不幸的是,由于某些 GCP 依赖性,我无法将应用程序本身移动到 AWS。像往常一样陷入经典的云锁定斗争。
标签: amazon-web-services terraform amazon-rds terraform-provider-aws aws-aurora-serverless