From 035d2378e7127ec87e4927435f3b8b1a270babbb Mon Sep 17 00:00:00 2001 From: corymhall <43035978+corymhall@users.noreply.github.com> Date: Fri, 19 Jan 2024 11:13:55 -0500 Subject: [PATCH] fix: deployment recreated on every cdk deployment Every time I perform a CDK deployment, the logicalId hash of the deployment resource changes and causes the deployment resource to be deleted and recreated. I'm assuming it is because the configuration `content` is part of the hash creation and I am creating the content using `lazy` and at the time of the hash creation it is still a token. Looking at the [CloudFormation docs](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-appconfig-deployment.html) for the deployment resource, a change to _any_ property causes a replacement so I don't think we need to control the recreation logic ourselves, we should just let CloudFormation do the resource replacement for us. --- .../aws-appconfig-alpha/lib/configuration.ts | 27 +----- ...cfb5a961df08d8dbf7cd37e60bf216fb982a00.zip | Bin 4640 -> 0 bytes ...efaultTestDeployAssert6752CD38.assets.json | 2 +- .../aws-appconfig-configuration.assets.json | 6 +- .../aws-appconfig-configuration.template.json | 12 +-- .../integ.configuration.js.snapshot/cdk.out | 2 +- .../integ.json | 2 +- .../manifest.json | 82 +++++++++++++++--- .../integ.configuration.js.snapshot/tree.json | 36 ++++---- .../aws-appconfig-extension.assets.json | 6 +- .../aws-appconfig-extension.template.json | 2 +- ...efaultTestDeployAssert64BA6C4E.assets.json | 2 +- .../test/integ.extension.js.snapshot/cdk.out | 2 +- .../integ.extension.js.snapshot/integ.json | 2 +- .../integ.extension.js.snapshot/manifest.json | 17 +++- .../integ.extension.js.snapshot/tree.json | 6 +- 16 files changed, 122 insertions(+), 84 deletions(-) delete mode 100644 packages/@aws-cdk/aws-appconfig-alpha/test/integ.configuration.js.snapshot/.cache/e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00.zip diff --git a/packages/@aws-cdk/aws-appconfig-alpha/lib/configuration.ts b/packages/@aws-cdk/aws-appconfig-alpha/lib/configuration.ts index 6f0e7306f5b25..1922dcd80df3f 100644 --- a/packages/@aws-cdk/aws-appconfig-alpha/lib/configuration.ts +++ b/packages/@aws-cdk/aws-appconfig-alpha/lib/configuration.ts @@ -15,7 +15,6 @@ import { IApplication } from './application'; import { DeploymentStrategy, IDeploymentStrategy, RolloutStrategy } from './deployment-strategy'; import { IEnvironment } from './environment'; import { ActionPoint, IEventDestination, ExtensionOptions, IExtension, IExtensible, ExtensibleBase } from './extension'; -import { getHash } from './private/hash'; /** * Options for the Configuration construct @@ -203,8 +202,6 @@ abstract class ConfigurationBase extends Construct implements IConfiguration, IE }); } - protected abstract getDeploymentHash(environment: IEnvironment): string; - /** * Adds an extension defined by the action point and event destination * and also creates an extension association to the configuration profile. @@ -309,8 +306,7 @@ abstract class ConfigurationBase extends Construct implements IConfiguration, IE * @param environment The environment to deploy the configuration to */ public deploy(environment: IEnvironment) { - const logicalId = `Deployment${this.getDeploymentHash(environment)}`; - new CfnDeployment(this, logicalId, { + new CfnDeployment(this, `Deployment${environment.name!}`, { applicationId: this.application.applicationId, configurationProfileId: this.configurationProfileId, deploymentStrategyId: this.deploymentStrategy!.deploymentStrategyId, @@ -482,16 +478,6 @@ export class HostedConfiguration extends ConfigurationBase { this.addExistingEnvironmentsToApplication(); this.deployConfigToEnvironments(); } - - protected getDeploymentHash(environment: IEnvironment): string { - const combinedString = ` - ${this.application!.name!} - ${this.name!} - ${environment.name!} - ${this.content} - `; - return getHash(combinedString); - } } /** @@ -623,17 +609,6 @@ export class SourcedConfiguration extends ConfigurationBase { this.deployConfigToEnvironments(); } - protected getDeploymentHash(environment: IEnvironment): string { - const combinedString = ` - ${this.application!.name!} - ${this.name!} - ${environment.name!} - ${this.versionNumber} - ${this.location.type} - `; - return getHash(combinedString); - } - private getPolicyForRole(): iam.PolicyDocument { const policy = new iam.PolicyStatement({ effect: iam.Effect.ALLOW, diff --git a/packages/@aws-cdk/aws-appconfig-alpha/test/integ.configuration.js.snapshot/.cache/e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00.zip b/packages/@aws-cdk/aws-appconfig-alpha/test/integ.configuration.js.snapshot/.cache/e976a796f036a5efbf44b99e44cfb5a961df08d8dbf7cd37e60bf216fb982a00.zip deleted file mode 100644 index ed9129d5ece9cc8eb6f4265188d5561ec5a5f8cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4640 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