cdk deploy 删除bootstrap版本ssm参数

cdk deploy deletes the bootstrap version ssm parameter

以下是我如何实例化我的堆栈:

new LambdaStack(new App(), 'LambdaStack', {
    env: { account: AWS_ACCOUNT_ID, region: 'us-east-1' },
    synthesizer: new DefaultStackSynthesizer({
        qualifier: 'lambda-stk',
    }),
    stackName: 'LambdaStack',
});

首先,我确保我的 ~/.aws/credentials 文件具有正确的凭据。然后我bootstrap:

npx cdk bootstrap --qualifier lambda-stk --toolkit-stack-name LambdaStack aws://ACCOUNT_ID_HERE/us-east-1

控制台中的一切看起来都不错。然后,我部署:

npx cdk deploy --require-approval never

控制台中的一切看起来仍然不错 -- lambda 已按我的预期创建,等等。

然后,我只是再次 运行 相同的部署命令而不做任何更改,我得到了这个错误:

LambdaStack failed: Error: LambdaStack: SSM parameter /cdk-bootstrap/lambda-stk/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)

经进一步调查,似乎 bootstrap 命令正确创建了引用的 SSM 参数,但随后第一个部署命令删除了该参数。它为什么会这样做,我该如何解决这个问题?

通过将 bootstrap 堆栈命名为与 LambdaStack 不同的名称来修复它。我的印象是 bootstrap 命令正在旋转“主”堆栈将使用的堆栈,但实际上它是一个完全不同的堆栈。所以我将 bootstrap 命令更改为:

npx cdk bootstrap --qualifier lambda-stk --toolkit-stack-name LambdaStackCDKToolkit aws://ACCOUNT_ID_HERE/us-east-1

成功了。