CDK - 从先前堆栈导入和修改安全组

0

【以下的问题经过翻译处理】 我们有一个CDK堆栈,可以部署一组资源以供多个应用程序服务(例如数据库)共享。自然而然,这些资源的安全组在同一堆栈中定义。

我们想要在它们自己的堆栈中定义应用程序服务-这是无法提前知道的。它们当然将定义自己的特定于应用程序的安全组,上述数据库需要允许传入连接。

如果应用程序堆栈在同一个CDK应用程序项目中声明,那么将上述依赖(数据)堆栈传递给应用程序堆栈构造函数似乎是一个简单的情况,让它引用其公开的属性(即安全组)。

但是,虽然逻辑上似乎应用程序堆栈依赖于数据堆栈,但现实情况是数据堆栈依赖于应用程序堆栈,因为AddIngressRule()方法设置了那个方向。这很棘手,因为应用程序堆栈中可以有其他资源依赖于数据堆栈资源,从而导致循环引用。

如何使应用程序堆栈安全地引用数据堆栈安全组并修改规则,同时保持正确的依赖关系方向?

1 Antwort
0

【以下的回答经过翻译处理】 看起来需要将基础安全组ID作为输出进行导出。

//将安全组ID导出, 以便相关的堆栈可以通过CDK From方法引用并检索原始安全组。 var outputName = StackHelper.SharedExports.DbSecurityGroupId(this.StackName); new CfnOutput(this, outputName, new CfnOutputProps { ExportName = outputName, Value = this.DbSecurityGroup.SecurityGroupId, Description = dbSgName + " 安全组ID."

});

然后, 依赖的应用程序堆栈导入安全组ID并自行检索安全组,而不是直接引用代码。

var dbSecurityGroupId = Fn.ImportValue(StackHelper.SharedExports.DbSecurityGroupId(this._dataStack.StackName)); var dbSecurityGroup = SecurityGroup.FromSecurityGroupId(this, "dbSg", dbSecurityGroupId); dbSecurityGroup.AddIngressRule(this.AppSecurityGroup, Port.Tcp(3306), "允许来自app1的连接。");

这样,依赖的堆栈仅拥有(并添加)完整性规则到基础安全组,而基础堆栈不会知道或依赖于应用程序堆栈。

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen