diff --git a/CHANGELOG.v2.alpha.md b/CHANGELOG.v2.alpha.md index 410dcb1635298..33d6b4d6e0231 100644 --- a/CHANGELOG.v2.alpha.md +++ b/CHANGELOG.v2.alpha.md @@ -2,6 +2,8 @@ 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.217.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.216.0-alpha.0...v2.217.0-alpha.0) (2025-09-25) + ## [2.216.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.215.0-alpha.0...v2.216.0-alpha.0) (2025-09-22) ## [2.215.0-alpha.0](https://github.com/aws/aws-cdk/compare/v2.214.0-alpha.0...v2.215.0-alpha.0) (2025-09-15) diff --git a/CHANGELOG.v2.md b/CHANGELOG.v2.md index f37de6a4d6848..dbee080835561 100644 --- a/CHANGELOG.v2.md +++ b/CHANGELOG.v2.md @@ -2,6 +2,28 @@ 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.217.0](https://github.com/aws/aws-cdk/compare/v2.216.0...v2.217.0) (2025-09-25) + + +### Features + +* update L1 CloudFormation resource definitions ([#35491](https://github.com/aws/aws-cdk/issues/35491)) ([d095f68](https://github.com/aws/aws-cdk/commit/d095f687e77bed7d064dc30938a69f51d8b2c6a8)) +* update L1 CloudFormation resource definitions ([#35567](https://github.com/aws/aws-cdk/issues/35567)) ([b0ccf81](https://github.com/aws/aws-cdk/commit/b0ccf819277bd65057de87de8a43fbc8f09a03f7)) + + +### Bug Fixes + +* **cloudfront:** `Function` ARN reference changed from GetAtt to Ref ([#35547](https://github.com/aws/aws-cdk/issues/35547)) ([8a26869](https://github.com/aws/aws-cdk/commit/8a26869586e56e85994822815a21596aecf68453)), closes [#35531](https://github.com/aws/aws-cdk/issues/35531) +* **core:** negated gitignore patterns inside subdirectories are not including matched files ([#35511](https://github.com/aws/aws-cdk/issues/35511)) ([44781ef](https://github.com/aws/aws-cdk/commit/44781efe38113a7f7b86d74c605274fecbaca546)), closes [#9146](https://github.com/aws/aws-cdk/issues/9146) [#22002](https://github.com/aws/aws-cdk/issues/22002) +* **kms:** `Alias` reference incorrectly resolves to underlying `Key` ([#35545](https://github.com/aws/aws-cdk/issues/35545)) ([43ffcff](https://github.com/aws/aws-cdk/commit/43ffcff6a5092b9ec5030ba020c366ca7d6a8820)), closes [#35543](https://github.com/aws/aws-cdk/issues/35543) +* **lambda:** function.latestVersion points to wrong ARN ([#35546](https://github.com/aws/aws-cdk/issues/35546)) ([761dde2](https://github.com/aws/aws-cdk/commit/761dde288dce01cca60cbfd44e79b9bab9e0faf3)), closes [#35545](https://github.com/aws/aws-cdk/issues/35545) +* **rds:** cannot use connections in rds.DatabaseInstance.fromLookup ([#35193](https://github.com/aws/aws-cdk/issues/35193)) ([973d234](https://github.com/aws/aws-cdk/commit/973d23460787d3dc2eb1883eddb120a67cb8688f)), closes [#35192](https://github.com/aws/aws-cdk/issues/35192) + + +### Reverts + +* **dynamodb:** use keyId instead of keyArn for TableV2 replica encryption ([#35568](https://github.com/aws/aws-cdk/issues/35568)) ([b1f7f78](https://github.com/aws/aws-cdk/commit/b1f7f78ebc3ebdb5995bfb8b500e4b2ccd505afa)), closes [aws/aws-cdk#35144](https://github.com/aws/aws-cdk/issues/35144) [#35144](https://github.com/aws/aws-cdk/issues/35144) [#35551](https://github.com/aws/aws-cdk/issues/35551) + ## [2.216.0](https://github.com/aws/aws-cdk/compare/v2.215.0...v2.216.0) (2025-09-22) diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-function-runtime.js.snapshot/integ-distribution-function.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-function-runtime.js.snapshot/integ-distribution-function.template.json index 51ff154349bef..27290243856b4 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-function-runtime.js.snapshot/integ-distribution-function.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-function-runtime.js.snapshot/integ-distribution-function.template.json @@ -35,13 +35,19 @@ { "EventType": "viewer-request", "FunctionARN": { - "Ref": "FunctionRequest95528B2F" + "Fn::GetAtt": [ + "FunctionRequest95528B2F", + "FunctionARN" + ] } }, { "EventType": "viewer-response", "FunctionARN": { - "Ref": "FunctionResponse4EF2D1D3" + "Fn::GetAtt": [ + "FunctionResponse4EF2D1D3", + "FunctionARN" + ] } } ], diff --git a/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-function.js.snapshot/integ-distribution-function.template.json b/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-function.js.snapshot/integ-distribution-function.template.json index 68ad544c3b92f..a0f2c3d71b793 100644 --- a/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-function.js.snapshot/integ-distribution-function.template.json +++ b/packages/@aws-cdk-testing/framework-integ/test/aws-cloudfront/test/integ.distribution-function.js.snapshot/integ-distribution-function.template.json @@ -23,7 +23,10 @@ { "EventType": "viewer-request", "FunctionARN": { - "Ref": "Function76856677" + "Fn::GetAtt": [ + "Function76856677", + "FunctionARN" + ] } } ], diff --git a/packages/aws-cdk-lib/aws-bedrockagentcore/.jsiirc.json b/packages/aws-cdk-lib/aws-bedrockagentcore/.jsiirc.json new file mode 100644 index 0000000000000..99836cf7d3952 --- /dev/null +++ b/packages/aws-cdk-lib/aws-bedrockagentcore/.jsiirc.json @@ -0,0 +1,13 @@ +{ + "targets": { + "java": { + "package": "software.amazon.awscdk.services.bedrockagentcore" + }, + "dotnet": { + "package": "Amazon.CDK.AWS.BedrockAgentCore" + }, + "python": { + "module": "aws_cdk.aws_bedrockagentcore" + } + } +} diff --git a/packages/aws-cdk-lib/aws-bedrockagentcore/README.md b/packages/aws-cdk-lib/aws-bedrockagentcore/README.md new file mode 100644 index 0000000000000..a79741768a613 --- /dev/null +++ b/packages/aws-cdk-lib/aws-bedrockagentcore/README.md @@ -0,0 +1,39 @@ +# AWS::BedrockAgentCore Construct Library + + +--- + +![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) + +> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. +> +> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib + +--- + + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts nofixture +import * as bedrockagentcore from 'aws-cdk-lib/aws-bedrockagentcore'; +``` + + + +There are no official hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet. Here are some suggestions on how to proceed: + +- Search [Construct Hub for BedrockAgentCore construct libraries](https://constructs.dev/search?q=bedrockagentcore) +- Use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, in the same way you would use [the CloudFormation AWS::BedrockAgentCore resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_BedrockAgentCore.html) directly. + + + + +There are no hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet. +However, you can still use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, and use this service exactly as you would using CloudFormation directly. + +For more information on the resources and properties available for this service, see the [CloudFormation documentation for AWS::BedrockAgentCore](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_BedrockAgentCore.html). + +(Read the [CDK Contributing Guide](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and submit an RFC if you are interested in contributing to this construct library.) + + diff --git a/packages/aws-cdk-lib/aws-bedrockagentcore/index.ts b/packages/aws-cdk-lib/aws-bedrockagentcore/index.ts new file mode 100644 index 0000000000000..f41a696fd204d --- /dev/null +++ b/packages/aws-cdk-lib/aws-bedrockagentcore/index.ts @@ -0,0 +1 @@ +export * from './lib'; diff --git a/packages/aws-cdk-lib/aws-bedrockagentcore/lib/index.ts b/packages/aws-cdk-lib/aws-bedrockagentcore/lib/index.ts new file mode 100644 index 0000000000000..4b63a40a1d5f4 --- /dev/null +++ b/packages/aws-cdk-lib/aws-bedrockagentcore/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::BedrockAgentCore Cloudformation Resources +export * from './bedrockagentcore.generated'; diff --git a/packages/aws-cdk-lib/aws-cloudfront/lib/function.ts b/packages/aws-cdk-lib/aws-cloudfront/lib/function.ts index 18bfcd5a186a1..17de8a20f492a 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/lib/function.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/lib/function.ts @@ -223,9 +223,11 @@ export class Function extends Resource implements IFunction { name: this.functionName, }); - this.functionRef = resource.functionRef; this.functionArn = resource.attrFunctionArn; this.functionStage = resource.attrStage; + this.functionRef = { + functionArn: this.functionArn, + }; } private generateName(): string { diff --git a/packages/aws-cdk-lib/aws-cloudfront/test/distribution.test.ts b/packages/aws-cdk-lib/aws-cloudfront/test/distribution.test.ts index caae9579c0ea1..a5c7bb668cf49 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/test/distribution.test.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/test/distribution.test.ts @@ -920,7 +920,10 @@ describe('with CloudFront functions', () => { { EventType: 'viewer-request', FunctionARN: { - Ref: 'TestFunction22AD90FC', + 'Fn::GetAtt': [ + 'TestFunction22AD90FC', + 'FunctionARN', + ], }, }, ], diff --git a/packages/aws-cdk-lib/aws-cloudfront/test/function.test.ts b/packages/aws-cdk-lib/aws-cloudfront/test/function.test.ts index 09e94497cfb00..bef44a941323e 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/test/function.test.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/test/function.test.ts @@ -292,5 +292,24 @@ describe('CloudFront Function', () => { }, }); }); + + test('CloudFront FunctionRef uses GetAtt, not Ref', () => { + // Both GetAtt and Ref are valid ways to satisfy the contract, but only + // GetAtt is backwards compatible. + const stack = new Stack(); + + const fn = new Function(stack, 'TestFn', { + code: FunctionCode.fromInline('code'), + runtime: FunctionRuntime.JS_2_0, + keyValueStore: undefined, + }); + + expect(stack.resolve(fn.functionRef.functionArn)).toEqual({ + 'Fn::GetAtt': [ + 'TestFn04335C60', + 'FunctionARN', + ], + }); + }); }); }); diff --git a/packages/aws-cdk-lib/aws-cloudfront/test/web-distribution.test.ts b/packages/aws-cdk-lib/aws-cloudfront/test/web-distribution.test.ts index 8f6b642b7f850..39a86dbfab129 100644 --- a/packages/aws-cdk-lib/aws-cloudfront/test/web-distribution.test.ts +++ b/packages/aws-cdk-lib/aws-cloudfront/test/web-distribution.test.ts @@ -810,7 +810,10 @@ added the ellipsis so a user would know there was more to r...`, { 'EventType': 'viewer-request', 'FunctionARN': { - 'Ref': 'TestFunction22AD90FC', + 'Fn::GetAtt': [ + 'TestFunction22AD90FC', + 'FunctionARN', + ], }, }, ], diff --git a/packages/aws-cdk-lib/aws-dynamodb/lib/encryption.ts b/packages/aws-cdk-lib/aws-dynamodb/lib/encryption.ts index 08b24c7967b75..5ed288411fd5f 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/lib/encryption.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/lib/encryption.ts @@ -70,7 +70,7 @@ export abstract class TableEncryptionV2 { if (replicaRegion === stackRegion) { return { - kmsMasterKeyId: tableKey.keyId, + kmsMasterKeyId: tableKey.keyArn, } satisfies CfnGlobalTable.ReplicaSSESpecificationProperty; } diff --git a/packages/aws-cdk-lib/aws-dynamodb/test/encryption.test.ts b/packages/aws-cdk-lib/aws-dynamodb/test/encryption.test.ts index 91cb8cf94d543..99763c380ae8d 100644 --- a/packages/aws-cdk-lib/aws-dynamodb/test/encryption.test.ts +++ b/packages/aws-cdk-lib/aws-dynamodb/test/encryption.test.ts @@ -98,20 +98,10 @@ describe('customer managed keys', () => { test('can render replica SSE specification in deployment region', () => { // WHEN / THEN expect(encryption._renderReplicaSseSpecification(stack, stack.region)).toEqual({ - kmsMasterKeyId: tableKey.keyId, + kmsMasterKeyId: tableKey.keyArn, }); }); - test('replica SSE specification uses key ID format not ARN format', () => { - // WHEN - const result = encryption._renderReplicaSseSpecification(stack, stack.region); - - // THEN - expect(result.kmsMasterKeyId).toBe(tableKey.keyId); - expect(result.kmsMasterKeyId).not.toBe(tableKey.keyArn); - expect(result.kmsMasterKeyId).not.toContain('arn:aws:kms'); - }); - test('can render replica SSE specification in replica region', () => { // WHEN / THEN expect(encryption._renderReplicaSseSpecification(stack, 'us-east-1')).toEqual({ 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 5e430b8be4779..f859976448ecf 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 @@ -928,7 +928,10 @@ describe('table', () => { Region: 'us-west-2', SSESpecification: { KMSMasterKeyId: { - Ref: 'Key961B73FD', + 'Fn::GetAtt': [ + 'Key961B73FD', + 'Arn', + ], }, }, TableClass: 'STANDARD_INFREQUENT_ACCESS', diff --git a/packages/aws-cdk-lib/aws-ec2/lib/instance-types.ts b/packages/aws-cdk-lib/aws-ec2/lib/instance-types.ts index 47d1007e48b58..b5dd1cedc7372 100644 --- a/packages/aws-cdk-lib/aws-ec2/lib/instance-types.ts +++ b/packages/aws-cdk-lib/aws-ec2/lib/instance-types.ts @@ -492,6 +492,16 @@ export enum InstanceClass { */ R8GD = 'r8gd', + /** + * Memory optimized instances, 8th generation with Graviton4 processors and high network bandwidth capabilities + */ + MEMORY8_GRAVITON4_HIGH_NETWORK_BANDWIDTH = 'memory8-graviton4-high-network-bandwidth', + + /** + * Memory optimized instances, 8th generation with Graviton4 processors and high network bandwidth capabilities + */ + R8GN = 'r8gn', + /** * Compute optimized instances, 3rd generation */ @@ -1849,6 +1859,8 @@ export class InstanceType { [InstanceClass.R8G]: 'r8g', [InstanceClass.MEMORY8_GRAVITON4_NVME_DRIVE]: 'r8gd', [InstanceClass.R8GD]: 'r8gd', + [InstanceClass.MEMORY8_GRAVITON4_HIGH_NETWORK_BANDWIDTH]: 'r8gn', + [InstanceClass.R8GN]: 'r8gn', [InstanceClass.MEMORY8_INTEL_BASE]: 'r8i', [InstanceClass.R8I]: 'r8i', [InstanceClass.MEMORY8_INTEL_FLEX]: 'r8i-flex', diff --git a/packages/aws-cdk-lib/aws-kms/lib/alias.ts b/packages/aws-cdk-lib/aws-kms/lib/alias.ts index 0fa6e8c407768..aedf26d4c6490 100644 --- a/packages/aws-cdk-lib/aws-kms/lib/alias.ts +++ b/packages/aws-cdk-lib/aws-kms/lib/alias.ts @@ -69,7 +69,13 @@ abstract class AliasBase extends Resource implements IAlias { } public get keyRef(): KeyReference { - return this.aliasTargetKey.keyRef; + // Not actually referering to the key: `IKeyRef` here is being used as a + // hypothetical `IKeyLikeRef`, and we need to return the Alias values using + // the Key interface. + return { + keyArn: this.aliasArn, + keyId: this.keyId, + }; } /** diff --git a/packages/aws-cdk-lib/aws-kms/lib/key.ts b/packages/aws-cdk-lib/aws-kms/lib/key.ts index 461a309cafe55..01488ca758089 100644 --- a/packages/aws-cdk-lib/aws-kms/lib/key.ts +++ b/packages/aws-cdk-lib/aws-kms/lib/key.ts @@ -26,6 +26,9 @@ import * as cxapi from '../../cx-api'; /** * A KMS Key, either managed by this CDK app, or imported. + * + * This interface does double duty: it represents an actual KMS keys, but it + * also represents things that can behave like KMS keys, like a key alias. */ export interface IKey extends IResource, IKeyRef { /** diff --git a/packages/aws-cdk-lib/aws-kms/test/alias.test.ts b/packages/aws-cdk-lib/aws-kms/test/alias.test.ts index 399747167a1f4..2c209274a945e 100644 --- a/packages/aws-cdk-lib/aws-kms/test/alias.test.ts +++ b/packages/aws-cdk-lib/aws-kms/test/alias.test.ts @@ -911,6 +911,19 @@ test('aliasArn should be a valid ARN', () => { }, stack)); }); +test('Alias keyRef should reference the Alias, not the underlying key', () => { + // GIVEN + const app = new App(); + const stack = new Stack(app, 'Test'); + const key = new Key(stack, 'Key'); + + // WHEN + const alias = key.addAlias('alias/foo'); + + // THEN + expect(alias.keyRef.keyArn).toEqual(alias.aliasArn); +}); + class AliasOutputsConstruct extends Construct { constructor(scope: Construct, id: string, key: IKey) { super(scope, id); diff --git a/packages/aws-cdk-lib/aws-lambda/lib/function-base.ts b/packages/aws-cdk-lib/aws-lambda/lib/function-base.ts index 646cf08f488dc..0953ba81ce872 100644 --- a/packages/aws-cdk-lib/aws-lambda/lib/function-base.ts +++ b/packages/aws-cdk-lib/aws-lambda/lib/function-base.ts @@ -866,12 +866,15 @@ class LatestVersion extends FunctionBase implements IVersion { public get versionRef(): VersionReference { return { - functionArn: this.functionRef.functionArn, + functionArn: this.functionArn, }; } - public get functionRef() { - return this.lambda.functionRef; + public get functionRef(): FunctionReference { + return { + functionArn: this.functionArn, + functionName: this.functionName, + }; } public get functionArn() { diff --git a/packages/aws-cdk-lib/aws-lambda/test/alias.test.ts b/packages/aws-cdk-lib/aws-lambda/test/alias.test.ts index 34ee5d33c52bd..6bd99e9648b51 100644 --- a/packages/aws-cdk-lib/aws-lambda/test/alias.test.ts +++ b/packages/aws-cdk-lib/aws-lambda/test/alias.test.ts @@ -657,4 +657,24 @@ describe('alias', () => { Qualifier: aliasName, }); }); + + test('alias\' implementation of IFunctionRef should point to the alias', () => { + // GIVEN + const stack = new Stack(); + const fn = new lambda.Function(stack, 'MyLambda', { + code: new lambda.InlineCode('hello()'), + handler: 'index.hello', + runtime: lambda.Runtime.NODEJS_LATEST, + }); + const aliasName = 'prod'; + + // WHEN + const alias = new lambda.Alias(stack, 'Alias', { + aliasName, + version: fn.currentVersion, + }); + + // THEN + expect(alias.functionRef.functionArn).toEqual(alias.functionArn); + }); }); diff --git a/packages/aws-cdk-lib/aws-lambda/test/function.test.ts b/packages/aws-cdk-lib/aws-lambda/test/function.test.ts index 6f8dc3c09255e..8f1ea33be5585 100644 --- a/packages/aws-cdk-lib/aws-lambda/test/function.test.ts +++ b/packages/aws-cdk-lib/aws-lambda/test/function.test.ts @@ -2764,6 +2764,21 @@ describe('function', () => { expect(stack.resolve(version2.functionArn)).toEqual(expectedArn); }); + test('latestVersion functionRef ARN is the version ARN, not the plain ARN', () => { + // GIVEN + const stack = new cdk.Stack(); + + // WHEN + const fn = new lambda.Function(stack, 'MyLambda', { + code: new lambda.InlineCode('hello()'), + handler: 'index.hello', + runtime: lambda.Runtime.NODEJS_LATEST, + }); + + // THEN + expect(fn.latestVersion.functionRef.functionArn).toEqual(fn.latestVersion.functionArn); + }); + test('default function with kmsKeyArn, environmentEncryption passed as props', () => { // GIVEN const stack = new cdk.Stack(); diff --git a/packages/aws-cdk-lib/aws-lambda/test/lambda-version.test.ts b/packages/aws-cdk-lib/aws-lambda/test/lambda-version.test.ts index 5b7743379f6ed..edc8b01465487 100644 --- a/packages/aws-cdk-lib/aws-lambda/test/lambda-version.test.ts +++ b/packages/aws-cdk-lib/aws-lambda/test/lambda-version.test.ts @@ -229,4 +229,22 @@ describe('lambda version', () => { version.addFunctionUrl(); }).toThrow(/FunctionUrl cannot be used with a Version/); }); + + test('version\'s implementation of IFunctionRef should point to the version', () => { + // GIVEN + const stack = new cdk.Stack(); + const fn = new lambda.Function(stack, 'MyLambda', { + code: new lambda.InlineCode('hello()'), + handler: 'index.hello', + runtime: lambda.Runtime.NODEJS_LATEST, + }); + + // WHEN + const ver = new lambda.Version(stack, 'Version', { + lambda: fn, + }); + + // THEN + expect(ver.functionRef.functionArn).toEqual(ver.functionArn); + }); }); diff --git a/packages/aws-cdk-lib/aws-rds/lib/instance.ts b/packages/aws-cdk-lib/aws-rds/lib/instance.ts index 2b5151895cb97..3e2abb8476cd0 100644 --- a/packages/aws-cdk-lib/aws-rds/lib/instance.ts +++ b/packages/aws-cdk-lib/aws-rds/lib/instance.ts @@ -188,7 +188,7 @@ export abstract class DatabaseInstanceBase extends Resource implements IDatabase return this.fromDatabaseInstanceAttributes(scope, id, { instanceEndpointAddress: instance['Endpoint.Address'], - port: instance['Endpoint.Port'], + port: Number(instance['Endpoint.Port']), instanceIdentifier: options.instanceIdentifier, securityGroups: securityGroups, instanceResourceId: instance.DbiResourceId, diff --git a/packages/aws-cdk-lib/aws-rds/test/instance.from-lookup.test.ts b/packages/aws-cdk-lib/aws-rds/test/instance.from-lookup.test.ts index bd3e6e492ad89..dd38df6fd4463 100644 --- a/packages/aws-cdk-lib/aws-rds/test/instance.from-lookup.test.ts +++ b/packages/aws-cdk-lib/aws-rds/test/instance.from-lookup.test.ts @@ -1,3 +1,5 @@ +import { Match, Template } from '../../assertions'; +import * as ec2 from '../../aws-ec2'; import * as cxschema from '../../cloud-assembly-schema'; import { ContextProvider, Stack } from '../../core'; import * as rds from '../lib'; @@ -66,71 +68,71 @@ describe('DatabaseInstanceBase from lookup', () => { }); }); -describe("DatabaseInstanceBase from lookup with DBSG", () => { - test("return correct instance info", () => { +describe('DatabaseInstanceBase from lookup with DBSG', () => { + test('return correct instance info', () => { // GIVEN const resultObjs = [ { - DBInstanceArn: "arn:aws:rds:us-east-1:123456789012:db:instance-1", - "Endpoint.Address": "instance-1.testserver.us-east-1.rds.amazonaws.com", - "Endpoint.Port": "5432", - DbiResourceId: "db-ABCDEFGHI", - DBSecurityGroups: ["dbsg-1", "dbsg-2"], - VPCSecurityGroups: [], - Identifier: "instance-1", + 'DBInstanceArn': 'arn:aws:rds:us-east-1:123456789012:db:instance-1', + 'Endpoint.Address': 'instance-1.testserver.us-east-1.rds.amazonaws.com', + 'Endpoint.Port': '5432', + 'DbiResourceId': 'db-ABCDEFGHI', + 'DBSecurityGroups': ['dbsg-1', 'dbsg-2'], + 'VPCSecurityGroups': [], + 'Identifier': 'instance-1', }, ]; const value = { value: resultObjs, }; - const mock = jest.spyOn(ContextProvider, "getValue").mockReturnValue(value); + const mock = jest.spyOn(ContextProvider, 'getValue').mockReturnValue(value); // WHEN const stack = new Stack(undefined, undefined, { - env: { region: "us-east-1", account: "123456789012" }, + env: { region: 'us-east-1', account: '123456789012' }, }); - const instance = rds.DatabaseInstance.fromLookup(stack, "MyInstance", { - instanceIdentifier: "instance-1", + const instance = rds.DatabaseInstance.fromLookup(stack, 'MyInstance', { + instanceIdentifier: 'instance-1', }); // THEN - expect(instance.instanceIdentifier).toEqual("instance-1"); + expect(instance.instanceIdentifier).toEqual('instance-1'); expect(instance.dbInstanceEndpointAddress).toEqual( - "instance-1.testserver.us-east-1.rds.amazonaws.com" + 'instance-1.testserver.us-east-1.rds.amazonaws.com' ); - expect(instance.dbInstanceEndpointPort).toEqual("5432"); - expect(instance.instanceResourceId).toEqual("db-ABCDEFGHI"); + expect(instance.dbInstanceEndpointPort).toEqual('5432'); + expect(instance.instanceResourceId).toEqual('db-ABCDEFGHI'); expect(instance.connections.securityGroups.length).toEqual(2); expect(instance.connections.securityGroups[0].securityGroupId).toEqual( - "dbsg-1" + 'dbsg-1' ); expect(instance.connections.securityGroups[1].securityGroupId).toEqual( - "dbsg-2" + 'dbsg-2' ); expect(mock).toHaveBeenCalledWith(stack, { provider: cxschema.ContextProvider.CC_API_PROVIDER, props: { - typeName: "AWS::RDS::DBInstance", - exactIdentifier: "instance-1", + typeName: 'AWS::RDS::DBInstance', + exactIdentifier: 'instance-1', propertiesToReturn: [ - "DBInstanceArn", - "Endpoint.Address", - "Endpoint.Port", - "DbiResourceId", - "DBSecurityGroups", - "VPCSecurityGroups", + 'DBInstanceArn', + 'Endpoint.Address', + 'Endpoint.Port', + 'DbiResourceId', + 'DBSecurityGroups', + 'VPCSecurityGroups', ], } as cxschema.CcApiContextQuery, dummyValue: [ { - Identifier: "TEST", - DBInstanceArn: "TESTARN", - "Endpoint.Address": "TESTADDRESS", - "Endpoint.Port": "5432", - DbiResourceId: "TESTID", - DBSecurityGroups: [], - VPCSecurityGroups: [], + 'Identifier': 'TEST', + 'DBInstanceArn': 'TESTARN', + 'Endpoint.Address': 'TESTADDRESS', + 'Endpoint.Port': '5432', + 'DbiResourceId': 'TESTID', + 'DBSecurityGroups': [], + 'VPCSecurityGroups': [], }, ], }); @@ -203,4 +205,55 @@ describe('DatabaseInstanceBase from lookup with VPCSecurityGroups', () => { mock.mockRestore(); }); }); + +describe('DatabaseInstanceBase connections', () => { + test('allows adding security group ingress rules', () => { + // GIVEN + const resultObjs = [ + { + 'DBInstanceArn': 'arn:aws:rds:us-east-1:123456789012:db:instance-1', + 'Endpoint.Address': 'instance-1.testserver.us-east-1.rds.amazonaws.com', + 'Endpoint.Port': '5432', + 'DbiResourceId': 'db-ABCDEFGHI', + 'DBSecurityGroups': [], + 'VPCSecurityGroups': ['sg-1', 'sg-2'], + 'Identifier': 'instance-1', + }, + ]; + const value = { value: resultObjs }; + const mock = jest.spyOn(ContextProvider, 'getValue').mockReturnValue(value); + + // WHEN + const stack = new Stack(undefined, undefined, { env: { region: 'us-east-1', account: '123456789012' } }); + + const securityGroup = ec2.SecurityGroup.fromSecurityGroupId(stack, 'TestSG', 'sg-test'); + + const instance = rds.DatabaseInstance.fromLookup(stack, 'MyInstance', { + instanceIdentifier: 'instance-1', + }); + + instance.connections.allowDefaultPortFrom(securityGroup, 'Allow from test SG'); + + // THEN + Template.fromStack(stack).hasResourceProperties('AWS::EC2::SecurityGroupIngress', { + IpProtocol: 'tcp', + FromPort: 5432, + ToPort: 5432, + Description: 'Allow from test SG', + SourceSecurityGroupId: 'sg-test', + GroupId: 'sg-1' + }); + + Template.fromStack(stack).hasResourceProperties('AWS::EC2::SecurityGroupIngress', { + IpProtocol: 'tcp', + FromPort: 5432, + ToPort: 5432, + Description: 'Allow from test SG', + SourceSecurityGroupId: 'sg-test', + GroupId: 'sg-2' + }); + + mock.mockRestore(); + }); +}); /* eslint-enable */ diff --git a/packages/aws-cdk-lib/aws-smsvoice/.jsiirc.json b/packages/aws-cdk-lib/aws-smsvoice/.jsiirc.json new file mode 100644 index 0000000000000..70351920aa2cd --- /dev/null +++ b/packages/aws-cdk-lib/aws-smsvoice/.jsiirc.json @@ -0,0 +1,13 @@ +{ + "targets": { + "java": { + "package": "software.amazon.awscdk.services.smsvoice" + }, + "dotnet": { + "package": "Amazon.CDK.AWS.SMSVOICE" + }, + "python": { + "module": "aws_cdk.aws_smsvoice" + } + } +} diff --git a/packages/aws-cdk-lib/aws-smsvoice/README.md b/packages/aws-cdk-lib/aws-smsvoice/README.md new file mode 100644 index 0000000000000..43c8c6d2e434c --- /dev/null +++ b/packages/aws-cdk-lib/aws-smsvoice/README.md @@ -0,0 +1,39 @@ +# AWS::SMSVOICE Construct Library + + +--- + +![cfn-resources: Stable](https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge) + +> All classes with the `Cfn` prefix in this module ([CFN Resources]) are always stable and safe to use. +> +> [CFN Resources]: https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib + +--- + + + +This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. + +```ts nofixture +import * as smsvoice from 'aws-cdk-lib/aws-smsvoice'; +``` + + + +There are no official hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet. Here are some suggestions on how to proceed: + +- Search [Construct Hub for SMSVOICE construct libraries](https://constructs.dev/search?q=smsvoice) +- Use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, in the same way you would use [the CloudFormation AWS::SMSVOICE resources](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SMSVOICE.html) directly. + + + + +There are no hand-written ([L2](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_lib)) constructs for this service yet. +However, you can still use the automatically generated [L1](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html#constructs_l1_using) constructs, and use this service exactly as you would using CloudFormation directly. + +For more information on the resources and properties available for this service, see the [CloudFormation documentation for AWS::SMSVOICE](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SMSVOICE.html). + +(Read the [CDK Contributing Guide](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and submit an RFC if you are interested in contributing to this construct library.) + + diff --git a/packages/aws-cdk-lib/aws-smsvoice/index.ts b/packages/aws-cdk-lib/aws-smsvoice/index.ts new file mode 100644 index 0000000000000..f41a696fd204d --- /dev/null +++ b/packages/aws-cdk-lib/aws-smsvoice/index.ts @@ -0,0 +1 @@ +export * from './lib'; diff --git a/packages/aws-cdk-lib/aws-smsvoice/lib/index.ts b/packages/aws-cdk-lib/aws-smsvoice/lib/index.ts new file mode 100644 index 0000000000000..a9fade35c8791 --- /dev/null +++ b/packages/aws-cdk-lib/aws-smsvoice/lib/index.ts @@ -0,0 +1,2 @@ +// AWS::SMSVOICE Cloudformation Resources +export * from './smsvoice.generated'; 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 f33751d735570..f2b46b7d30ee0 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 @@ -1763,6 +1763,8 @@ export const AWS_CDK_ENUMS: { [key: string]: any } = { "r8g", "memory8-graviton4-nvme-drive", "r8gd", + "memory8-graviton4-high-network-bandwidth", + "r8gn", "compute3", "c3", "compute4", 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 d780ae8b8d45d..da182b1d43cd4 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 @@ -2633,6 +2633,8 @@ "r8g", "memory8-graviton4-nvme-drive", "r8gd", + "memory8-graviton4-high-network-bandwidth", + "r8gn", "compute3", "c3", "compute4", diff --git a/packages/aws-cdk-lib/core/lib/fs/fingerprint.ts b/packages/aws-cdk-lib/core/lib/fs/fingerprint.ts index 63943a3f1ec9c..311d162c23f55 100644 --- a/packages/aws-cdk-lib/core/lib/fs/fingerprint.ts +++ b/packages/aws-cdk-lib/core/lib/fs/fingerprint.ts @@ -66,12 +66,12 @@ export function fingerprint(fileOrDirectory: string, options: FingerprintOptions return hash.digest('hex'); function _processFileOrDirectory(symbolicPath: string, isRootDir: boolean = false, realPath = symbolicPath) { - if (!isRootDir && ignoreStrategy.ignores(symbolicPath)) { + const stat = fs.lstatSync(realPath); + + if (_shouldIgnore(isRootDir, symbolicPath, realPath, stat)) { return; } - const stat = fs.lstatSync(realPath); - // Use relative path as hash component. Normalize it with forward slashes to ensure // same hash on Windows and Linux. const hashComponent = path.relative(fileOrDirectory, symbolicPath).replace(/\\/g, '/'); @@ -94,6 +94,32 @@ export function fingerprint(fileOrDirectory: string, options: FingerprintOptions throw new UnscopedValidationError(`Unable to hash ${symbolicPath}: it is neither a file nor a directory`); } } + + function _shouldIgnore(isRootDir: boolean, symbolicPath: string, realPath: string, stat: fs.Stats) { + if (isRootDir) { + return false; + } + + if (stat.isDirectory()) { + return ignoreStrategy.completelyIgnores(symbolicPath); + } + + if (stat.isSymbolicLink()) { + const linkTarget = fs.readlinkSync(symbolicPath); + const resolvedLinkTarget = path.resolve(path.dirname(realPath), linkTarget); + + if (shouldFollow(follow, rootDirectory, resolvedLinkTarget)) { + const targetStat = fs.statSync(resolvedLinkTarget); + + // If we are following a directory symlink, we should use `completelyIgnores`. + if (targetStat.isDirectory()) { + return ignoreStrategy.completelyIgnores(symbolicPath); + } + } + } + + return ignoreStrategy.ignores(symbolicPath); + } } export function contentFingerprint(file: string): string { diff --git a/packages/aws-cdk-lib/core/lib/fs/ignore.ts b/packages/aws-cdk-lib/core/lib/fs/ignore.ts index 2d0a9dbea0a20..dbc3f97aab9ca 100644 --- a/packages/aws-cdk-lib/core/lib/fs/ignore.ts +++ b/packages/aws-cdk-lib/core/lib/fs/ignore.ts @@ -80,14 +80,13 @@ export abstract class IgnoreStrategy { public abstract ignores(absoluteFilePath: string): boolean; /** - * Determines whether a given file path should be ignored and have all of its children ignored - * if its a directory. + * Determines whether a given directory path should be ignored and have all of its children ignored. * - * @param absoluteFilePath absolute file path to be assessed against the pattern - * @returns `true` if the file should be ignored + * @param absoluteDirectoryPath absolute directory path to be assessed against the pattern + * @returns `true` if the directory and all of its children should be ignored */ - public completelyIgnores(absoluteFilePath: string): boolean { - return this.ignores(absoluteFilePath); + public completelyIgnores(absoluteDirectoryPath: string): boolean { + return this.ignores(absoluteDirectoryPath); } } @@ -189,6 +188,23 @@ export class GitIgnoreStrategy extends IgnoreStrategy { return this.ignore.ignores(relativePath); } + + /** + * Determines whether a given directory path should be ignored and have all of its children ignored. + * + * @param absoluteDirectoryPath absolute directory path to be assessed against the pattern + * @returns `true` if the directory and all of its children should be ignored + */ + public completelyIgnores(absoluteDirectoryPath: string): boolean { + if (!path.isAbsolute(absoluteDirectoryPath)) { + throw new UnscopedValidationError('GitIgnoreStrategy.completelyIgnores() expects an absolute path'); + } + + const relativePath = path.relative(this.absoluteRootPath, absoluteDirectoryPath); + const relativePathWithSep = relativePath.endsWith(path.sep) ? relativePath : relativePath + path.sep; + + return this.ignore.ignores(relativePathWithSep); + } } /** @@ -268,14 +284,13 @@ export class DockerIgnoreStrategy extends IgnoreStrategy { } /** - * Determines whether a given file path should be ignored and have all of its children ignored - * if its a directory. + * Determines whether a given directory path should be ignored and have all of its children ignored. * - * @param absoluteFilePath absolute file path to be assessed against the pattern - * @returns `true` if the file should be ignored + * @param absoluteDirectoryPath absolute directory path to be assessed against the pattern + * @returns `true` if the directory and all of its children should be ignored */ - public completelyIgnores(absoluteFilePath: string): boolean { - const relativePath = this.getRelativePath(absoluteFilePath); + public completelyIgnores(absoluteDirectoryPath: string): boolean { + const relativePath = this.getRelativePath(absoluteDirectoryPath); return this.ignore.ignores(relativePath) && this.completeIgnore.ignores(relativePath); } } diff --git a/packages/aws-cdk-lib/core/test/fs/fs-copy.test.ts b/packages/aws-cdk-lib/core/test/fs/fs-copy.test.ts index 87a5c75b934ee..8acb0d9aaadbb 100644 --- a/packages/aws-cdk-lib/core/test/fs/fs-copy.test.ts +++ b/packages/aws-cdk-lib/core/test/fs/fs-copy.test.ts @@ -142,6 +142,28 @@ describe('fs copy', () => { ' file3.txt', ]); }); + + test('negated pattern inside subdirectory with git ignore mode', () => { + // GIVEN + const outdir = fs.mkdtempSync(path.join(os.tmpdir(), 'copy-tests')); + + // WHEN + FileSystem.copyDirectory(path.join(__dirname, 'fixtures', 'test1'), outdir, { + exclude: [ + '*', + '!.hidden', + '!*/', + ], + ignoreMode: IgnoreMode.GIT, + }); + + // THEN + expect(tree(outdir)).toEqual([ + 'subdir2 (D)', + ' empty-subdir (D)', + ' .hidden', + ]); + }); }); function tree(dir: string, depth = ''): string[] { diff --git a/packages/aws-cdk-lib/core/test/fs/fs-fingerprint.test.ts b/packages/aws-cdk-lib/core/test/fs/fs-fingerprint.test.ts index 40a438628674c..a8a5ecd7477da 100644 --- a/packages/aws-cdk-lib/core/test/fs/fs-fingerprint.test.ts +++ b/packages/aws-cdk-lib/core/test/fs/fs-fingerprint.test.ts @@ -1,7 +1,7 @@ import * as fs from 'fs'; import * as os from 'os'; import * as path from 'path'; -import { FileSystem, SymlinkFollowMode } from '../../lib/fs'; +import { FileSystem, IgnoreMode, SymlinkFollowMode } from '../../lib/fs'; import { contentFingerprint } from '../../lib/fs/fingerprint'; describe('fs fingerprint', () => { @@ -91,6 +91,25 @@ describe('fs fingerprint', () => { // THEN expect(hashSrc).not.toEqual(hashCopy); }); + + test('changes with negated gitignore patterns inside ignored directories', () => { + // GIVEN + const srcdir = path.join(__dirname, 'fixtures', 'symlinks'); + const cpydir = fs.mkdtempSync(path.join(os.tmpdir(), 'fingerprint-tests')); + FileSystem.copyDirectory(srcdir, cpydir); + + // Add a new file that is inside an ignored directory, but has a negated pattern that includes it. + const newFile = path.join(cpydir, 'ignored-dir', 'not-ignored-anymore.html'); + fs.mkdirSync(path.dirname(newFile), { recursive: true }); + fs.writeFileSync(newFile, '

