From 1d0cc42919c3aad5b22f30c539c72d7fee2e5e8c Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Fri, 16 Jun 2023 19:17:21 -0400 Subject: [PATCH 1/3] add dummy construct and update snap --- .../lib/default-staging-stack.ts | 23 +++++++++++++++++++ .../cdk.out | 2 +- .../integ.json | 2 +- ...efaultTestDeployAssert44C8D370.assets.json | 2 +- .../manifest.json | 10 ++++++-- .../synthesize-default-resources.assets.json | 6 ++--- ...synthesize-default-resources.template.json | 3 +++ .../tree.json | 14 ++++++++++- 8 files changed, 53 insertions(+), 9 deletions(-) diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts b/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts index 9e75755f344c6..a6f3d3820515b 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts @@ -8,6 +8,7 @@ import { App, ArnFormat, BootstraplessSynthesizer, + CfnWaitConditionHandle, DockerImageAssetSource, Duration, FileAssetSource, @@ -17,11 +18,24 @@ import { StackProps, } from 'aws-cdk-lib/core'; import { StringSpecializer } from 'aws-cdk-lib/core/lib/helpers-internal'; +import * as cxapi from 'aws-cdk-lib/cx-api'; +import { Construct } from 'constructs'; import { BootstrapRole } from './bootstrap-roles'; import { FileStagingLocation, IStagingResources, IStagingResourcesFactory, ImageStagingLocation } from './staging-stack'; export const DEPLOY_TIME_PREFIX = 'deploy-time/'; +/** + * This is a dummy construct meant to signify that a stack is utilizing + * the DefaultStagingStack. It does not do anything, and is not meant + * to be created on its own. + */ +export class UsingDefaultStagingStack extends CfnWaitConditionHandle { + constructor(scope: Construct, id: string) { + super(scope, id); + } +} + /** * User configurable options to the DefaultStagingStack. */ @@ -128,6 +142,12 @@ export class DefaultStagingStack extends Stack implements IStagingResources { throw new Error(`Stack ${stack.stackName} must be part of an App`); } + // Because we do not keep metrics in the DefaultStagingStack, we will inject + // a dummy construct into the stack using the DefaultStagingStack instead. + if (cxapi.ANALYTICS_REPORTING_ENABLED_CONTEXT) { + new UsingDefaultStagingStack(stack, `UsingDefaultStagingStack/${stack.stackName}`); + } + const stackId = `StagingStack-${appId}-${context.environmentString}`; return new DefaultStagingStack(app, stackId, { ...options, @@ -199,7 +219,10 @@ export class DefaultStagingStack extends Stack implements IStagingResources { super(scope, id, { ...props, synthesizer: new BootstraplessSynthesizer(), + analyticsReporting: false, // removing AWS::CDK::Metadata construct saves ~3KB }); + // removing path metadata saves ~2KB + this.node.setContext(cxapi.PATH_METADATA_ENABLE_CONTEXT, false); this.appId = this.validateAppId(props.appId); this.dependencyStack = this; diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/cdk.out b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/cdk.out index 7925065efbcc4..f0b901e7c06e5 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/cdk.out +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/cdk.out @@ -1 +1 @@ -{"version":"31.0.0"} \ No newline at end of file +{"version":"32.0.0"} \ No newline at end of file diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/integ.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/integ.json index 9eeaef0dfe700..7a9fc1a5f4be8 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/integ.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/integ.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "32.0.0", "testCases": { "integ-tests/DefaultTest": { "stacks": [ diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/integtestsDefaultTestDeployAssert44C8D370.assets.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/integtestsDefaultTestDeployAssert44C8D370.assets.json index 7526fee9ff76c..a8e3e80a7e7fa 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/integtestsDefaultTestDeployAssert44C8D370.assets.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/integtestsDefaultTestDeployAssert44C8D370.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "32.0.0", "files": { "21fbb51d7b23f6a6c262b46a9caee79d744a3ac019fd45422d988b96d44b2a22": { "source": { diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/manifest.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/manifest.json index 95fbe49a0ecb9..5222dfe67777d 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/manifest.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/manifest.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "32.0.0", "artifacts": { "synthesize-default-resources.assets": { "type": "cdk:asset-manifest", @@ -20,7 +20,7 @@ "additionalDependencies": [ "synthesize-default-resources.assets" ], - "stackTemplateAssetObjectUrl": "s3://cdk-default-resources-staging-${AWS::AccountId}-${AWS::Region}/deploy-time/dc7275f639c45accfa2abc4842978bcb3b0c5f0b83fcde22015e344b2e008f26.json", + "stackTemplateAssetObjectUrl": "s3://cdk-default-resources-staging-${AWS::AccountId}-${AWS::Region}/deploy-time/84a24ce989cf0c000ebee1bfd616e95a965eb13e58704752007b21368191978c.json", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", "lookupRole": { "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}" @@ -31,6 +31,12 @@ "synthesize-default-resources.assets" ], "metadata": { + "/synthesize-default-resources/UsingDefaultStagingStack--synthesize-default-resources": [ + { + "type": "aws:cdk:logicalId", + "data": "UsingDefaultStagingStacksynthesizedefaultresources" + } + ], "/synthesize-default-resources/lambda-s3/ServiceRole/Resource": [ { "type": "aws:cdk:logicalId", diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.assets.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.assets.json index 7fb937ee99e39..7759c98ee5e18 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.assets.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.assets.json @@ -1,5 +1,5 @@ { - "version": "31.0.0", + "version": "32.0.0", "files": { "68539effc3f7ad46fff9765606c2a01b7f7965833643ab37e62799f19a37f650": { "source": { @@ -14,7 +14,7 @@ } } }, - "dc7275f639c45accfa2abc4842978bcb3b0c5f0b83fcde22015e344b2e008f26": { + "84a24ce989cf0c000ebee1bfd616e95a965eb13e58704752007b21368191978c": { "source": { "path": "synthesize-default-resources.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-default-resources-staging-${AWS::AccountId}-${AWS::Region}", - "objectKey": "deploy-time/dc7275f639c45accfa2abc4842978bcb3b0c5f0b83fcde22015e344b2e008f26.json", + "objectKey": "deploy-time/84a24ce989cf0c000ebee1bfd616e95a965eb13e58704752007b21368191978c.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-default-resources-file-role-${AWS::Region}" } } diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.template.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.template.json index baf698ba4c29d..565d0cda1290c 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.template.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.template.json @@ -1,5 +1,8 @@ { "Resources": { + "UsingDefaultStagingStacksynthesizedefaultresources": { + "Type": "AWS::CloudFormation::WaitConditionHandle" + }, "lambdas3ServiceRoleC9EDE33A": { "Type": "AWS::IAM::Role", "Properties": { diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/tree.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/tree.json index cafa81ab2083c..8a8a58861f679 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/tree.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/tree.json @@ -8,6 +8,18 @@ "id": "synthesize-default-resources", "path": "synthesize-default-resources", "children": { + "UsingDefaultStagingStack--synthesize-default-resources": { + "id": "UsingDefaultStagingStack--synthesize-default-resources", + "path": "synthesize-default-resources/UsingDefaultStagingStack--synthesize-default-resources", + "attributes": { + "aws:cdk:cloudformation:type": "AWS::CloudFormation::WaitConditionHandle", + "aws:cdk:cloudformation:props": {} + }, + "constructInfo": { + "fqn": "@aws-cdk/app-staging-synthesizer-alpha.UsingDefaultStagingStack", + "version": "0.0.0" + } + }, "lambda-s3": { "id": "lambda-s3", "path": "synthesize-default-resources/lambda-s3", @@ -1150,7 +1162,7 @@ } }, "constructInfo": { - "fqn": "aws-cdk-lib.Stack", + "fqn": "@aws-cdk/app-staging-synthesizer-alpha.DefaultStagingStack", "version": "0.0.0" } }, From 9ba2e4e573d51d7570cec4ea52ab603b8ea50939 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Mon, 19 Jun 2023 15:46:15 -0400 Subject: [PATCH 2/3] pr comments --- .../lib/default-staging-stack.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts b/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts index a6f3d3820515b..c9bc06cafaf0e 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts @@ -27,10 +27,13 @@ export const DEPLOY_TIME_PREFIX = 'deploy-time/'; /** * This is a dummy construct meant to signify that a stack is utilizing - * the DefaultStagingStack. It does not do anything, and is not meant - * to be created on its own. + * the AppStagingSynthesizer. It does not do anything, and is not meant + * to be created on its own. This construct will be a part of the + * construct tree only and not the Cfn template. The construct tree is + * then encoded in the AWS::CDK::Metadata resource of the stack and + * injested in our metrics like every other construct. */ -export class UsingDefaultStagingStack extends CfnWaitConditionHandle { +export class UsingAppStagingSynthesizer extends Construct { constructor(scope: Construct, id: string) { super(scope, id); } @@ -145,7 +148,7 @@ export class DefaultStagingStack extends Stack implements IStagingResources { // Because we do not keep metrics in the DefaultStagingStack, we will inject // a dummy construct into the stack using the DefaultStagingStack instead. if (cxapi.ANALYTICS_REPORTING_ENABLED_CONTEXT) { - new UsingDefaultStagingStack(stack, `UsingDefaultStagingStack/${stack.stackName}`); + new UsingAppStagingSynthesizer(stack, `UsingDefaultStagingStack/${stack.stackName}`); } const stackId = `StagingStack-${appId}-${context.environmentString}`; From d4178effe156a99c3a7703da9a45bf7d97116cb9 Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Mon, 19 Jun 2023 16:00:29 -0400 Subject: [PATCH 3/3] pr feedback/ --- .../lib/default-staging-stack.ts | 3 +-- .../test/app-staging-synthesizer.test.ts | 6 ++++++ .../manifest.json | 17 ++++++++++------- .../synthesize-default-resources.assets.json | 4 ++-- .../synthesize-default-resources.template.json | 3 --- .../tree.json | 16 ++++++---------- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts b/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts index c9bc06cafaf0e..86699ab115805 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/lib/default-staging-stack.ts @@ -8,7 +8,6 @@ import { App, ArnFormat, BootstraplessSynthesizer, - CfnWaitConditionHandle, DockerImageAssetSource, Duration, FileAssetSource, @@ -148,7 +147,7 @@ export class DefaultStagingStack extends Stack implements IStagingResources { // Because we do not keep metrics in the DefaultStagingStack, we will inject // a dummy construct into the stack using the DefaultStagingStack instead. if (cxapi.ANALYTICS_REPORTING_ENABLED_CONTEXT) { - new UsingAppStagingSynthesizer(stack, `UsingDefaultStagingStack/${stack.stackName}`); + new UsingAppStagingSynthesizer(stack, `UsingAppStagingSynthesizer/${stack.stackName}`); } const stackId = `StagingStack-${appId}-${context.environmentString}`; diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/app-staging-synthesizer.test.ts b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/app-staging-synthesizer.test.ts index 28ea67de70ef0..f71114c2888c6 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/app-staging-synthesizer.test.ts +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/app-staging-synthesizer.test.ts @@ -121,6 +121,12 @@ describe(AppStagingSynthesizer, () => { expect(depStack.stackName).toEqual(`StagingStack-${APP_ID}`); }); + test('stack has dummy construct for metrics', () => { + // WHEN + const dummyConstruct = stack.node.tryFindChild(`UsingAppStagingSynthesizer/${stack.stackName}`); + expect(dummyConstruct).toBeDefined(); + }); + test('add file asset', () => { // WHEN const location = stack.synthesizer.addFileAsset({ diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/manifest.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/manifest.json index 5222dfe67777d..b19112cce4b58 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/manifest.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/manifest.json @@ -20,7 +20,7 @@ "additionalDependencies": [ "synthesize-default-resources.assets" ], - "stackTemplateAssetObjectUrl": "s3://cdk-default-resources-staging-${AWS::AccountId}-${AWS::Region}/deploy-time/84a24ce989cf0c000ebee1bfd616e95a965eb13e58704752007b21368191978c.json", + "stackTemplateAssetObjectUrl": "s3://cdk-default-resources-staging-${AWS::AccountId}-${AWS::Region}/deploy-time/dc7275f639c45accfa2abc4842978bcb3b0c5f0b83fcde22015e344b2e008f26.json", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}", "lookupRole": { "arn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-lookup-role-${AWS::AccountId}-${AWS::Region}" @@ -31,12 +31,6 @@ "synthesize-default-resources.assets" ], "metadata": { - "/synthesize-default-resources/UsingDefaultStagingStack--synthesize-default-resources": [ - { - "type": "aws:cdk:logicalId", - "data": "UsingDefaultStagingStacksynthesizedefaultresources" - } - ], "/synthesize-default-resources/lambda-s3/ServiceRole/Resource": [ { "type": "aws:cdk:logicalId", @@ -84,6 +78,15 @@ "type": "aws:cdk:logicalId", "data": "lambdaecr2615DAF68" } + ], + "UsingDefaultStagingStacksynthesizedefaultresources": [ + { + "type": "aws:cdk:logicalId", + "data": "UsingDefaultStagingStacksynthesizedefaultresources", + "trace": [ + "!!DESTRUCTIVE_CHANGES: WILL_DESTROY" + ] + } ] }, "displayName": "synthesize-default-resources" diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.assets.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.assets.json index 7759c98ee5e18..5be26263eb8bd 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.assets.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.assets.json @@ -14,7 +14,7 @@ } } }, - "84a24ce989cf0c000ebee1bfd616e95a965eb13e58704752007b21368191978c": { + "dc7275f639c45accfa2abc4842978bcb3b0c5f0b83fcde22015e344b2e008f26": { "source": { "path": "synthesize-default-resources.template.json", "packaging": "file" @@ -22,7 +22,7 @@ "destinations": { "current_account-current_region": { "bucketName": "cdk-default-resources-staging-${AWS::AccountId}-${AWS::Region}", - "objectKey": "deploy-time/84a24ce989cf0c000ebee1bfd616e95a965eb13e58704752007b21368191978c.json", + "objectKey": "deploy-time/dc7275f639c45accfa2abc4842978bcb3b0c5f0b83fcde22015e344b2e008f26.json", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-default-resources-file-role-${AWS::Region}" } } diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.template.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.template.json index 565d0cda1290c..baf698ba4c29d 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.template.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/synthesize-default-resources.template.json @@ -1,8 +1,5 @@ { "Resources": { - "UsingDefaultStagingStacksynthesizedefaultresources": { - "Type": "AWS::CloudFormation::WaitConditionHandle" - }, "lambdas3ServiceRoleC9EDE33A": { "Type": "AWS::IAM::Role", "Properties": { diff --git a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/tree.json b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/tree.json index 8a8a58861f679..346aa11c699fe 100644 --- a/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/tree.json +++ b/packages/@aws-cdk/app-staging-synthesizer-alpha/test/integ.synth-default-resources.js.snapshot/tree.json @@ -8,15 +8,11 @@ "id": "synthesize-default-resources", "path": "synthesize-default-resources", "children": { - "UsingDefaultStagingStack--synthesize-default-resources": { - "id": "UsingDefaultStagingStack--synthesize-default-resources", - "path": "synthesize-default-resources/UsingDefaultStagingStack--synthesize-default-resources", - "attributes": { - "aws:cdk:cloudformation:type": "AWS::CloudFormation::WaitConditionHandle", - "aws:cdk:cloudformation:props": {} - }, + "UsingAppStagingSynthesizer--synthesize-default-resources": { + "id": "UsingAppStagingSynthesizer--synthesize-default-resources", + "path": "synthesize-default-resources/UsingAppStagingSynthesizer--synthesize-default-resources", "constructInfo": { - "fqn": "@aws-cdk/app-staging-synthesizer-alpha.UsingDefaultStagingStack", + "fqn": "@aws-cdk/app-staging-synthesizer-alpha.UsingAppStagingSynthesizer", "version": "0.0.0" } }, @@ -1179,7 +1175,7 @@ "path": "integ-tests/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.26" + "version": "10.2.52" } }, "DeployAssert": { @@ -1225,7 +1221,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.2.26" + "version": "10.2.52" } } },