[英]How to deploy AWS CDK app multiple times?
是否可以將 CDK 應用程序多次部署到同一個帳戶? 我想運行synth
一次,然后多次針對該合成模板運行cdk deploy
。
我可以看到 CDK 的最新1.28.0 版本允許將 CloudFormation 參數傳遞到deploy command
(通過#1237 )。 這意味着我可以參數化堆棧的內容,但我不知道如何更改應用程序本身的名稱/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
多次運行的答案。
嘗試這個:
堆棧中具有服務級別名稱或 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 控制台中看到一個新堆棧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.