diff --git a/packages/aws-cdk/lib/api/util/cloudformation.ts b/packages/aws-cdk/lib/api/util/cloudformation.ts index 601b57c75aee8..6f66e6dc220b4 100644 --- a/packages/aws-cdk/lib/api/util/cloudformation.ts +++ b/packages/aws-cdk/lib/api/util/cloudformation.ts @@ -156,7 +156,7 @@ export class CloudFormationStack { if (!this.exists) { return {}; } const ret: Record = {}; for (const param of this.stack!.Parameters ?? []) { - ret[param.ParameterKey!] = param.ParameterValue!; + ret[param.ParameterKey!] = param.ResolvedValue ?? param.ParameterValue!; } return ret; } diff --git a/packages/aws-cdk/test/api/deploy-stack.test.ts b/packages/aws-cdk/test/api/deploy-stack.test.ts index f4c23b00db1c3..e3bda40dfde2c 100644 --- a/packages/aws-cdk/test/api/deploy-stack.test.ts +++ b/packages/aws-cdk/test/api/deploy-stack.test.ts @@ -149,6 +149,36 @@ test('correctly passes CFN parameters when hotswapping', async () => { expect(tryHotswapDeployment).toHaveBeenCalledWith(expect.anything(), { A: 'A-value', B: 'B=value' }, expect.anything(), expect.anything(), HotswapMode.FALL_BACK); }); +test('correctly passes SSM parameters when hotswapping', async () => { + // GIVEN + givenStackExists({ + Parameters: [ + { ParameterKey: 'SomeParameter', ParameterValue: 'ParameterName', ResolvedValue: 'SomeValue' }, + ], + }); + + // WHEN + await deployStack({ + ...standardDeployStackArguments(), + stack: testStack({ + stackName: 'stack', + template: { + Parameters: { + SomeParameter: { + Type: 'AWS::SSM::Parameter::Value', + Default: 'ParameterName', + }, + }, + }, + }), + hotswap: HotswapMode.FALL_BACK, + usePreviousParameters: true, + }); + + // THEN + expect(tryHotswapDeployment).toHaveBeenCalledWith(expect.anything(), { SomeParameter: 'SomeValue' }, expect.anything(), expect.anything(), HotswapMode.FALL_BACK); +}); + test('call CreateStack when method=direct and the stack doesnt exist yet', async () => { // WHEN await deployStack({