Do not ignore me!

'); + + // WHEN + const hashSrc = FileSystem.fingerprint(srcdir, { exclude: ['*', '!*.html', '!*/'], ignoreMode: IgnoreMode.GIT }); + const hashCopy = FileSystem.fingerprint(cpydir, { exclude: ['*', '!*.html', '!*/'], ignoreMode: IgnoreMode.GIT }); + + // THEN + expect(hashSrc).not.toEqual(hashCopy); + }); }); describe('symlinks', () => { @@ -147,6 +166,44 @@ describe('fs fingerprint', () => { expect(original).toEqual(afterChange); expect(afterRevert).toEqual(original); }); + + test('changes when following directory symlinks with negated gitignore patterns', () => { + // GIVEN + const srcdir = fs.mkdtempSync(path.join(os.tmpdir(), 'fingerprint-tests')); + fs.mkdirSync(path.join(srcdir, 'subdir'), { recursive: true }); + fs.writeFileSync(path.join(srcdir, 'subdir', 'page.html'), '

Hello, world!

'); + + const cpydir = fs.mkdtempSync(path.join(os.tmpdir(), 'fingerprint-tests')); + FileSystem.copyDirectory(srcdir, cpydir); + fs.symlinkSync(path.join(cpydir, 'subdir'), path.join(cpydir, 'link-to-dir')); + + // WHEN + const options = { exclude: ['*', '!*.html', '!*/'], ignoreMode: IgnoreMode.GIT, follow: SymlinkFollowMode.ALWAYS }; + const hashSrc = FileSystem.fingerprint(srcdir, options); + const hashCpy = FileSystem.fingerprint(cpydir, options); + + // THEN + expect(hashSrc).not.toEqual(hashCpy); + }); + + test('does not change when not following directory symlinks with negated gitignore patterns', () => { + // GIVEN + const srcdir = fs.mkdtempSync(path.join(os.tmpdir(), 'fingerprint-tests')); + fs.mkdirSync(path.join(srcdir, 'subdir'), { recursive: true }); + fs.writeFileSync(path.join(srcdir, 'subdir', 'page.html'), '

Hello, world!

'); + + const cpydir = fs.mkdtempSync(path.join(os.tmpdir(), 'fingerprint-tests')); + FileSystem.copyDirectory(srcdir, cpydir); + fs.symlinkSync(path.join(cpydir, 'subdir'), path.join(cpydir, 'link-to-dir')); + + // WHEN + const options = { exclude: ['*', '!*.html', '!*/'], ignoreMode: IgnoreMode.GIT, follow: SymlinkFollowMode.NEVER }; + const hashSrc = FileSystem.fingerprint(srcdir, options); + const hashCpy = FileSystem.fingerprint(cpydir, options); + + // THEN + expect(hashSrc).toEqual(hashCpy); + }); }); describe('eol', () => { diff --git a/packages/aws-cdk-lib/index.ts b/packages/aws-cdk-lib/index.ts index 63c08856f998b..c94af629d6689 100644 --- a/packages/aws-cdk-lib/index.ts +++ b/packages/aws-cdk-lib/index.ts @@ -37,6 +37,7 @@ export * as aws_backupgateway from './aws-backupgateway'; export * as aws_batch from './aws-batch'; export * as aws_bcmdataexports from './aws-bcmdataexports'; export * as aws_bedrock from './aws-bedrock'; +export * as aws_bedrockagentcore from './aws-bedrockagentcore'; export * as aws_billingconductor from './aws-billingconductor'; export * as aws_budgets from './aws-budgets'; export * as aws_cassandra from './aws-cassandra'; @@ -262,6 +263,7 @@ export * as aws_ses_actions from './aws-ses-actions'; export * as aws_shield from './aws-shield'; export * as aws_signer from './aws-signer'; export * as aws_simspaceweaver from './aws-simspaceweaver'; +export * as aws_smsvoice from './aws-smsvoice'; export * as aws_sns from './aws-sns'; export * as aws_sns_subscriptions from './aws-sns-subscriptions'; export * as aws_sqs from './aws-sqs'; diff --git a/packages/aws-cdk-lib/package.json b/packages/aws-cdk-lib/package.json index 433d8dbc20318..8afbb1d138611 100644 --- a/packages/aws-cdk-lib/package.json +++ b/packages/aws-cdk-lib/package.json @@ -136,7 +136,7 @@ }, "devDependencies": { "@aws-cdk/lambda-layer-kubectl-v31": "^2.1.0", - "@aws-cdk/aws-service-spec": "^0.1.95", + "@aws-cdk/aws-service-spec": "^0.1.99", "@aws-cdk/cdk-build-tools": "0.0.0", "@aws-cdk/custom-resource-handlers": "0.0.0", "@aws-cdk/pkglint": "0.0.0", @@ -251,6 +251,7 @@ "./aws-batch": "./aws-batch/index.js", "./aws-bcmdataexports": "./aws-bcmdataexports/index.js", "./aws-bedrock": "./aws-bedrock/index.js", + "./aws-bedrockagentcore": "./aws-bedrockagentcore/index.js", "./aws-billing": "./aws-billing/index.js", "./aws-billingconductor": "./aws-billingconductor/index.js", "./aws-budgets": "./aws-budgets/index.js", @@ -479,6 +480,7 @@ "./aws-shield": "./aws-shield/index.js", "./aws-signer": "./aws-signer/index.js", "./aws-simspaceweaver": "./aws-simspaceweaver/index.js", + "./aws-smsvoice": "./aws-smsvoice/index.js", "./aws-sns": "./aws-sns/index.js", "./aws-sns-subscriptions": "./aws-sns-subscriptions/index.js", "./aws-sqs": "./aws-sqs/index.js", diff --git a/packages/aws-cdk-lib/scripts/scope-map.json b/packages/aws-cdk-lib/scripts/scope-map.json index 2cc9dc64790cf..035dcee12bb99 100644 --- a/packages/aws-cdk-lib/scripts/scope-map.json +++ b/packages/aws-cdk-lib/scripts/scope-map.json @@ -164,6 +164,11 @@ "namespace": "AWS::Bedrock" } ], + "aws-bedrockagentcore": [ + { + "namespace": "AWS::BedrockAgentCore" + } + ], "aws-billing": [ { "namespace": "AWS::Billing" @@ -1194,6 +1199,11 @@ "namespace": "AWS::SimSpaceWeaver" } ], + "aws-smsvoice": [ + { + "namespace": "AWS::SMSVOICE" + } + ], "aws-sns": [ { "namespace": "AWS::SNS" diff --git a/tools/@aws-cdk/spec2cdk/package.json b/tools/@aws-cdk/spec2cdk/package.json index f30a94d1e4884..ce44fe75dd822 100644 --- a/tools/@aws-cdk/spec2cdk/package.json +++ b/tools/@aws-cdk/spec2cdk/package.json @@ -32,9 +32,9 @@ }, "license": "Apache-2.0", "dependencies": { - "@aws-cdk/aws-service-spec": "^0.1.95", - "@aws-cdk/service-spec-importers": "^0.0.84", - "@aws-cdk/service-spec-types": "^0.0.161", + "@aws-cdk/aws-service-spec": "^0.1.99", + "@aws-cdk/service-spec-importers": "^0.0.86", + "@aws-cdk/service-spec-types": "^0.0.165", "@cdklabs/tskb": "^0.0.3", "@cdklabs/typewriter": "^0.0.5", "camelcase": "^6", diff --git a/version.v2.json b/version.v2.json index 1a020c08d4b3f..5b0dc82d21f04 100644 --- a/version.v2.json +++ b/version.v2.json @@ -1,4 +1,4 @@ { - "version": "2.216.0", - "alphaVersion": "2.216.0-alpha.0" + "version": "2.217.0", + "alphaVersion": "2.217.0-alpha.0" } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 871e220040e81..0707dea9fa8eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -66,12 +66,12 @@ "@aws-cdk/service-spec-types" "^0.0.158" "@cdklabs/tskb" "^0.0.3" -"@aws-cdk/aws-service-spec@^0.1.95": - version "0.1.95" - resolved "https://registry.npmjs.org/@aws-cdk/aws-service-spec/-/aws-service-spec-0.1.95.tgz#f41c70c99906975cf2f9eb9de0c09780a896d917" - integrity sha512-3Iaz/XBg2Bg8uycpcosSEUHUUdaxdgKHOUxylLiX9DpD6GCE5Ken+xfmvB73lFT5oba3Zo9E3xbTlThCy61WWg== +"@aws-cdk/aws-service-spec@^0.1.99": + version "0.1.99" + resolved "https://registry.npmjs.org/@aws-cdk/aws-service-spec/-/aws-service-spec-0.1.99.tgz#4240270196b3099416245a9fdd2992b8d08d2cca" + integrity sha512-8NAVqXZLdfgQoPwsctmbnSI8pttr8LsrmjRxXgPu8dR9dYXxkdrMyyUltMFlkpxglWg6wlxJ1CXH6I9uWhsLuQ== dependencies: - "@aws-cdk/service-spec-types" "^0.0.161" + "@aws-cdk/service-spec-types" "^0.0.165" "@cdklabs/tskb" "^0.0.3" "@aws-cdk/cloud-assembly-schema@^48.6.0": @@ -122,12 +122,12 @@ resolved "https://registry.npmjs.org/@aws-cdk/lambda-layer-kubectl-v33/-/lambda-layer-kubectl-v33-2.0.0.tgz#0c521ad987bb3ac597a4b4ebeece8fd2721ca000" integrity sha512-osA3wkwWK2OfpymTcCZKhgaKSca9PQSr+7xi+UevKFRHtMdxHgygC345hdDpCtZlMmX9pKjtFpRUxeRrbGHMEw== -"@aws-cdk/service-spec-importers@^0.0.84": - version "0.0.84" - resolved "https://registry.npmjs.org/@aws-cdk/service-spec-importers/-/service-spec-importers-0.0.84.tgz#f261345c5bccfac0c2ff3d854c5247d677b6091a" - integrity sha512-iVuiU2nCnlDnJETWscboiTqdu/PWQrTQuNA3M0TA4YdidJd5tlG2El/m9eF3OHe+8RLSixZsG7xKbtMzwjqaOg== +"@aws-cdk/service-spec-importers@^0.0.86": + version "0.0.86" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-importers/-/service-spec-importers-0.0.86.tgz#229ee83b894d4f463edd8896ce0c187821aeaa6a" + integrity sha512-3p0MO62FAVF2U+S2VjKRGFQRjZtzk9Z5EWOnYRxtt4NlhxEDeYgPXBDTwPAuWVkQM2XVaDUcLv5G/kXgEKCUVQ== dependencies: - "@aws-cdk/service-spec-types" "^0.0.160" + "@aws-cdk/service-spec-types" "^0.0.163" "@cdklabs/tskb" "^0.0.3" ajv "^6" canonicalize "^2.1.0" @@ -145,17 +145,17 @@ dependencies: "@cdklabs/tskb" "^0.0.3" -"@aws-cdk/service-spec-types@^0.0.160": - version "0.0.160" - resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.160.tgz#3c37e324418db15a4820f957b95d282244b1743c" - integrity sha512-uTSZyc6yBbX7SYSvnPi0EkvGGqUbo2Xc2O2urtNTviv2v9vRROMJNxvWc8QIobDYe+KEP3QcgbZTHKxI0apuKQ== +"@aws-cdk/service-spec-types@^0.0.163": + version "0.0.163" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.163.tgz#ba07b771c479211900675e149d0c1a465dee1099" + integrity sha512-IheocTkQUn9bxe7SsEYk1G0Tb7vlNELNSan3VxHjvgKijUWden14xQJivovooV2sfjFRiAnOPjnUbGTttrHSrw== dependencies: "@cdklabs/tskb" "^0.0.3" -"@aws-cdk/service-spec-types@^0.0.161": - version "0.0.161" - resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.161.tgz#bf0f42b44156a5c0d58ab27c8050a4baa1956dfb" - integrity sha512-GT1QaeEP3AKnwEerB3wGQ15OM5QPX8xVkjF/wq71RkX4rnqeMX4h4OSZFZUV/8gW2j2c74LHwPIJ15xSTBt54w== +"@aws-cdk/service-spec-types@^0.0.165": + version "0.0.165" + resolved "https://registry.npmjs.org/@aws-cdk/service-spec-types/-/service-spec-types-0.0.165.tgz#3afb97c63e5c11d71ac577f7d9cf5dac08c61fff" + integrity sha512-sSZRamu7OF674koINbbgwrh27RPfQfeti3EphwaQBVaBOA8JY0FhifDZ3Ehw+jFARiJAMSNP++XYDbNbdXee8A== dependencies: "@cdklabs/tskb" "^0.0.3"