From 4adfb4d4065419a84c01da30584f25c4002f480f Mon Sep 17 00:00:00 2001 From: Di Wu Date: Tue, 29 Oct 2024 12:20:33 -0700 Subject: [PATCH] keep the tags behavior on TableV2 --- .../aws-cdk-global-table.assets.json | 4 +-- .../aws-cdk-global-table.template.json | 8 +---- .../manifest.json | 2 +- .../tree.json | 10 ++---- .../aws-cdk-global-table.assets.json | 4 +-- .../aws-cdk-global-table.template.json | 12 ++++--- .../manifest.json | 2 +- .../tree.json | 16 ++++++---- .../test/integ.table-v2-global.ts | 14 +++----- .../aws-cdk-lib/aws-dynamodb/lib/table-v2.ts | 4 +-- .../aws-dynamodb/test/table-v2.test.ts | 32 +++++++++---------- 11 files changed, 50 insertions(+), 58 deletions(-) diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/aws-cdk-global-table.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/aws-cdk-global-table.assets.json index 3a9f78563fbff..edf92583f5036 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/aws-cdk-global-table.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/aws-cdk-global-table.assets.json @@ -1,7 +1,7 @@ { "version": "38.0.1", "files": { - "9ef81b5be13e5a6758d41eff3e003dba739ea0f7f9dceddeeaea06422aa3fac2": { + "cc5278f2745ed14e48839e10ba3e84d52a026101a039e164e937d90f16b69c34": { "source": { "path": "aws-cdk-global-table.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-us-east-1": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1", - "objectKey": "9ef81b5be13e5a6758d41eff3e003dba739ea0f7f9dceddeeaea06422aa3fac2.json", + "objectKey": "cc5278f2745ed14e48839e10ba3e84d52a026101a039e164e937d90f16b69c34.json", "region": "us-east-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-us-east-1" } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/aws-cdk-global-table.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/aws-cdk-global-table.template.json index f5e79aea3c910..e1e71ad2043c7 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/aws-cdk-global-table.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/aws-cdk-global-table.template.json @@ -124,13 +124,7 @@ "MaxReadRequestUnits": 222 }, "Region": "eu-west-1", - "TableClass": "STANDARD_INFREQUENT_ACCESS", - "Tags": [ - { - "Key": "primaryTableTagKey", - "Value": "primaryTableTagValue" - } - ] + "TableClass": "STANDARD_INFREQUENT_ACCESS" }, { "ContributorInsightsSpecification": { diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/manifest.json index 8b569bf46ca06..b5799752cf772 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/manifest.json @@ -19,7 +19,7 @@ "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-us-east-1", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-us-east-1", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1/9ef81b5be13e5a6758d41eff3e003dba739ea0f7f9dceddeeaea06422aa3fac2.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1/cc5278f2745ed14e48839e10ba3e84d52a026101a039e164e937d90f16b69c34.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/tree.json index 8ed36cfb96b54..ff85fbcbd863f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.dynamodb-v2.ondemand.js.snapshot/tree.json @@ -161,12 +161,6 @@ "pointInTimeRecoverySpecification": { "pointInTimeRecoveryEnabled": true }, - "tags": [ - { - "key": "primaryTableTagKey", - "value": "primaryTableTagValue" - } - ], "readOnDemandThroughputSettings": { "maxReadRequestUnits": 222 } @@ -276,7 +270,7 @@ "path": "aws-cdk-global-table-integ/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.3.0" + "version": "10.4.2" } }, "DeployAssert": { @@ -322,7 +316,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.3.0" + "version": "10.4.2" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/aws-cdk-global-table.assets.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/aws-cdk-global-table.assets.json index 8a39c623a2827..1e2172c91d4eb 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/aws-cdk-global-table.assets.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/aws-cdk-global-table.assets.json @@ -1,7 +1,7 @@ { "version": "38.0.1", "files": { - "ed60965669d381f108beb6a1e9435b0e3da69be86f285b978b6aea808720e9fd": { + "89bf0d3b593b71dd8b4f5f2ce39885b1ae01f8e385b5c3e50634ed481cebaa66": { "source": { "path": "aws-cdk-global-table.template.json", "packaging": "file" @@ -9,7 +9,7 @@ "destinations": { "current_account-us-east-1": { "bucketName": "cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1", - "objectKey": "ed60965669d381f108beb6a1e9435b0e3da69be86f285b978b6aea808720e9fd.json", + "objectKey": "89bf0d3b593b71dd8b4f5f2ce39885b1ae01f8e385b5c3e50634ed481cebaa66.json", "region": "us-east-1", "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-file-publishing-role-${AWS::AccountId}-us-east-1" } diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/aws-cdk-global-table.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/aws-cdk-global-table.template.json index 41b2ac8f90885..7c35bdb8fa94f 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/aws-cdk-global-table.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/aws-cdk-global-table.template.json @@ -149,8 +149,8 @@ "TableClass": "STANDARD_INFREQUENT_ACCESS", "Tags": [ { - "Key": "primaryTableTagKey", - "Value": "USE2Replica" + "Key": "tagAspectKey", + "Value": "tagAspectValue" }, { "Key": "USE2ReplicaTagKey", @@ -189,8 +189,8 @@ "TableClass": "STANDARD", "Tags": [ { - "Key": "primaryTableTagKey", - "Value": "primaryTableTagValue" + "Key": "tagAspectKey", + "Value": "tagAspectValue" }, { "Key": "USW2ReplicaTagKey", @@ -239,6 +239,10 @@ "Region": "us-east-1", "TableClass": "STANDARD_INFREQUENT_ACCESS", "Tags": [ + { + "Key": "tagAspectKey", + "Value": "tagAspectValue" + }, { "Key": "primaryTableTagKey", "Value": "primaryTableTagValue" diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/manifest.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/manifest.json index 8c299166462e3..fec4c1c921d7d 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/manifest.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/manifest.json @@ -19,7 +19,7 @@ "notificationArns": [], "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-us-east-1", "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-us-east-1", - "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1/ed60965669d381f108beb6a1e9435b0e3da69be86f285b978b6aea808720e9fd.json", + "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-us-east-1/89bf0d3b593b71dd8b4f5f2ce39885b1ae01f8e385b5c3e50634ed481cebaa66.json", "requiresBootstrapStackVersion": 6, "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version", "additionalDependencies": [ diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/tree.json b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/tree.json index c98945a52caad..999a89164b5b5 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/tree.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.js.snapshot/tree.json @@ -188,8 +188,8 @@ }, "tags": [ { - "key": "primaryTableTagKey", - "value": "USE2Replica" + "key": "tagAspectKey", + "value": "tagAspectValue" }, { "key": "USE2ReplicaTagKey", @@ -228,8 +228,8 @@ }, "tags": [ { - "key": "primaryTableTagKey", - "value": "primaryTableTagValue" + "key": "tagAspectKey", + "value": "tagAspectValue" }, { "key": "USW2ReplicaTagKey", @@ -278,6 +278,10 @@ "readCapacityUnits": 10 }, "tags": [ + { + "key": "tagAspectKey", + "value": "tagAspectValue" + }, { "key": "primaryTableTagKey", "value": "primaryTableTagValue" @@ -355,7 +359,7 @@ "path": "aws-cdk-global-table-integ/DefaultTest/Default", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.3.0" + "version": "10.4.2" } }, "DeployAssert": { @@ -401,7 +405,7 @@ "path": "Tree", "constructInfo": { "fqn": "constructs.Construct", - "version": "10.3.0" + "version": "10.4.2" } } }, diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.ts b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.ts index cf51c7ba4e13c..5411c61aec2e3 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.ts +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-dynamodb/test/integ.table-v2-global.ts @@ -1,5 +1,5 @@ import { IntegTest } from '@aws-cdk/integ-tests-alpha'; -import { App, RemovalPolicy, Stack, StackProps } from 'aws-cdk-lib'; +import { App, RemovalPolicy, Stack, StackProps, Tags } from 'aws-cdk-lib'; import { AttributeType, Billing, Capacity, TableV2, TableClass, TableEncryptionV2 } from 'aws-cdk-lib/aws-dynamodb'; import { Stream } from 'aws-cdk-lib/aws-kinesis'; import { Construct } from 'constructs'; @@ -10,7 +10,7 @@ class TestStack extends Stack { const stream = new Stream(this, 'Stream'); - new TableV2(this, 'GlobalTable', { + const globalTable = new TableV2(this, 'GlobalTable', { tableName: 'my-global-table', partitionKey: { name: 'pk', type: AttributeType.STRING }, sortKey: { name: 'sk', type: AttributeType.NUMBER }, @@ -52,13 +52,7 @@ class TestStack extends Stack { contributorInsights: false, }, }, - tags: [{ - key: 'USE2ReplicaTagKey', - value: 'USE2ReplicaTagValue', - }, { - key: 'primaryTableTagKey', - value: 'USE2Replica', - }], + tags: [{ key: 'USE2ReplicaTagKey', value: 'USE2ReplicaTagValue' }], }, { region: 'us-west-2', @@ -74,6 +68,8 @@ class TestStack extends Stack { ], tags: [{ key: 'primaryTableTagKey', value: 'primaryTableTagValue' }], }); + + Tags.of(globalTable).add('tagAspectKey', 'tagAspectValue'); } } diff --git a/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts b/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts index ad76cb92bdcbd..ac79fb6fad792 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/lib/table-v2.ts @@ -160,7 +160,7 @@ export interface TableOptionsV2 { readonly kinesisStream?: IStream; /** - * Tags to be applied to the table or replica table + * Tags to be applied to the primary table (default replica table). * * @default - no tags */ @@ -533,7 +533,7 @@ export class TableV2 extends TableBaseV2 { this.partitionKey = props.partitionKey; this.hasSortKey = props.sortKey !== undefined; this.region = this.stack.region; - this.tags = new TagManager(TagType.STANDARD, CfnGlobalTable.CFN_RESOURCE_TYPE_NAME, props.tags); + this.tags = new TagManager(TagType.STANDARD, CfnGlobalTable.CFN_RESOURCE_TYPE_NAME); this.encryption = props.encryption; this.encryptionKey = this.encryption?.tableKey; diff --git a/packages/aws-cdk-lib/aws-dynamodb/test/table-v2.test.ts b/packages/aws-cdk-lib/aws-dynamodb/test/table-v2.test.ts index b5ee275e8b645..8979c454e662d 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/test/table-v2.test.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/test/table-v2.test.ts @@ -777,10 +777,7 @@ describe('table', () => { KMSMasterKeyId: 'arn:aws:kms:us-east-1:123456789012:key/g24efbna-az9b-42ro-m3bp-cq249l94fca6', }, TableClass: 'STANDARD_INFREQUENT_ACCESS', - Tags: [ - { Key: 'USW2Key', Value: 'USW2Value' }, - { Key: 'USE1Key', Value: 'USE1Value' }, - ], + Tags: [{ Key: 'USE1Key', Value: 'USE1Value' }], }, { ContributorInsightsSpecification: { @@ -816,10 +813,7 @@ describe('table', () => { KMSMasterKeyId: 'arn:aws:kms:us-east-2:123456789012:key/g24efbna-az9b-42ro-m3bp-cq249l94fca6', }, TableClass: 'STANDARD', - Tags: [ - { Key: 'USW2Key', Value: 'USW2Value' }, - { Key: 'USE2Key', Value: 'USE2Value' }, - ], + Tags: [{ Key: 'USE2Key', Value: 'USE2Value' }], }, { ContributorInsightsSpecification: { @@ -1328,7 +1322,7 @@ describe('replica tables', () => { }); }); - test('replica tags override global table tags', () => { + test('replica tags override tag aspect tags', () => { // GIVEN const stack = new Stack(undefined, 'Stack', { env: { region: 'us-east-1' } }); @@ -1337,12 +1331,14 @@ describe('replica tables', () => { partitionKey: { name: 'pk', type: AttributeType.STRING }, replicas: [{ region: 'us-west-1', - tags: [{ key: 'tableTagProperty', value: 'replicaTagPropertyValue' }], + tags: [{ key: 'tableTagProperty', value: 'replicaW1TagPropertyValue' }], + }, { + region: 'us-west-2', }], - tags: [{ key: 'tableTagProperty', value: 'globalTagPropertyValue' }], + tags: [{ key: 'tableTagProperty', value: 'defaultReplicaTagPropertyValue' }], }); - Tags.of(table).add('tagAspect', 'tagAspectValue'); + Tags.of(table).add('tableTagProperty', 'tagAspectValue'); // THEN Template.fromStack(stack).hasResourceProperties('AWS::DynamoDB::GlobalTable', { @@ -1350,15 +1346,19 @@ describe('replica tables', () => { { Region: 'us-west-1', Tags: [ - { Key: 'tableTagProperty', Value: 'replicaTagPropertyValue' }, - { Key: 'tagAspect', Value: 'tagAspectValue' }, + { Key: 'tableTagProperty', Value: 'replicaW1TagPropertyValue' }, + ], + }, + { + Region: 'us-west-2', + Tags: [ + { Key: 'tableTagProperty', Value: 'tagAspectValue' }, ], }, { Region: 'us-east-1', Tags: [ - { Key: 'tableTagProperty', Value: 'globalTagPropertyValue' }, - { Key: 'tagAspect', Value: 'tagAspectValue' }, + { Key: 'tableTagProperty', Value: 'defaultReplicaTagPropertyValue' }, ], }, ],