From 5b64bb8538bf28ac739341165648a347cf15dd7e Mon Sep 17 00:00:00 2001 From: AWS CDK Team Date: Wed, 26 Nov 2025 13:20:07 +0000 Subject: [PATCH 1/2] chore(release): 2.230.0 --- CHANGELOG.v2.alpha.md | 19 ++ CHANGELOG.v2.md | 18 ++ .../lib/image-pipeline.ts | 4 + .../lib/lifecycle-policy.ts | 3 + .../core/lib/analytics-data-source/classes.ts | 187 +++++++++++++++++- .../core/lib/analytics-data-source/enums.ts | 29 +++ .../enums/module-enumlikes.json | 2 + .../enums/module-enums.json | 35 ++++ version.v2.json | 4 +- 9 files changed, 298 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.v2.alpha.md b/CHANGELOG.v2.alpha.md index d98f4ca848590..1c0ecd7023a22 100644 --- a/CHANGELOG.v2.alpha.md +++ b/CHANGELOG.v2.alpha.md @@ -2,6 +2,25 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.230.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.229.1-alpha.0...v2.230.0-alpha.0) (2025-11-26) + + +### Features + +* **bedrock-agentcore-alpha:** update resources on grantInvokeXXX for runtime ([#35864](https://github.com/aws/aws-cdk/issues/35864)) ([5dad62f](https://github.com/aws/aws-cdk/commit/5dad62f94c1a9f02c5fda1df7aa105e14630beb3)) +* **imagebuilder-alpha:** add support for Image Pipeline Construct ([#36153](https://github.com/aws/aws-cdk/issues/36153)) ([d8c324a](https://github.com/aws/aws-cdk/commit/d8c324ae31db5997f9511e3f43affceea57d86c3)), closes [aws/aws-cdk-rfcs#789](https://github.com/aws/aws-cdk-rfcs/issues/789) [aws/aws-cdk-rfcs#789](https://github.com/aws/aws-cdk-rfcs/issues/789) +* **imagebuilder-alpha:** add support for Lifecycle Policy Construct ([#36152](https://github.com/aws/aws-cdk/issues/36152)) ([7e31eb6](https://github.com/aws/aws-cdk/commit/7e31eb6a310344634fefa0651bf55c7493fc09bd)), closes [aws/aws-cdk-rfcs#789](https://github.com/aws/aws-cdk-rfcs/issues/789) [aws/aws-cdk-rfcs#789](https://github.com/aws/aws-cdk-rfcs/issues/789) +* **mixins-preview:** adds LogDelivery Mixins for 47 resources ([#36158](https://github.com/aws/aws-cdk/issues/36158)) ([6607ce9](https://github.com/aws/aws-cdk/commit/6607ce95256acda86107fa30b1f000a9dc189df7)) +* **mixins-preview:** vended log deliveries ([#36138](https://github.com/aws/aws-cdk/issues/36138)) ([69442a8](https://github.com/aws/aws-cdk/commit/69442a88b16b39d485bf7ec57d520599c564a612)) +* **mixins-preview:** helpers to generate EventBridge event patterns for 26 services ([#36121](https://github.com/aws/aws-cdk/issues/36121)) ([073185d](https://github.com/aws/aws-cdk/commit/073185d46e5d8a95915579013d1ef8fe47e6343c)) + + +### Bug Fixes + +* **mixins-preview:** `AutoDeleteObjects` mixin fails with cannot find file error ([#36188](https://github.com/aws/aws-cdk/issues/36188)) ([3ef337d](https://github.com/aws/aws-cdk/commit/3ef337dba5d9f6f13ca8faa84376bd9177a7ecbd)), closes [aws-cdk/mixins-preview/lib/custom-resource-handlers/aws-s3/auto-delete-objects-provider.ts#L21](https://github.com/aws-cdk/mixins-preview/lib/custom-resource-handlers/aws-s3/auto-delete-objects-provider.ts/issues/L21) +* **mixins-preview:** `ResourcePolicy with this name already exists` error when setting up `LogDelivery` ([#36195](https://github.com/aws/aws-cdk/issues/36195)) ([f9aa31d](https://github.com/aws/aws-cdk/commit/f9aa31d021400aee8e172b3b0c949cd2d00473f7)) +* **mixins-preview:** cannot use string literal types for `S3LogsDeliveryProps.permissionsVersion` ([#36197](https://github.com/aws/aws-cdk/issues/36197)) ([cc491df](https://github.com/aws/aws-cdk/commit/cc491df13f6a4e62e0233b90dcc636efa34e32d7)) + ## [2.229.1-alpha.0](https://github.com/aws/aws-cdk/compare/v2.229.0-alpha.0...v2.229.1-alpha.0) (2025-11-25) ## [2.229.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.228.0-alpha.0...v2.229.0-alpha.0) (2025-11-24) diff --git a/CHANGELOG.v2.md b/CHANGELOG.v2.md index d5dc2441e1691..9ee0193f1681d 100644 --- a/CHANGELOG.v2.md +++ b/CHANGELOG.v2.md @@ -2,6 +2,24 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.230.0](https://github.com/aws/aws-cdk/compare/v2.229.1...v2.230.0) (2025-11-26) + + +### Features + +* **apigateway:** support response streaming with response transfer mode ([#36155](https://github.com/aws/aws-cdk/issues/36155)) ([f431021](https://github.com/aws/aws-cdk/commit/f4310219ae134a03693330cb55da5fa1cb789c48)), closes [#36156](https://github.com/aws/aws-cdk/issues/36156) +* update L1 CloudFormation resource definitions ([f203b8e](https://github.com/aws/aws-cdk/commit/f203b8e2d1af592b70bfe8d1cafc496c5a28b0df)) +* update L1 CloudFormation resource definitions ([#36193](https://github.com/aws/aws-cdk/issues/36193)) ([d074024](https://github.com/aws/aws-cdk/commit/d0740240d4dc52524faa8328467c92c360f52cc8)) +* **events:** the L2 `EventPattern` interfaces can be used with `CfnRule` ([#36191](https://github.com/aws/aws-cdk/issues/36191)) ([efc135e](https://github.com/aws/aws-cdk/commit/efc135e60cacc55ccdf3b347c08fb78e5b735d3d)) +* update L1 CloudFormation resource definitions ([#36180](https://github.com/aws/aws-cdk/issues/36180)) ([5cddd7e](https://github.com/aws/aws-cdk/commit/5cddd7ec34392198436710635bcee1921ce35d10)) + + +### Bug Fixes + +* **ecs:** wrong ARN generated in `Cluster.grantTaskProtection` method ([#36207](https://github.com/aws/aws-cdk/issues/36207)) ([9b337df](https://github.com/aws/aws-cdk/commit/9b337dfe2ca0a3920f9542802da73b670915fe01)) +* **ecs-patterns:** target group ID changes without setting feature flag ([#36199](https://github.com/aws/aws-cdk/issues/36199)) ([b7ca082](https://github.com/aws/aws-cdk/commit/b7ca082ec460db7eccd96661623fb7f7cb26c34e)), closes [#36149](https://github.com/aws/aws-cdk/issues/36149) +* **scheduler:** wrong ARN generated in `ScheduleGroup.grant*` methods ([#36175](https://github.com/aws/aws-cdk/issues/36175)) ([eae8838](https://github.com/aws/aws-cdk/commit/eae88380aa71bd841279fdfa37120ed244dd5eae)) + ## [2.229.1](https://github.com/aws/aws-cdk/compare/v2.229.0...v2.229.1) (2025-11-25) diff --git a/packages/@aws-cdk/aws-imagebuilder-alpha/lib/image-pipeline.ts b/packages/@aws-cdk/aws-imagebuilder-alpha/lib/image-pipeline.ts index 6d47d4b0484f6..ad37f0d9d6438 100644 --- a/packages/@aws-cdk/aws-imagebuilder-alpha/lib/image-pipeline.ts +++ b/packages/@aws-cdk/aws-imagebuilder-alpha/lib/image-pipeline.ts @@ -4,6 +4,7 @@ import * as events from 'aws-cdk-lib/aws-events'; import * as iam from 'aws-cdk-lib/aws-iam'; import { CfnImagePipeline } from 'aws-cdk-lib/aws-imagebuilder'; import * as logs from 'aws-cdk-lib/aws-logs'; +import { addConstructMetadata, MethodMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; import { propertyInjectable } from 'aws-cdk-lib/core/lib/prop-injectable'; import { Construct } from 'constructs'; import { IDistributionConfiguration } from './distribution-configuration'; @@ -636,6 +637,8 @@ export class ImagePipeline extends ImagePipelineBase { }).toLowerCase(), // Enforce lowercase for the auto-generated fallback }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); Object.defineProperty(this, IMAGE_PIPELINE_SYMBOL, { value: true }); @@ -699,6 +702,7 @@ export class ImagePipeline extends ImagePipelineBase { * * @param grantee The execution role used for the image build. */ + @MethodMetadata() public grantDefaultExecutionRolePermissions(grantee: iam.IGrantable): iam.Grant[] { const policies = defaultExecutionRolePolicy(this, this.props); return policies.map((policy) => diff --git a/packages/@aws-cdk/aws-imagebuilder-alpha/lib/lifecycle-policy.ts b/packages/@aws-cdk/aws-imagebuilder-alpha/lib/lifecycle-policy.ts index 5d215063baed2..a3279370ce9e3 100644 --- a/packages/@aws-cdk/aws-imagebuilder-alpha/lib/lifecycle-policy.ts +++ b/packages/@aws-cdk/aws-imagebuilder-alpha/lib/lifecycle-policy.ts @@ -1,6 +1,7 @@ import * as cdk from 'aws-cdk-lib'; import * as iam from 'aws-cdk-lib/aws-iam'; import { CfnLifecyclePolicy } from 'aws-cdk-lib/aws-imagebuilder'; +import { addConstructMetadata } from 'aws-cdk-lib/core/lib/metadata-resource'; import { propertyInjectable } from 'aws-cdk-lib/core/lib/prop-injectable'; import { Construct } from 'constructs'; import { IRecipeBase } from './recipe-base'; @@ -432,6 +433,8 @@ export class LifecyclePolicy extends LifecyclePolicyBase { }).toLowerCase(), }), }); + // Enhanced CDK Analytics Telemetry + addConstructMetadata(this, props); Object.defineProperty(this, LIFECYCLE_POLICY_SYMBOL, { value: true }); diff --git a/packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts b/packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts index d0baf91abfdf1..a871da58c3c1b 100644 --- a/packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts +++ b/packages/aws-cdk-lib/core/lib/analytics-data-source/classes.ts @@ -2160,6 +2160,124 @@ export const AWS_CDK_CONSTRUCTOR_PROPS: { [key: string]: any } = { } ] }, + 'ImagePipeline': { + 'recipe': { + 'stack': '*', + 'node': '*', + 'env': { + 'account': '*', + 'region': '*' + } + }, + 'imagePipelineName': '*', + 'description': '*', + 'schedule': { + 'expression': '*', + 'autoDisableFailureCount': '*', + 'startCondition': 'ScheduleStartCondition' + }, + 'status': 'ImagePipelineStatus', + 'infrastructureConfiguration': { + 'infrastructureConfigurationArn': '*', + 'infrastructureConfigurationName': '*', + 'stack': '*', + 'node': '*', + 'env': { + 'account': '*', + 'region': '*' + } + }, + 'distributionConfiguration': { + 'distributionConfigurationArn': '*', + 'distributionConfigurationName': '*', + 'stack': '*', + 'node': '*', + 'env': { + 'account': '*', + 'region': '*' + } + }, + 'workflows': { + 'workflow': { + 'workflowArn': '*', + 'workflowName': '*', + 'workflowType': '*', + 'workflowVersion': '*', + 'stack': '*', + 'node': '*', + 'env': { + 'account': '*', + 'region': '*' + } + }, + 'onFailure': 'WorkflowOnFailure', + 'parallelGroup': '*', + 'parameters': '*' + }, + 'executionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'node': '*', + 'env': { + 'account': '*', + 'region': '*' + } + }, + 'imagePipelineLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'stack': '*', + 'node': '*' + }, + 'imageLogGroup': { + 'logGroupArn': '*', + 'logGroupName': '*', + 'env': { + 'account': '*', + 'region': '*' + }, + 'stack': '*', + 'node': '*' + }, + 'imageScanningEnabled': 'boolean', + 'imageScanningEcrRepository': { + 'repositoryName': '*', + 'repositoryArn': '*', + 'repositoryUri': '*', + 'registryUri': '*', + 'stack': '*', + 'node': '*', + 'env': { + 'account': '*', + 'region': '*' + } + }, + 'imageScanningEcrTags': '*', + 'enhancedImageMetadataEnabled': 'boolean', + 'imageTestsEnabled': 'boolean', + 'tags': '*', + 'grantDefaultExecutionRolePermissions': [ + { + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*' + } + } + ] + }, 'ImageRecipe': { 'baseImage': '*', 'imageRecipeName': '*', @@ -2363,6 +2481,69 @@ export const AWS_CDK_CONSTRUCTOR_PROPS: { [key: string]: any } = { } ] }, + 'LifecyclePolicy': { + 'resourceType': 'LifecyclePolicyResourceType', + 'details': { + 'action': { + 'type': 'LifecyclePolicyActionType', + 'includeAmis': 'boolean', + 'includeContainers': 'boolean', + 'includeSnapshots': 'boolean' + }, + 'filter': { + 'ageFilter': { + 'age': '*', + 'retainAtLeast': '*' + }, + 'countFilter': { + 'count': '*' + } + }, + 'exclusionRules': { + 'imageExclusionRules': { + 'tags': '*' + }, + 'amiExclusionRules': { + 'isPublic': 'boolean', + 'regions': '*', + 'sharedAccounts': '*', + 'tags': '*' + } + } + }, + 'resourceSelection': { + 'recipes': { + 'stack': '*', + 'node': '*', + 'env': { + 'account': '*', + 'region': '*' + } + }, + 'tags': '*' + }, + 'lifecyclePolicyName': '*', + 'description': '*', + 'status': 'LifecyclePolicyStatus', + 'executionRole': { + 'roleArn': '*', + 'roleName': '*', + 'assumeRoleAction': '*', + 'policyFragment': '*', + 'principalAccount': '*', + 'grantPrincipal': { + 'assumeRoleAction': '*', + 'principalAccount': '*' + }, + 'stack': '*', + 'node': '*', + 'env': { + 'account': '*', + 'region': '*' + } + }, + 'tags': '*' + }, 'Workflow': { 'data': '*', 'workflowType': 'WorkflowType', @@ -6479,7 +6660,8 @@ export const AWS_CDK_CONSTRUCTOR_PROPS: { [key: string]: any } = { 'connectionType': 'ConnectionType', 'vpcLink': { 'vpcLinkId': '*' - } + }, + 'responseTransferMode': 'ResponseTransferMode' }, 'proxy': 'boolean', 'options': { @@ -30155,5 +30337,8 @@ export const AWS_CDK_CONSTRUCTOR_PROPS: { [key: string]: any } = { } ] } + }, + 'lib.services': { + 'ResourcePolicy': {} } }; diff --git a/packages/aws-cdk-lib/core/lib/analytics-data-source/enums.ts b/packages/aws-cdk-lib/core/lib/analytics-data-source/enums.ts index 3653684ea04a2..613a84158835f 100644 --- a/packages/aws-cdk-lib/core/lib/analytics-data-source/enums.ts +++ b/packages/aws-cdk-lib/core/lib/analytics-data-source/enums.ts @@ -1788,6 +1788,10 @@ export const AWS_CDK_ENUMS: { [key: string]: any } = { "ubuntu-18.04-x86_64", "ubuntu-22.04-x86_64" ], + "ImagePipelineStatus": [ + "ENABLED", + "DISABLED" + ], "ImagePullPolicy": [ "Always", "IfNotPresent", @@ -2482,6 +2486,19 @@ export const AWS_CDK_ENUMS: { [key: string]: any } = { "AFTER_270_DAYS", "AFTER_365_DAYS" ], + "LifecyclePolicyActionType": [ + "DELETE", + "DEPRECATE", + "DISABLE" + ], + "LifecyclePolicyResourceType": [ + "AMI_IMAGE", + "CONTAINER_IMAGE" + ], + "LifecyclePolicyStatus": [ + "ENABLED", + "DISABLED" + ], "LifecycleTransition": [ "autoscaling:EC2_INSTANCE_LAUNCHING", "autoscaling:EC2_INSTANCE_TERMINATING" @@ -3353,6 +3370,10 @@ export const AWS_CDK_ENUMS: { [key: string]: any } = { "ResourceToReplicateTags": [ "lambda-function" ], + "ResponseTransferMode": [ + "BUFFERED", + "STREAM" + ], "RestApiMode": [ "overwrite", "merge" @@ -3450,6 +3471,10 @@ export const AWS_CDK_ENUMS: { [key: string]: any } = { "SSE-S3", "SSE-KMS" ], + "S3LogsDeliveryPermissionsVersion": [ + "V1", + "V2" + ], "S3OutputFormat": [ "plain", "json", @@ -3487,6 +3512,10 @@ export const AWS_CDK_ENUMS: { [key: string]: any } = { "AddToLoadBalancer", "InstanceRefresh" ], + "ScheduleStartCondition": [ + "EXPRESSION_MATCH_ONLY", + "EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE" + ], "SchemaDefinitionType": [ "string", "number", diff --git a/packages/aws-cdk-lib/core/lib/analytics-data-source/enums/module-enumlikes.json b/packages/aws-cdk-lib/core/lib/analytics-data-source/enums/module-enumlikes.json index 9e92256908c55..3262e525a19e1 100644 --- a/packages/aws-cdk-lib/core/lib/analytics-data-source/enums/module-enumlikes.json +++ b/packages/aws-cdk-lib/core/lib/analytics-data-source/enums/module-enumlikes.json @@ -797,6 +797,7 @@ "ANTHROPIC_CLAUDE_3_OPUS_20240229_V1_0_200K", "ANTHROPIC_CLAUDE_OPUS_4_20250514_V1_0", "ANTHROPIC_CLAUDE_OPUS_4_1_20250805_V1_0", + "ANTHROPIC_CLAUDE_OPUS_4_5_20251101_V1_0", "ANTHROPIC_CLAUDE_INSTANT_V1", "ANTHROPIC_CLAUDE_INSTANT_V1_2_100K", "COHERE_COMMAND_V14", @@ -2792,6 +2793,7 @@ "VER_16_8_LIMITLESS", "VER_16_9", "VER_16_9_LIMITLESS", + "VER_16_10", "VER_17_1", "VER_17_2", "VER_17_4", diff --git a/packages/aws-cdk-lib/core/lib/analytics-data-source/enums/module-enums.json b/packages/aws-cdk-lib/core/lib/analytics-data-source/enums/module-enums.json index 46e3d8ac043ef..f6322b1b8d9f8 100644 --- a/packages/aws-cdk-lib/core/lib/analytics-data-source/enums/module-enums.json +++ b/packages/aws-cdk-lib/core/lib/analytics-data-source/enums/module-enums.json @@ -687,6 +687,16 @@ "ECR" ] }, + "aws-cdk/packages/@aws-cdk/aws-imagebuilder-alpha/lib/image-pipeline.ts": { + "ScheduleStartCondition": [ + "EXPRESSION_MATCH_ONLY", + "EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE" + ], + "ImagePipelineStatus": [ + "ENABLED", + "DISABLED" + ] + }, "aws-cdk/packages/@aws-cdk/aws-imagebuilder-alpha/lib/infrastructure-configuration.ts": { "HttpTokens": [ "optional", @@ -698,6 +708,21 @@ "host" ] }, + "aws-cdk/packages/@aws-cdk/aws-imagebuilder-alpha/lib/lifecycle-policy.ts": { + "LifecyclePolicyActionType": [ + "DELETE", + "DEPRECATE", + "DISABLE" + ], + "LifecyclePolicyStatus": [ + "ENABLED", + "DISABLED" + ], + "LifecyclePolicyResourceType": [ + "AMI_IMAGE", + "CONTAINER_IMAGE" + ] + }, "aws-cdk/packages/@aws-cdk/aws-imagebuilder-alpha/lib/os-version.ts": { "Platform": [ "Linux", @@ -1209,6 +1234,12 @@ "merge" ] }, + "aws-cdk/packages/@aws-cdk/mixins-preview/lib/services/aws-logs/logs-delivery.ts": { + "S3LogsDeliveryPermissionsVersion": [ + "V1", + "V2" + ] + }, "aws-cdk/packages/aws-cdk-lib/assets/lib/fs/follow-mode.ts": { "FollowMode": [ "never", @@ -1224,6 +1255,10 @@ ] }, "aws-cdk/packages/aws-cdk-lib/aws-apigateway/lib/integration.ts": { + "ResponseTransferMode": [ + "BUFFERED", + "STREAM" + ], "ContentHandling": [ "CONVERT_TO_BINARY", "CONVERT_TO_TEXT" diff --git a/version.v2.json b/version.v2.json index cc9f39f8ab897..09e4ad5e55713 100644 --- a/version.v2.json +++ b/version.v2.json @@ -1,4 +1,4 @@ { - "version": "2.229.1", - "alphaVersion": "2.229.1-alpha.0" + "version": "2.230.0", + "alphaVersion": "2.230.0-alpha.0" } \ No newline at end of file From 8e311567c77bee0c39e94ee8a65906ce5993ce49 Mon Sep 17 00:00:00 2001 From: Leon Michalski Date: Wed, 26 Nov 2025 16:34:31 +0100 Subject: [PATCH 2/2] chore(mixins-preview): do not extend event metadata (#36214) ### Issue # (if applicable) Closes #. ### Reason for this change Remove the detail interface that was extending the `cdk.AWSEventMetadataProps` as extending creates problems in python. ### Description of changes Before ``` export interface ObjectCreatedDetail { readonly bucket?: BucketEvents.ObjectCreated.Bucket; ...otherfields } export interface PatternProps extends BucketEvents.ObjectCreated.ObjectCreatedDetail { readonly eventMetadata?: cdk.AWSEventMetadataProps; } ``` After this change: ``` export interface ObjectCreatedProps { readonly eventMetadata?: cdk.AWSEventMetadataProps; readonly bucket?: BucketEvents.ObjectCreated.Bucket; ...otherfields } ``` The Pattern functions have been updated to: ``` public workSpacesAccessPattern(options?: WorkspaceEvents.WorkSpacesAccess.WorkSpacesAccessProps): events.EventPattern { return { source: ["aws.workspaces"], detailType: ["WorkSpaces Access"], detail: convertWorkSpacesAccessDetailToEventPattern(options, this.workspaceRef), version: options?.eventMetadata?.version, resources: options?.eventMetadata?.resources, region: options?.eventMetadata?.region }; } ``` And the `convertWorkSpacesAccessDetailToEventPattern` functions ignore the `eventMetadata` property. ### Describe any new or updated permissions being added ### Description of how you validated changes Added unit test to ensure that the metadata was still being passed to the `EventPattern` ### Checklist - [X] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md) ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license* Co-authored-by: Leon Michalski --- .../scripts/spec2eventbridge/builder.ts | 58 ++++++++----------- .../mixins-preview/test/events/l1-l2.test.ts | 30 ++++++++++ 2 files changed, 54 insertions(+), 34 deletions(-) diff --git a/packages/@aws-cdk/mixins-preview/scripts/spec2eventbridge/builder.ts b/packages/@aws-cdk/mixins-preview/scripts/spec2eventbridge/builder.ts index b9d75c83a3209..82999d000c73c 100644 --- a/packages/@aws-cdk/mixins-preview/scripts/spec2eventbridge/builder.ts +++ b/packages/@aws-cdk/mixins-preview/scripts/spec2eventbridge/builder.ts @@ -179,6 +179,7 @@ class EventBridgeEventsClass extends ClassType { eventNsName, event, typeDef, + addMetadata, }: { /** The interface or struct to add properties to */ target: InterfaceType | StructType; @@ -194,6 +195,7 @@ class EventBridgeEventsClass extends ClassType { event: Event; /** Type definition for resource field identification */ typeDef: TypeDefinition; + addMetadata: boolean; }): FreeFunction { const propertyMappings = new Map(); const module = Module.of(this); @@ -228,6 +230,18 @@ class EventBridgeEventsClass extends ClassType { }, }); } + if (addMetadata) { + target.addProperty({ + name: 'eventMetadata', + type: CDK_CORE.AWSEventMetadataProps, + optional: true, + immutable: true, + docs: { + summary: 'EventBridge event metadata', + default: '-', + }, + }); + } // Generate converter function const converterFunction = new FreeFunction(module, { @@ -329,6 +343,7 @@ class EventBridgeEventsClass extends ClassType { eventNsName, event, typeDef, + addMetadata: false, }); } }; @@ -364,10 +379,10 @@ class EventBridgeEventsClass extends ClassType { // Create detail interface with event properties const detailInterface = new InterfaceType(eventNamespace, { - name: `${namespaceName}Detail`, + name: `${namespaceName}Props`, export: true, docs: { - summary: `Detail type for ${this.resource.name} ${event.name} event`, + summary: `Props type for ${this.resource.name} ${event.name} event`, }, }); @@ -380,26 +395,7 @@ class EventBridgeEventsClass extends ClassType { eventNsName: namespaceName, event, typeDef: rootProperty, - }); - - // Create pattern props interface extending detail with metadata - const propInterface = new InterfaceType(eventNamespace, { - name: 'PatternProps', - export: true, - extends: [detailInterface.type], - docs: { - summary: `Properties for ${this.resource.name} ${event.name} event pattern`, - }, - }); - propInterface.addProperty({ - name: 'eventMetadata', - type: CDK_CORE.AWSEventMetadataProps, - optional: true, - immutable: true, - docs: { - summary: 'EventBridge event metadata', - default: '-', - }, + addMetadata: true, }); // Create event pattern method that returns events.EventPattern @@ -411,27 +407,21 @@ class EventBridgeEventsClass extends ClassType { summary: `EventBridge event pattern for ${this.resource.name} ${event.detailType}`, }, }); - const eventPatternMethodParam = eventPatternMethod.addParameter({ + eventPatternMethod.addParameter({ name: 'options', - type: propInterface.type, + type: detailInterface.type, optional: true, }); - const eventMetadata = expr.ident('eventMetadata'); - eventPatternMethod.addBody( - stmt.constVar( - expr.destructuringObject(eventMetadata, expr.directCode('...obj')), - expr.binOp(expr.ident(eventPatternMethodParam.spec.name), '||', expr.lit({})), - ), stmt.ret( expr.object({ source: expr.list([expr.lit(event.source)]), detailType: expr.list([expr.lit(event.detailType)]), - detail: expr.ident(converterFunction.name).call(expr.ident('obj'), expr.this_().prop(this.referenceName)), - version: expr.directCode('eventMetadata?.version'), - resources: expr.directCode('eventMetadata?.resources'), - region: expr.directCode('eventMetadata?.region'), + detail: expr.ident(converterFunction.name).call(expr.ident('options'), expr.this_().prop(this.referenceName)), + version: expr.directCode('options?.eventMetadata?.version'), + resources: expr.directCode('options?.eventMetadata?.resources'), + region: expr.directCode('options?.eventMetadata?.region'), }), ), ); diff --git a/packages/@aws-cdk/mixins-preview/test/events/l1-l2.test.ts b/packages/@aws-cdk/mixins-preview/test/events/l1-l2.test.ts index 43f083db0752b..b426feaeff4be 100644 --- a/packages/@aws-cdk/mixins-preview/test/events/l1-l2.test.ts +++ b/packages/@aws-cdk/mixins-preview/test/events/l1-l2.test.ts @@ -153,6 +153,36 @@ describe.each([ }, }); }); + + test('should always have a bucketRef when empty props is passed', () => { + // GIVEN + const bucketEvents = BucketEvents.fromBucket(new class extends Construct { + public readonly bucketRef = { + bucketArn: 'arn', + bucketName: 'the-bucket', + }; + public readonly env = { account: '11111111111', region: 'us-east-1' }; + }(stack, 'Bucket')); + + // WHEN + newRule(stack, bucketEvents.objectCreatedPattern({ + eventMetadata: { + region: ['my-region'], + }, + })); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::Events::Rule', { + EventPattern: { + 'detail-type': ['Object Created'], + 'source': ['aws.s3'], + 'detail': { + bucket: { name: ['the-bucket'] }, + }, + 'region': ['my-region'], + }, + }); + }); }); test('creates multiple rules for different event types', () => {