繁体   English   中英

使用 CDK cli 获取堆栈依赖项列表

[英]Get a list of stack dependencies using CDK cli

是否有可能使用 AWS CDK CLI 获取另一个堆栈所依赖的堆栈列表? 例如,给定一个看起来像这样的堆栈列表:

const app = new App();
const alphaStack = new Stack(app);

const betaStack = new Stack(app);
betaStack.addDependency(alphaStack);

const gammaStack = new Stack(app);
gammaStack.addDependency(gammaStack);

const deltaStack = new Stack(app);
deltaStack.addDependency(betaStack);
deltaStack.addDependency(gammaStack);

我想运行一个可以给我 output 的命令,类似于以下内容:

$ cdk list-deps alpha-stack  # no result

$ cdk list-deps beta-stack
alpha-stack

$ cdk list-deps gamma-stack
alpha-stack

$ cdk list-deps delta-stack
beta-stack
gamma-stack

具体来说,我希望能够在部署堆栈之前运行它。

运行cdk synth STACK_NAME

你应该从cdk.out/manifest.json中找到依赖项

❯ jq '.artifacts.STACK_NAME.dependencies' cdk.out/manifest.json
[
  "STACK_NAME.assets"
  ...
]

我知道这不像您正在寻找的那么强大,但这里有一个有用的命令来查找依赖于特定导出的堆栈:

aws cloudformation list-imports --export-name EXPORT_NAME

如果这对将来的任何人有帮助; 以下似乎解决了我想解决的问题:

// the stack that we're interested in finding deps for
const stackName = "...";

// assuming app is as defined in the question
const { stacks } = app.synth();

stacks
  .find(({ stackName }) => stackName === searchForStackName)
  ?.dependencies.forEach((dep) => console.log(dep.id));

注意事项:

  • 它显然不是 CLI 内置的,并且需要从您的 CDK 定义中公开app
  • 这确实需要在应用程序上调用synth 最初我的理解是,这会在 AWS 中创建一些我想避免的工件; 但实际情况似乎并非如此。
  • 我不确定这个片段/答案中的dep.id有多可靠/稳定。 尽管到目前为止它对于我的目的来说已经足够强大,但dependencies返回一个CloudArtifact列表,我不确定它是否总是代表Stack

你也可以运行

cdk destroy stackName

它会要求您确认销毁堆栈所需的依赖项。

这是一个危险的操作,应该小心完成,因为它会破坏你的堆栈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM