如何通过AWS CDK为RDS数据库集群添加EC2计算资源?
通过AWS CDK为RDS数据库集群添加EC2计算资源的问题
需求与现状
- 需要通过AWS CDK将EC2实例配置为RDS数据库集群的计算资源,目前仅能通过AWS控制台手动完成该操作,需实现程序化配置。
- RDS集群与目标EC2实例处于同一VPC及子网中,尝试用现有代码添加EC2实例后无效果,且CDK官方文档及网络中未找到相关示例。
尝试的CDK代码
my_rds_cluster = rds.DatabaseCluster(self, "MyRDSDatabaseCluster", cluster_identifier="my-postgres", engine=rds.DatabaseClusterEngine.aurora_postgres( version=rds.AuroraPostgresEngineVersion.VER_11_18 ), instance_props=rds.InstanceProps( vpc=shared_vpc_stack.vpc, instance_type=ec2.InstanceType.of(ec2.InstanceClass.R6G, ec2.InstanceSize.XLARGE2), vpc_subnets=ec2.SubnetSelection( availability_zones=["us-west-2a", "us-west-2b", "us-west-2c", "us-west-2d"], subnets=[private_subnet_a, private_subnet_b, private_subnet_c, private_subnet_d], ), auto_minor_version_upgrade=True, enable_performance_insights=True, publicly_accessible=False, security_groups=[my_rds_security_group, my_ec2_stack.searchy_security_group, my_ec2_stack.soary_security_group], ), backup=rds.BackupProps( retention=Duration.days(7), ), ) # 尝试添加EC2作为计算资源的代码(无报错但无效果) my_rds_connections = my_rds_cluster.connections.allow_from( other=my_ec2_stack.my_ec2, port_range=ec2.Port.tcp(5432), description="My RDS connection to My EC2" )
AWS控制台示例截图

解决方案
首先明确:控制台里的「连接的计算资源」是AWS自动识别的关联列表,核心是确保EC2实例具备访问RDS的网络权限,而非通过CDK手动添加“关联”操作。你的代码已经做了部分配置,需补充以下步骤:
双向安全组规则配置
你已配置RDS安全组允许EC2访问,但需确保EC2实例的安全组允许出站到RDS的5432端口:# 允许EC2出站访问RDS的5432端口 my_ec2_stack.my_ec2.connections.allow_to(my_rds_cluster, ec2.Port.tcp(5432))控制台列表延迟处理
控制台的「连接的计算资源」列表是AWS后台自动发现的,安全组规则生效后可能需要数分钟才会显示关联的EC2实例,无需额外CDK配置。IAM认证访问配置(可选)
如果要通过IAM角色让EC2访问RDS,需在RDS集群启用IAM认证,并给EC2角色附加对应权限:# 创建RDS集群时启用IAM认证 my_rds_cluster = rds.DatabaseCluster( # 保留原有配置... iam_authentication=True ) # 给EC2实例的IAM角色添加RDS连接权限 my_ec2_stack.my_ec2.role.add_to_policy( iam.PolicyStatement( actions=["rds-db:connect"], resources=[f"arn:aws:rds-db:{self.region}:{self.account}:dbuser:{my_rds_cluster.cluster_resource_identifier}/<你的数据库用户名>"] ) )
内容的提问来源于stack exchange,提问作者dredbound
相关产品推荐
相关产品推荐

