簡體   English   中英

如何多次部署 AWS CDK 應用程序?

[英]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多次運行的答案。

嘗試這個:

  1. 您需要使您的堆棧名稱成為從命令行傳入的參數
  2. 從您的 cdk.json 中刪除 app 參數,並在傳遞“prefix”參數的命令行上指定 app 參數

堆棧中具有服務級別名稱或 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM