使用 CDK Deploy 时如何更改 StackName

How to change StackName when using CDK Deploy

我有一个非常简单的 cdk 项目:

import * as cdk from '@aws-cdk/core';
import { TestStack } from '../lib/test-stack';

const app = new cdk.App();
new TestStack(app, 'TestStack');

我可以使用 cdk deploy 轻松部署堆栈,堆栈的名称在 AWS 上将是“TestStack”。到目前为止,一切都很好。但是我想控制 cloudformation 中堆栈的名称。有什么方法可以 fdo cdk 部署和更改 AWS 中堆栈的默认名称?

类似于 cdk deploy --stack-name SomeName? ((stack-name 是一个编造的命令))

我想知道这一点,因为我希望能够构建一个部署系统,该系统可以从单个 cdk 项目构建多个堆栈。这些堆栈中的每一个都会根据输入参数略有不同。像

cdk deploy --stackName Stack1 --parameters parameters1
cdk deploy --stackName Stack2 --parameters parameters2
cdk deploy --stackName Stack3 --parameters parameters3

我最终会在 AWS 中拥有 Stack1、Stack2 和 Stack3。

我找到了解决方法。我可以使用

更改 manifest.json 文件中的堆栈名称
cat manifest.json | jq '.artifacts.TestStack3.properties.stackName = "MyNewStackName"' >> manifest.json

在每个部署之前

但如果有人知道更干净的解决方案,我仍然很感兴趣

我们可以将 stackName 作为 属性 传递,如果未传递,则使用 Id HelloCdkStack 作为堆栈名称。

我们可以将类似 process.env.STACK_NAME 的内容传递给 stackName 并从命令行覆盖它

const app = new cdk.App();
const env = { account: CRM, region: AWS_REGION };
new HelloCdkStack(app, "HelloCdkStack", {
  env,
  stackName: process.env.STACK_NAME,
});

然后

export STACK_NAME=MyStack1;cdk deploy
       OR
export STACK_NAME=MyStack2;cdk deploy --stackName MyStack2

我是根据上下文做的

//Get data from Conext
const stackName = app.node.tryGetContext('stackName')
new TestCdkProjectStack(app, 'TestCdkProjectStack', {stackName: stackName});

运行 使用 --context 选项部署 CDK:

cdk deploy --context stackName=YourStack

您还可以在 cdk.json 文件中添加上下文数据