是否可以将CDK应用程序多次部署到同一帐户?我想一次运行synth
,然后对该合成模板多次运行cdk deploy
。
我看到CDK的最新1.28.0 release允许通过#1237将CloudFormation参数传递到deploy command
中。这意味着我可以参数化堆栈的内容,但是我不知道如何更改应用程序本身的名称/ id。
例如,这是一个简单的应用程序:
public class ExampleApp {
public static void main(final String[] args) {
App app = new App();
new ExampleStack(app, "ExampleStack");
app.synth();
}
}
这是一个简单的虚无堆栈:
public class ExampleStack extends Stack {
public ExampleStack(final Construct scope, final String id) {
this(scope, id, null);
}
public ExampleStack(final Construct scope, final String id, final StackProps props) {
super(scope, id, props);
CfnParameter someVar = CfnParameter.Builder.create(this, "SomeVar")
.description("Some variable that can be passed in at deploy-time.")
.type("String")
.build();
// rest of stack here
}
}
我可以运行cdk synth
并将模板输出到某个地方,然后运行
cdk --app path/to/cdk.out deploy ExampleStack --parameters "ExampleStack:SomeVar=SomeValue"
,该参数将在部署时传递到堆栈中。
但是,我看不到如何使用不同的名称(或ID)多次部署应用程序。这可能吗?
之所以要执行此操作而不是多次运行synth
的背景是因为出于合规性原因,我需要一个工件-cdk.out
目录-然后进行多次部署。为此,我不能基于synth
的多次运行来使用答案。
答案 0 :(得分:2)
尝试一下:
您堆栈中具有服务级别名称或ID的任何资源也都需要修改,例如,两个堆栈无法创建具有相同名称的密码
在我的解决方案中,我从StackProps对象派生来向堆栈添加“ PrefixName”属性,并且前缀可以在堆栈中使用以影响命名或资源。
我的program.cs如下所示:
using Amazon.CDK;
namespace DevconnectListener
{
sealed class Program
{
public static void Main(string[] args)
{
var app = new App();
var props = new DevConnectStackProps()
{
PrefixName = args[0],
StackName = args[0] + "-DevconnectListenerStack"
};
var s = new DevconnectListenerStack(app, "DevconnectListenerStack", props);
app.Synth();
}
}
}
这是我自定义的DevConnectStackProps类:
using System.Collections.Generic;
using Amazon.CDK;
using Amazon.CDK.AWS.DynamoDB;
using Amazon.CDK.AWS.Lambda;
namespace DevconnectListener
{
public class DevConnectStackProps : StackProps, IStackProps
{
public DevConnectStackProps()
{
}
public string PrefixName { get; set; }
}
}
我的cdk.json如下所示,删除了app属性:
{
"context": {
"@aws-cdk/core:enableStackNameDuplicates": "true",
"aws-cdk:enableDiffNoFail": "true",
"@aws-cdk/core:stackRelativeExports": "true"
}
}
然后有一个名为deploy-dev.cmd的CMD文件(其中包含我要使用的AWS配置文件和dev前缀参数:
cdk deploy --app "dotnet run -p src/DevconnectListener/DevconnectListener.csproj dev" --profile dev_aws_profile
如果再次使用其他前缀运行它,您将在CloudFormation控制台中看到一个新堆栈。