Typescript 为AWS CDK中的多个堆栈创建可预测的堆栈名称

Typescript 为AWS CDK中的多个堆栈创建可预测的堆栈名称,typescript,amazon-web-services,aws-cdk,Typescript,Amazon Web Services,Aws Cdk,在AWS cdk应用程序中执行npx-cdk-synth时,如何获得“好”的堆栈名,该应用程序由我想要部署到的组件组成 我面临的问题是,这会产生类似以下内容的输出: Successfully synthesized to [...]/my-app/cdk.out Supply a stack id (prodpersistencestackFE36DF49, testpersistencestack6C35C777, prodapplicationstackA0A96586, testappli

在AWS cdk应用程序中执行
npx-cdk-synth
时,如何获得“好”的堆栈名,该应用程序由我想要部署到的组件组成

我面临的问题是,这会产生类似以下内容的输出:

Successfully synthesized to [...]/my-app/cdk.out
Supply a stack id (prodpersistencestackFE36DF49, testpersistencestack6C35C777, prodapplicationstackA0A96586, testapplicationstackE19450AB) to display its template.
我希望看到的是“漂亮”的堆栈名称(因为我在调用构造函数时指定了
stackName
属性):

动机:我需要“好的”(或者至少是可预测的)堆栈名,以便将其输入到下一步的CI/CD管道中,以便构建服务器可以部署CDK应用程序

AWS CDK版本:1.21.1

这解决了这个问题。在其响应中指出,堆栈ID是这样设计的(因为在多个环境中可以有相同的堆栈名称)

为了使用堆栈名作为部署参数,可以实现对
cdk.out/manifest.json
文件的反向查找,因为堆栈ID和堆栈名之间的映射信息在那里可用。下面是如何使用以下方法实现此类查找的摘录:

#从某处获取堆栈名称,例如,从上述问题中获取测试持久性堆栈、产品持久性堆栈、测试应用程序堆栈或产品应用程序堆栈
stackName=
#从./cdk.out/manifest.json提取堆栈id
stackId=$(jq-r--arg stackName“$stackName”\
"文物
|至_条目[]
|选择(.value.properties.stackName==$stackName)
|.钥匙
' \
<“/cdk.out/manifest.json”\
)
#以堆栈id为参数调用cdk部署
npx cdk部署\
--应用程序cdk.out\
--从不需要批准\
“$stackId”

您能提供完整的堆栈吗?或者至少是其中的一部分。。因为堆栈是空的,所以没有资源可以使用rename@AmitBaranes每个堆栈中的资源对于重现问题并不重要。我已经更新了示例,使其包含一个S3 bucket和一个Lambda函数,但它们可以是任何东西。我需要堆栈名称是可预测的,这样我就可以分别使用每个名称配置部署管道。老实说,我在这个问题上花了大约5个小时。。。仍然没有幸运我找到的唯一解决方案是这个npm包:它需要一些定制
cdkMonkeyPatch.patch(require('@aws-cdk/cdk/lib/util/uniqueid')@AmitBaranes谢谢。我已经就此事向AWS CDK团队提交了报告,如果我得到一个好的答案,我计划在这里报告。毕竟,CDK对于CDKOhh来说还为时过早。为了完成一件简单的事情,这是一个很好的解决方法。我希望他们将来能采取更简单的方法来实现这一目标。
Successfully synthesized to [...]/my-app/cdk.out
Supply a stack id (prodpersistencestackFE36DF49, testpersistencestack6C35C777, prodapplicationstackA0A96586, testapplicationstackE19450AB) to display its template.
Successfully synthesized to [...]/my-app/cdk.out
Supply a stack id (prodpersistencestack, testpersistencestack, prodapplicationstack, testapplicationstack) to display its template.