将 CDK 与现有堆栈模板一起使用

using CDK with existing Stack Templates

提问人:user2612665 提问时间:5/17/2023 更新时间:5/18/2023 访问量:197

问:

我一直在尝试将 CDK 与我们当前的 10 个现有堆栈模板一起使用。这将很棒,因为我可以使用 cfninclude 加载模板,然后使用代码添加任何新资源或修改模板中的现有资源,而不是在所有模板中手动执行此操作。 我今天被要求将 Application Load Balancer 侦听器规则添加到所有模板,因此当我联系 aws Support 了解如何访问模板中的负载均衡器并以编程方式添加规则时,我被告知:


现在,要向模板中定义的侦听器添加侦听器规则,我们必须创建一个新的 CfnListenerRule 资源、

new elbv2.CfnListenerRule(this, "ListenerRule", {
  listenerArn: listner.attrListenerArn,
  priority: 123,
  conditions: [
    { field: "path-pattern", values: ['/'] }
  ],
  actions: [ { type: "forward", targetGroupArn: <target group ARN> , } ]
});

我试图通过设置 targetGroupArn 来复制相同的内容:tg.attrTargetGroupArn ,但不幸的是,我可以看到错误“属性'attrTargetGroupArn'在类型'CfnTargetGroup'上不存在。

因此,我建议您选择以下任何一种选择,

  • 首先创建堆栈,然后对目标组的 ARN 进行硬编码。
  • 在模板中创建侦听器规则作为资源,然后使用 cfn-include。

这些建议的选项对我来说似乎很荒谬,我不想在代码中为每个已部署的堆栈对 ARN 进行硬编码,也不想在需要更改时继续手动更新 10 个不同的模板,这违背了 CDK 为我做工作的目的。

我严重质疑一旦部署了现有的堆栈模板并投入生产,使用 CDK 的价值。有没有人成功地做到了这一点,而不仅仅是创造更多的头顶?

C# Amazon-Web-Services 模板 堆栈 aws-cdk

评论

0赞 user2612665 5/18/2023
我们正在摆脱这种混合方法,只需手动将所有堆栈迁移到 CDK 代码并将模板全部转储在一起。减少头痛。

答:

1赞 user2612665 5/18/2023 #1

我们决定只将模板迁移到代码中,但对于任何需要知道如何执行此操作的人,您可以从 AWS Support 中获取:

const template = new cfninc.CfnInclude(this, 'Template', { 
  templateFile: '/Users/abhithm/Downloads/importks.yaml',
});

const lb = template.getResource('LoadBalancer');

const listner = template.getResource('Listener') as elbv2.CfnListener;

const tg = template.getResource('TargetGroup1') as elbv2.CfnTargetGroup;;

const x = tg.ref;

new elbv2.CfnListenerRule(this, "ListenerRule", {
  // listenerArn: listner.getAtt('Arn').toString(),
  listenerArn: listner.attrListenerArn,
  priority: 123,
  conditions: [
    { field: "path-pattern", values: ['/'] }
  ],
  actions: [ { type: "forward", targetGroupArn: x  , } ]
});