y. *_* bs 5 aws-cloudformation aws-cdk
尝试理解 CDK 的一个奇怪行为:
我有2堆
StackA -> 定义资源 outA
StackB -> 定义资源 outB -它依赖于资源 outA
第一个“CDK 部署”运行没有任何问题。
现在,我通过删除“outA”资源来更改 StackA,并创建一个新资源调用“outAnew”并更新 StackB 以使用此新值
此时我无法部署任何Stack!如果我尝试部署 StackA 出现错误:
导出 outA 无法删除,因为它正在被 StackB 和 StackC 使用
如果尝试部署 StackB,由于依赖性,它会首先尝试部署 StackA。
任何想法?
示例代码:
堆栈A:
export class CdkDependenciesStackA extends cdk.Stack {
// public out_a: cdk.CfnOutput;
public out_a_new: cdk.CfnOutput;
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// this.out_a = new cdk.CfnOutput(this, "out_a", {
// value: "outA",
// exportName: "outA",
// });
this.out_a_new = new cdk.CfnOutput(this, "out_a_new", {
value: "outAnew",
exportName: "outAnew",
});
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈B:
export class CdkDependenciesStackB extends cdk.Stack {
public out_b: cdk.CfnOutput;
constructor(
scope: cdk.Construct,
id: string,
outputValue: cdk.CfnOutput,
props?: cdk.StackProps
) {
super(scope, id, props);
this.out_b = new cdk.CfnOutput(this, "out_b", {
value: `outB_${outputValue.importValue}`,
exportName: "outB",
});
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序:
const app = new cdk.App();
const stack_a = new stacks.CdkDependenciesStackA(
app,
"CdkDependenciesStack",
{}
);
const stack_b =new stacks.CdkDependenciesStackB(
app,
"CdkDependenciesStackB",
stack_a.out_a_new,
{}
);
stack_b.addDependency(stack_a)
Run Code Online (Sandbox Code Playgroud)
这似乎是整个 CDK 用户群的常见问题。https://aws-blog.de/2020/09/deployment-issues-with-cross-stack-dependency-and-the-cdk.html描述了对我有帮助的解决方案
由于首先部署导出值的堆栈,因此您仍然需要保留原始导出,以便
之后您可以停止导出旧值。
| 归档时间: |
|
| 查看次数: |
5779 次 |
| 最近记录: |