You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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控制台中RDS已连接计算资源的截图

解决方案

首先明确:控制台里的「连接的计算资源」是AWS自动识别的关联列表,核心是确保EC2实例具备访问RDS的网络权限,而非通过CDK手动添加“关联”操作。你的代码已经做了部分配置,需补充以下步骤:

  1. 双向安全组规则配置
    你已配置RDS安全组允许EC2访问,但需确保EC2实例的安全组允许出站到RDS的5432端口:

    # 允许EC2出站访问RDS的5432端口
    my_ec2_stack.my_ec2.connections.allow_to(my_rds_cluster, ec2.Port.tcp(5432))
    
  2. 控制台列表延迟处理
    控制台的「连接的计算资源」列表是AWS后台自动发现的,安全组规则生效后可能需要数分钟才会显示关联的EC2实例,无需额外CDK配置。

  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:20:28