提问人:user2612665 提问时间:5/17/2023 更新时间:5/18/2023 访问量:197
将 CDK 与现有堆栈模板一起使用
using CDK with existing Stack Templates
问:
我一直在尝试将 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 的价值。有没有人成功地做到了这一点,而不仅仅是创造更多的头顶?
答:
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 , } ]
});
评论