amazon-rds - 如何在没有循环依赖的情况下使用 CDK 将安全组添加到现有 RDS
问题描述
我有一个多堆栈应用程序,我想在一个堆栈中部署一个 RDS,然后在后面的堆栈中部署一个连接到 RDS 的 Fargate 集群。
以下是 rds 的定义方式:
this.rdsSG = new ec2.SecurityGroup(this, `ecsSG`, {
vpc: props.vpc,
allowAllOutbound: true,
});
this.rdsSG.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(5432), 'Ingress 5432');
this.aurora = new rds.ServerlessCluster(this, `rds`, {
engine: rds.DatabaseClusterEngine.AURORA_POSTGRESQL,
parameterGroup: rds.ParameterGroup.fromParameterGroupName(this, 'ParameterGroup', 'default.aurora-postgresql10'),
vpc: props.vpc,
securityGroups: [this.rdsSG],
// more properties below
});
有了这个添加入口规则,一切都很好,因为 RDS 和 Fargate 都在同一个 VPC 中,我可以正常通信。即使它在它自己的 VPC 中,它也让我担心它会打开这个世界。
const ecsSG = new ec2.SecurityGroup(this, `ecsSG`, {
vpc: props.vpc,
allowAllOutbound: true,
});
const service = new ecs.FargateService(this, `service`, {
cluster,
desiredCount: 1,
taskDefinition,
securityGroups: [ecsSG],
assignPublicIp: true,
});
我如何删除入口规则并允许从该 ecsSG 到 RDS 的入站连接,因为它稍后会部署?如果我尝试从部署堆栈调用以下命令,则会收到循环依赖错误:
props.rdsSG.connections.allowFrom(ecsSG, ec2.Port.allTcp(), 'Aurora RDS');
谢谢你的帮助!
解决方案
allowTo
事实证明这比我想象的要容易 - 您可以翻转连接,这样您就可以使用 rds建立与rds 实例的连接,而不是尝试修改 rds 以接受 ecs 的安全组。
ecsSG.connections.allowTo(props.rds, ec2.Port.tcp(5432), 'RDS Instance');
推荐阅读
- c++ - 为什么它是使用 GCC 的模棱两可的函数调用?模板扣除失败?
- django - 使用实例编辑 django 表单总是加载空表单字段
- wordpress - wordpress 网站上上传的图片未显示在移动设备上
- css - 动画名称属性中的“足够”和“太多”值是什么意思?
- sql-server - 将 CAST、CONCAT 和 COLLATE 与 LEFT OUTER JOIN 结合使用
- node.js - Angular 7 e2e 连接 ETIMEDOUT,无法建立隧道套接字
- java - restAssured 发送请求的两种方式有什么区别?
- c# - 在 WPF MVVM 应用程序中的多个 ViewModel 之间传递图像/数据
- php - 如何将数字的字符串值转换为锚标签内的电话格式?
- python - 如何在正则表达式中为一组条件定义量词?