konokenj.cdk-api-mcp-server 0.28.0__py3-none-any.whl → 0.29.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of konokenj.cdk-api-mcp-server might be problematic. Click here for more details.

Files changed (21) hide show
  1. cdk_api_mcp_server/__about__.py +1 -1
  2. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-amplify-alpha/README.md +71 -0
  3. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/integ-tests-alpha/README.md +1 -1
  4. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/README.md +18 -1
  5. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/README.md +83 -83
  6. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-al2023-nodegroup.ts +1 -2
  7. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.fargate-cluster.ts +1 -3
  8. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kms/README.md +4 -3
  9. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kms/integ.alias-from-alias-name.ts +26 -0
  10. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/README.md +68 -0
  11. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-schema-registry.ts +186 -0
  12. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3/README.md +16 -0
  13. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +21 -0
  14. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/README.md +14 -0
  15. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/README.md +7 -1
  16. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-single-publisher.ts +53 -0
  17. {konokenj_cdk_api_mcp_server-0.28.0.dist-info → konokenj_cdk_api_mcp_server-0.29.0.dist-info}/METADATA +2 -2
  18. {konokenj_cdk_api_mcp_server-0.28.0.dist-info → konokenj_cdk_api_mcp_server-0.29.0.dist-info}/RECORD +21 -18
  19. {konokenj_cdk_api_mcp_server-0.28.0.dist-info → konokenj_cdk_api_mcp_server-0.29.0.dist-info}/WHEEL +0 -0
  20. {konokenj_cdk_api_mcp_server-0.28.0.dist-info → konokenj_cdk_api_mcp_server-0.29.0.dist-info}/entry_points.txt +0 -0
  21. {konokenj_cdk_api_mcp_server-0.28.0.dist-info → konokenj_cdk_api_mcp_server-0.29.0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2025-present Kenji Kono <konoken@amazon.co.jp>
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
- __version__ = "0.28.0"
4
+ __version__ = "0.29.0"
@@ -238,6 +238,68 @@ const amplifyApp = new amplify.App(this, 'App', {
238
238
  });
239
239
  ```
240
240
 
241
+ If the app uses a monorepo structure, define which appRoot from the build spec the custom response headers should apply to by using the `appRoot` property:
242
+
243
+ ```ts
244
+ import * as codebuild from 'aws-cdk-lib/aws-codebuild';
245
+
246
+ const amplifyApp = new amplify.App(this, 'App', {
247
+ sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
248
+ owner: '<user>',
249
+ repository: '<repo>',
250
+ oauthToken: SecretValue.secretsManager('my-github-token'),
251
+ }),
252
+ buildSpec: codebuild.BuildSpec.fromObjectToYaml({
253
+ version: '1.0',
254
+ applications: [
255
+ {
256
+ appRoot: 'frontend',
257
+ frontend: {
258
+ phases: {
259
+ preBuild: {
260
+ commands: ['npm install'],
261
+ },
262
+ build: {
263
+ commands: ['npm run build'],
264
+ },
265
+ },
266
+ },
267
+ },
268
+ {
269
+ appRoot: 'backend',
270
+ backend: {
271
+ phases: {
272
+ preBuild: {
273
+ commands: ['npm install'],
274
+ },
275
+ build: {
276
+ commands: ['npm run build'],
277
+ },
278
+ },
279
+ },
280
+ },
281
+ ],
282
+ }),
283
+ customResponseHeaders: [
284
+ {
285
+ appRoot: 'frontend',
286
+ pattern: '*.json',
287
+ headers: {
288
+ 'custom-header-name-1': 'custom-header-value-1',
289
+ 'custom-header-name-2': 'custom-header-value-2',
290
+ },
291
+ },
292
+ {
293
+ appRoot: 'backend',
294
+ pattern: '/path/*',
295
+ headers: {
296
+ 'custom-header-name-1': 'custom-header-value-2',
297
+ },
298
+ },
299
+ ],
300
+ });
301
+ ```
302
+
241
303
  ## Configure server side rendering when hosting app
242
304
 
243
305
  Setting the `platform` field on the Amplify `App` construct can be used to control whether the app will host only static assets or server side rendered assets in addition to static. By default, the value is set to `WEB` (static only), however, server side rendering can be turned on by setting to `WEB_COMPUTE` as follows:
@@ -268,6 +330,15 @@ const amplifyApp = new amplify.App(this, 'MyApp', {
268
330
  });
269
331
  ```
270
332
 
333
+ It is also possible to override the compute role for a specific branch by setting `computeRole` in `Branch`:
334
+
335
+ ```ts
336
+ declare const computeRole: iam.Role;
337
+ declare const amplifyApp: amplify.App
338
+
339
+ const branch = amplifyApp.addBranch("dev", { computeRole });
340
+ ```
341
+
271
342
  ## Cache Config
272
343
 
273
344
  Amplify uses Amazon CloudFront to manage the caching configuration for your hosted applications. A cache configuration is applied to each app to optimize for the best performance.
@@ -18,7 +18,7 @@
18
18
 
19
19
  ## Overview
20
20
 
21
- This library is meant to be used in combination with the [integ-runner](https://github.com/aws/aws-cdk/tree/main/packages/%40aws-cdk/integ-runner) CLI
21
+ This library is meant to be used in combination with the [integ-runner](https://github.com/aws/aws-cdk-cli/tree/main/packages/%40aws-cdk/integ-runner) CLI
22
22
  to enable users to write and execute integration tests for AWS CDK Constructs.
23
23
 
24
24
  An integration test should be defined as a CDK application, and
@@ -1252,7 +1252,24 @@ When using a CloudFront PublicKey, only the `comment` field can be updated after
1252
1252
  Resource handler returned message: "Invalid request provided: AWS::CloudFront::PublicKey"
1253
1253
  ```
1254
1254
 
1255
- To update the `encodedKey`, you must change the logical ID of the public key resource in your template. This causes CloudFormation to create a new `cloudfront.PublicKey` resource and delete the old one during the next deployment.
1255
+ To update the `encodedKey`, you must change the ID of the public key resource in your template. This causes CloudFormation to create a new `cloudfront.PublicKey` resource and delete the old one during the next deployment.
1256
+
1257
+ Example:
1258
+
1259
+ ```ts
1260
+ // Step 1: Original deployment
1261
+ const originalKey = new cloudfront.PublicKey(this, 'MyPublicKeyV1', {
1262
+ encodedKey: '...', // contents of original public_key.pem file
1263
+ });
1264
+ ```
1265
+
1266
+ Regenerate a new key and change the construct id in the code:
1267
+ ```ts
1268
+ // Step 2: In a subsequent deployment, create a new key with a different ID
1269
+ const updatedKey = new cloudfront.PublicKey(this, 'MyPublicKeyV2', {
1270
+ encodedKey: '...', // contents of new public_key.pem file
1271
+ });
1272
+ ```
1256
1273
 
1257
1274
 
1258
1275
  See:
@@ -69,12 +69,12 @@ This example defines an Amazon EKS cluster with the following configuration:
69
69
  * A Kubernetes pod with a container based on the [paulbouwer/hello-kubernetes](https://github.com/paulbouwer/hello-kubernetes) image.
70
70
 
71
71
  ```ts
72
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
72
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
73
73
 
74
74
  // provisioning a cluster
75
75
  const cluster = new eks.Cluster(this, 'hello-eks', {
76
- version: eks.KubernetesVersion.V1_32,
77
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
76
+ version: eks.KubernetesVersion.V1_33,
77
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
78
78
  });
79
79
 
80
80
  // apply a kubernetes manifest to the cluster
@@ -139,22 +139,22 @@ A more detailed breakdown of each is provided further down this README.
139
139
  Creating a new cluster is done using the `Cluster` or `FargateCluster` constructs. The only required properties are the kubernetes `version` and `kubectlLayer`.
140
140
 
141
141
  ```ts
142
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
142
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
143
143
 
144
144
  new eks.Cluster(this, 'HelloEKS', {
145
- version: eks.KubernetesVersion.V1_32,
146
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
145
+ version: eks.KubernetesVersion.V1_33,
146
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
147
147
  });
148
148
  ```
149
149
 
150
150
  You can also use `FargateCluster` to provision a cluster that uses only fargate workers.
151
151
 
152
152
  ```ts
153
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
153
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
154
154
 
155
155
  new eks.FargateCluster(this, 'HelloEKS', {
156
- version: eks.KubernetesVersion.V1_32,
157
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
156
+ version: eks.KubernetesVersion.V1_33,
157
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
158
158
  });
159
159
  ```
160
160
 
@@ -177,13 +177,13 @@ By default, this library will allocate a managed node group with 2 *m5.large* in
177
177
  At cluster instantiation time, you can customize the number of instances and their type:
178
178
 
179
179
  ```ts
180
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
180
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
181
181
 
182
182
  new eks.Cluster(this, 'HelloEKS', {
183
- version: eks.KubernetesVersion.V1_32,
183
+ version: eks.KubernetesVersion.V1_33,
184
184
  defaultCapacity: 5,
185
185
  defaultCapacityInstance: ec2.InstanceType.of(ec2.InstanceClass.M5, ec2.InstanceSize.SMALL),
186
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
186
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
187
187
  });
188
188
  ```
189
189
 
@@ -192,12 +192,12 @@ To access the node group that was created on your behalf, you can use `cluster.d
192
192
  Additional customizations are available post instantiation. To apply them, set the default capacity to 0, and use the `cluster.addNodegroupCapacity` method:
193
193
 
194
194
  ```ts
195
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
195
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
196
196
 
197
197
  const cluster = new eks.Cluster(this, 'HelloEKS', {
198
- version: eks.KubernetesVersion.V1_32,
198
+ version: eks.KubernetesVersion.V1_33,
199
199
  defaultCapacity: 0,
200
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
200
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
201
201
  });
202
202
 
203
203
  cluster.addNodegroupCapacity('custom-node-group', {
@@ -273,7 +273,7 @@ Node groups are available with IPv6 configured networks. For custom roles assig
273
273
  > For more details visit [Configuring the Amazon VPC CNI plugin for Kubernetes to use IAM roles for service accounts](https://docs.aws.amazon.com/eks/latest/userguide/cni-iam-role.html#cni-iam-role-create-role)
274
274
 
275
275
  ```ts
276
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
276
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
277
277
 
278
278
  const ipv6Management = new iam.PolicyDocument({
279
279
  statements: [new iam.PolicyStatement({
@@ -299,9 +299,9 @@ const eksClusterNodeGroupRole = new iam.Role(this, 'eksClusterNodeGroupRole', {
299
299
  });
300
300
 
301
301
  const cluster = new eks.Cluster(this, 'HelloEKS', {
302
- version: eks.KubernetesVersion.V1_32,
302
+ version: eks.KubernetesVersion.V1_33,
303
303
  defaultCapacity: 0,
304
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
304
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
305
305
  });
306
306
 
307
307
  cluster.addNodegroupCapacity('custom-node-group', {
@@ -413,12 +413,12 @@ has been changed. As a workaround, you need to add a temporary policy to the clu
413
413
  successful replacement. Consider this example if you are renaming the cluster from `foo` to `bar`:
414
414
 
415
415
  ```ts
416
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
416
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
417
417
 
418
418
  const cluster = new eks.Cluster(this, 'cluster-to-rename', {
419
419
  clusterName: 'foo', // rename this to 'bar'
420
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
421
- version: eks.KubernetesVersion.V1_32,
420
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
421
+ version: eks.KubernetesVersion.V1_33,
422
422
  });
423
423
 
424
424
  // allow the cluster admin role to delete the cluster 'foo'
@@ -471,11 +471,11 @@ To create an EKS cluster that **only** uses Fargate capacity, you can use `Farga
471
471
  The following code defines an Amazon EKS cluster with a default Fargate Profile that matches all pods from the "kube-system" and "default" namespaces. It is also configured to [run CoreDNS on Fargate](https://docs.aws.amazon.com/eks/latest/userguide/fargate-getting-started.html#fargate-gs-coredns).
472
472
 
473
473
  ```ts
474
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
474
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
475
475
 
476
476
  const cluster = new eks.FargateCluster(this, 'MyCluster', {
477
- version: eks.KubernetesVersion.V1_32,
478
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
477
+ version: eks.KubernetesVersion.V1_33,
478
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
479
479
  });
480
480
  ```
481
481
 
@@ -551,12 +551,12 @@ To disable bootstrapping altogether (i.e. to fully customize user-data), set `bo
551
551
  You can also configure the cluster to use an auto-scaling group as the default capacity:
552
552
 
553
553
  ```ts
554
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
554
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
555
555
 
556
556
  const cluster = new eks.Cluster(this, 'HelloEKS', {
557
- version: eks.KubernetesVersion.V1_32,
557
+ version: eks.KubernetesVersion.V1_33,
558
558
  defaultCapacityType: eks.DefaultCapacityType.EC2,
559
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
559
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
560
560
  });
561
561
  ```
562
562
 
@@ -658,12 +658,12 @@ AWS Identity and Access Management (IAM) and native Kubernetes [Role Based Acces
658
658
  You can configure the [cluster endpoint access](https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html) by using the `endpointAccess` property:
659
659
 
660
660
  ```ts
661
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
661
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
662
662
 
663
663
  const cluster = new eks.Cluster(this, 'hello-eks', {
664
- version: eks.KubernetesVersion.V1_32,
664
+ version: eks.KubernetesVersion.V1_33,
665
665
  endpointAccess: eks.EndpointAccess.PRIVATE, // No access outside of your VPC.
666
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
666
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
667
667
  });
668
668
  ```
669
669
 
@@ -683,31 +683,31 @@ From the docs:
683
683
  To deploy the controller on your EKS cluster, configure the `albController` property:
684
684
 
685
685
  ```ts
686
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
686
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
687
687
 
688
688
  new eks.Cluster(this, 'HelloEKS', {
689
- version: eks.KubernetesVersion.V1_32,
689
+ version: eks.KubernetesVersion.V1_33,
690
690
  albController: {
691
691
  version: eks.AlbControllerVersion.V2_8_2,
692
692
  },
693
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
693
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
694
694
  });
695
695
  ```
696
696
 
697
697
  To provide additional Helm chart values supported by `albController` in CDK, use the `additionalHelmChartValues` property. For example, the following code snippet shows how to set the `enableWafV2` flag:
698
698
 
699
699
  ```ts
700
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
700
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
701
701
 
702
702
  new eks.Cluster(this, 'HelloEKS', {
703
- version: eks.KubernetesVersion.V1_32,
703
+ version: eks.KubernetesVersion.V1_33,
704
704
  albController: {
705
705
  version: eks.AlbControllerVersion.V2_8_2,
706
706
  additionalHelmChartValues: {
707
707
  enableWafv2: false
708
708
  }
709
709
  },
710
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
710
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
711
711
  });
712
712
  ```
713
713
 
@@ -744,15 +744,15 @@ if (cluster.albController) {
744
744
  You can specify the VPC of the cluster using the `vpc` and `vpcSubnets` properties:
745
745
 
746
746
  ```ts
747
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
747
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
748
748
 
749
749
  declare const vpc: ec2.Vpc;
750
750
 
751
751
  new eks.Cluster(this, 'HelloEKS', {
752
- version: eks.KubernetesVersion.V1_32,
752
+ version: eks.KubernetesVersion.V1_33,
753
753
  vpc,
754
754
  vpcSubnets: [{ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }],
755
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
755
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
756
756
  });
757
757
  ```
758
758
 
@@ -795,11 +795,11 @@ The `ClusterHandler` is a set of Lambda functions (`onEventHandler`, `isComplete
795
795
  You can configure the environment of the Cluster Handler functions by specifying it at cluster instantiation. For example, this can be useful in order to configure an http proxy:
796
796
 
797
797
  ```ts
798
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
798
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
799
799
 
800
800
  declare const proxyInstanceSecurityGroup: ec2.SecurityGroup;
801
801
  const cluster = new eks.Cluster(this, 'hello-eks', {
802
- version: eks.KubernetesVersion.V1_32,
802
+ version: eks.KubernetesVersion.V1_33,
803
803
  clusterHandlerEnvironment: {
804
804
  https_proxy: 'http://proxy.myproxy.com',
805
805
  },
@@ -808,7 +808,7 @@ const cluster = new eks.Cluster(this, 'hello-eks', {
808
808
  * Cluster Handler Lambdas so that it can reach the proxy.
809
809
  */
810
810
  clusterHandlerSecurityGroup: proxyInstanceSecurityGroup,
811
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
811
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
812
812
  });
813
813
  ```
814
814
 
@@ -817,7 +817,7 @@ const cluster = new eks.Cluster(this, 'hello-eks', {
817
817
  You can optionally choose to configure your cluster to use IPv6 using the [`ipFamily`](https://docs.aws.amazon.com/eks/latest/APIReference/API_KubernetesNetworkConfigRequest.html#AmazonEKS-Type-KubernetesNetworkConfigRequest-ipFamily) definition for your cluster. Note that this will require the underlying subnets to have an associated IPv6 CIDR.
818
818
 
819
819
  ```ts
820
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
820
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
821
821
  declare const vpc: ec2.Vpc;
822
822
 
823
823
  function associateSubnetWithV6Cidr(vpc: ec2.Vpc, count: number, subnet: ec2.ISubnet) {
@@ -843,11 +843,11 @@ for (let subnet of subnets) {
843
843
  }
844
844
 
845
845
  const cluster = new eks.Cluster(this, 'hello-eks', {
846
- version: eks.KubernetesVersion.V1_32,
846
+ version: eks.KubernetesVersion.V1_33,
847
847
  vpc: vpc,
848
848
  ipFamily: eks.IpFamily.IP_V6,
849
849
  vpcSubnets: [{ subnets: vpc.publicSubnets }],
850
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
850
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
851
851
  });
852
852
  ```
853
853
 
@@ -878,14 +878,14 @@ const cluster = eks.Cluster.fromClusterAttributes(this, 'Cluster', {
878
878
  You can configure the environment of this function by specifying it at cluster instantiation. For example, this can be useful in order to configure an http proxy:
879
879
 
880
880
  ```ts
881
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
881
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
882
882
 
883
883
  const cluster = new eks.Cluster(this, 'hello-eks', {
884
- version: eks.KubernetesVersion.V1_32,
884
+ version: eks.KubernetesVersion.V1_33,
885
885
  kubectlEnvironment: {
886
886
  'http_proxy': 'http://proxy.myproxy.com',
887
887
  },
888
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
888
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
889
889
  });
890
890
  ```
891
891
 
@@ -902,11 +902,11 @@ Depending on which version of kubernetes you're targeting, you will need to use
902
902
  the `@aws-cdk/lambda-layer-kubectl-vXY` packages.
903
903
 
904
904
  ```ts
905
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
905
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
906
906
 
907
907
  const cluster = new eks.Cluster(this, 'hello-eks', {
908
- version: eks.KubernetesVersion.V1_32,
909
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
908
+ version: eks.KubernetesVersion.V1_33,
909
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
910
910
  });
911
911
  ```
912
912
 
@@ -941,7 +941,7 @@ const cluster1 = new eks.Cluster(this, 'MyCluster', {
941
941
  kubectlLayer: layer,
942
942
  vpc,
943
943
  clusterName: 'cluster-name',
944
- version: eks.KubernetesVersion.V1_32,
944
+ version: eks.KubernetesVersion.V1_33,
945
945
  });
946
946
 
947
947
  // or
@@ -957,12 +957,12 @@ const cluster2 = eks.Cluster.fromClusterAttributes(this, 'MyCluster', {
957
957
  By default, the kubectl provider is configured with 1024MiB of memory. You can use the `kubectlMemory` option to specify the memory size for the AWS Lambda function:
958
958
 
959
959
  ```ts
960
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
960
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
961
961
 
962
962
  new eks.Cluster(this, 'MyCluster', {
963
963
  kubectlMemory: Size.gibibytes(4),
964
- version: eks.KubernetesVersion.V1_32,
965
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
964
+ version: eks.KubernetesVersion.V1_33,
965
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
966
966
  });
967
967
 
968
968
  // or
@@ -999,13 +999,13 @@ cluster.addAutoScalingGroupCapacity('self-ng-arm', {
999
999
  When you create a cluster, you can specify a `mastersRole`. The `Cluster` construct will associate this role with the `system:masters` [RBAC](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) group, giving it super-user access to the cluster.
1000
1000
 
1001
1001
  ```ts
1002
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
1002
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
1003
1003
 
1004
1004
  declare const role: iam.Role;
1005
1005
  new eks.Cluster(this, 'HelloEKS', {
1006
- version: eks.KubernetesVersion.V1_32,
1006
+ version: eks.KubernetesVersion.V1_33,
1007
1007
  mastersRole: role,
1008
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
1008
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
1009
1009
  });
1010
1010
  ```
1011
1011
 
@@ -1051,26 +1051,26 @@ You can use the `secretsEncryptionKey` to configure which key the cluster will u
1051
1051
  > This setting can only be specified when the cluster is created and cannot be updated.
1052
1052
 
1053
1053
  ```ts
1054
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
1054
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
1055
1055
 
1056
1056
  const secretsKey = new kms.Key(this, 'SecretsKey');
1057
1057
  const cluster = new eks.Cluster(this, 'MyCluster', {
1058
1058
  secretsEncryptionKey: secretsKey,
1059
- version: eks.KubernetesVersion.V1_32,
1060
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
1059
+ version: eks.KubernetesVersion.V1_33,
1060
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
1061
1061
  });
1062
1062
  ```
1063
1063
 
1064
1064
  You can also use a similar configuration for running a cluster built using the FargateCluster construct.
1065
1065
 
1066
1066
  ```ts
1067
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
1067
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
1068
1068
 
1069
1069
  const secretsKey = new kms.Key(this, 'SecretsKey');
1070
1070
  const cluster = new eks.FargateCluster(this, 'MyFargateCluster', {
1071
1071
  secretsEncryptionKey: secretsKey,
1072
- version: eks.KubernetesVersion.V1_32,
1073
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
1072
+ version: eks.KubernetesVersion.V1_33,
1073
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
1074
1074
  });
1075
1075
  ```
1076
1076
 
@@ -1088,11 +1088,11 @@ When you create an Amazon EKS cluster, you can configure it to leverage the [EKS
1088
1088
  Once you have identified the on-premises node and pod (optional) CIDRs you will use for your hybrid nodes and the workloads running on them, you can specify them during cluster creation using the `remoteNodeNetworks` and `remotePodNetworks` (optional) properties:
1089
1089
 
1090
1090
  ```ts
1091
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
1091
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
1092
1092
 
1093
1093
  new eks.Cluster(this, 'Cluster', {
1094
- version: eks.KubernetesVersion.V1_32,
1095
- kubectlLayer: new KubectlV32Layer(this, 'KubectlLayer'),
1094
+ version: eks.KubernetesVersion.V1_33,
1095
+ kubectlLayer: new KubectlV33Layer(this, 'KubectlLayer'),
1096
1096
  remoteNodeNetworks: [
1097
1097
  {
1098
1098
  cidrs: ['10.0.0.0/16'],
@@ -1145,7 +1145,7 @@ To access the Kubernetes resources from the console, make sure your viewing prin
1145
1145
  in the `aws-auth` ConfigMap. Some options to consider:
1146
1146
 
1147
1147
  ```ts
1148
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
1148
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
1149
1149
  declare const cluster: eks.Cluster;
1150
1150
  declare const your_current_role: iam.Role;
1151
1151
  declare const vpc: ec2.Vpc;
@@ -1165,7 +1165,7 @@ your_current_role.addToPolicy(new iam.PolicyStatement({
1165
1165
 
1166
1166
  ```ts
1167
1167
  // Option 2: create your custom mastersRole with scoped assumeBy arn as the Cluster prop. Switch to this role from the AWS console.
1168
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
1168
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
1169
1169
  declare const vpc: ec2.Vpc;
1170
1170
 
1171
1171
 
@@ -1175,8 +1175,8 @@ const mastersRole = new iam.Role(this, 'MastersRole', {
1175
1175
 
1176
1176
  const cluster = new eks.Cluster(this, 'EksCluster', {
1177
1177
  vpc,
1178
- version: eks.KubernetesVersion.V1_32,
1179
- kubectlLayer: new KubectlV32Layer(this, 'KubectlLayer'),
1178
+ version: eks.KubernetesVersion.V1_33,
1179
+ kubectlLayer: new KubectlV33Layer(this, 'KubectlLayer'),
1180
1180
  mastersRole,
1181
1181
  });
1182
1182
 
@@ -1220,13 +1220,13 @@ AWS IAM principals from both Amazon EKS access entry APIs and the aws-auth confi
1220
1220
  To specify the `authenticationMode`:
1221
1221
 
1222
1222
  ```ts
1223
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
1223
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
1224
1224
  declare const vpc: ec2.Vpc;
1225
1225
 
1226
1226
  new eks.Cluster(this, 'Cluster', {
1227
1227
  vpc,
1228
- version: eks.KubernetesVersion.V1_32,
1229
- kubectlLayer: new KubectlV32Layer(this, 'KubectlLayer'),
1228
+ version: eks.KubernetesVersion.V1_33,
1229
+ kubectlLayer: new KubectlV33Layer(this, 'KubectlLayer'),
1230
1230
  authenticationMode: eks.AuthenticationMode.API_AND_CONFIG_MAP,
1231
1231
  });
1232
1232
  ```
@@ -1271,7 +1271,7 @@ eks.AccessPolicy.fromAccessPolicyName('AmazonEKSAdminPolicy', {
1271
1271
  Use `grantAccess()` to grant the AccessPolicy to an IAM principal:
1272
1272
 
1273
1273
  ```ts
1274
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
1274
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
1275
1275
  declare const vpc: ec2.Vpc;
1276
1276
 
1277
1277
  const clusterAdminRole = new iam.Role(this, 'ClusterAdminRole', {
@@ -1289,8 +1289,8 @@ const eksAdminViewRole = new iam.Role(this, 'EKSAdminViewRole', {
1289
1289
  const cluster = new eks.Cluster(this, 'Cluster', {
1290
1290
  vpc,
1291
1291
  mastersRole: clusterAdminRole,
1292
- version: eks.KubernetesVersion.V1_32,
1293
- kubectlLayer: new KubectlV32Layer(this, 'KubectlLayer'),
1292
+ version: eks.KubernetesVersion.V1_33,
1293
+ kubectlLayer: new KubectlV33Layer(this, 'KubectlLayer'),
1294
1294
  authenticationMode: eks.AuthenticationMode.API_AND_CONFIG_MAP,
1295
1295
  });
1296
1296
 
@@ -1622,12 +1622,12 @@ Pruning is enabled by default but can be disabled through the `prune` option
1622
1622
  when a cluster is defined:
1623
1623
 
1624
1624
  ```ts
1625
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
1625
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
1626
1626
 
1627
1627
  new eks.Cluster(this, 'MyCluster', {
1628
- version: eks.KubernetesVersion.V1_32,
1628
+ version: eks.KubernetesVersion.V1_33,
1629
1629
  prune: false,
1630
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
1630
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
1631
1631
  });
1632
1632
  ```
1633
1633
 
@@ -2030,17 +2030,17 @@ You can enable logging for each one separately using the `clusterLogging`
2030
2030
  property. For example:
2031
2031
 
2032
2032
  ```ts
2033
- import { KubectlV32Layer } from '@aws-cdk/lambda-layer-kubectl-v32';
2033
+ import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
2034
2034
 
2035
2035
  const cluster = new eks.Cluster(this, 'Cluster', {
2036
2036
  // ...
2037
- version: eks.KubernetesVersion.V1_32,
2037
+ version: eks.KubernetesVersion.V1_33,
2038
2038
  clusterLogging: [
2039
2039
  eks.ClusterLoggingTypes.API,
2040
2040
  eks.ClusterLoggingTypes.AUTHENTICATOR,
2041
2041
  eks.ClusterLoggingTypes.SCHEDULER,
2042
2042
  ],
2043
- kubectlLayer: new KubectlV32Layer(this, 'kubectl'),
2043
+ kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
2044
2044
  });
2045
2045
  ```
2046
2046
 
@@ -27,7 +27,7 @@ class EksClusterStack extends Stack {
27
27
  vpc: this.vpc,
28
28
  mastersRole,
29
29
  defaultCapacity: 0,
30
- ...getClusterVersionConfig(this, eks.KubernetesVersion.V1_32),
30
+ ...getClusterVersionConfig(this, eks.KubernetesVersion.V1_33),
31
31
  });
32
32
 
33
33
  // create nodegroup with AL2023_X86_64_STANDARD
@@ -65,4 +65,3 @@ new integ.IntegTest(app, 'aws-cdk-eks-cluster-al2023-nodegroup', {
65
65
  // Test includes assets that are updated weekly. If not disabled, the upgrade PR will fail.
66
66
  diffAssets: false,
67
67
  });
68
- app.synth();
@@ -17,7 +17,7 @@ class EksFargateClusterStack extends Stack {
17
17
  this.node.setContext(EC2_RESTRICT_DEFAULT_SECURITY_GROUP, false);
18
18
  this.vpc = props?.vpc ?? this.createDummyVpc();
19
19
  new eks.FargateCluster(this, 'FargateCluster', {
20
- ...getClusterVersionConfig(this, eks.KubernetesVersion.V1_30),
20
+ ...getClusterVersionConfig(this, eks.KubernetesVersion.V1_33),
21
21
  prune: false,
22
22
  authenticationMode: props?.authMode,
23
23
  vpc: this.vpc,
@@ -50,5 +50,3 @@ new integ.IntegTest(app, 'aws-cdk-eks-fargate-cluster', {
50
50
  // Test includes assets that are updated weekly. If not disabled, the upgrade PR will fail.
51
51
  diffAssets: false,
52
52
  });
53
-
54
- app.synth();
@@ -91,9 +91,10 @@ const trail = new cloudtrail.Trail(this, 'myCloudTrail', {
91
91
  });
92
92
  ```
93
93
 
94
- Note that calls to `addToResourcePolicy` and `grant*` methods on `myKeyAlias` will be
95
- no-ops, and `addAlias` and `aliasTargetKey` will fail, as the imported alias does not
96
- have a reference to the underlying KMS Key.
94
+ Note that calls to `addToResourcePolicy` method on `myKeyAlias` will be a no-op, `addAlias` and `aliasTargetKey` will fail.
95
+ The `grant*` methods will not modify the key policy, as the imported alias does not have a reference to the underlying KMS Key.
96
+ For the `grant*` methods to modify the principal's IAM policy, the feature flag `@aws-cdk/aws-kms:applyImportedAliasPermissionsToPrincipal`
97
+ must be set to `true`. By default, this flag is `false` and `grant*` calls on an imported alias are a no-op.
97
98
 
98
99
  ### Lookup key by alias
99
100
 
@@ -0,0 +1,26 @@
1
+ import { App, Stack } from 'aws-cdk-lib';
2
+ import { Alias } from 'aws-cdk-lib/aws-kms';
3
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
4
+ import { ServicePrincipal, Role } from 'aws-cdk-lib/aws-iam';
5
+ import * as cxapi from 'aws-cdk-lib/cx-api';
6
+
7
+ const app = new App({
8
+ context: { [cxapi.KMS_APPLY_IMPORTED_ALIAS_PERMISSIONS_TO_PRINCIPAL]: true },
9
+ });
10
+ const stack = new Stack(app, 'aws-cdk-kms');
11
+ const alias = Alias.fromAliasName(stack, 'alias', 'alias/MyKey');
12
+
13
+ const role = new Role(stack, 'Role', {
14
+ assumedBy: new ServicePrincipal('lambda.amazonaws.com'),
15
+ });
16
+
17
+ alias.grantVerifyMac(role);
18
+ alias.grantEncryptDecrypt(role);
19
+ alias.grantSignVerify(role);
20
+ alias.grantGenerateMac(role);
21
+
22
+ new IntegTest(app, 'kms-alias-from-alias-name', {
23
+ testCases: [stack],
24
+ });
25
+
26
+ app.synth();
@@ -445,6 +445,74 @@ myFunction.addEventSource(new ManagedKafkaEventSource({
445
445
  }));
446
446
  ```
447
447
 
448
+ Set a confluent or self-managed schema registry to de-serialize events from the event source. Note, this will similarly work for `SelfManagedKafkaEventSource` but the example only shows setup for `ManagedKafkaEventSource`.
449
+
450
+ ```ts
451
+ import { ManagedKafkaEventSource, ConfluentSchemaRegistry } from 'aws-cdk-lib/aws-lambda-event-sources';
452
+ import { Secret } from 'aws-cdk-lib/aws-secretsmanager';
453
+
454
+ // Your MSK cluster arn
455
+ declare const clusterArn: string;
456
+
457
+ // The Kafka topic you want to subscribe to
458
+ const topic = 'some-cool-topic';
459
+
460
+ const secret = new Secret(this, 'Secret', { secretName: 'AmazonMSK_KafkaSecret' });
461
+
462
+ declare const myFunction: lambda.Function;
463
+ myFunction.addEventSource(new ManagedKafkaEventSource({
464
+ clusterArn,
465
+ topic,
466
+ startingPosition: lambda.StartingPosition.TRIM_HORIZON,
467
+ provisionedPollerConfig: {
468
+ minimumPollers: 1,
469
+ maximumPollers: 3,
470
+ },
471
+ schemaRegistryConfig: new ConfluentSchemaRegistry({
472
+ schemaRegistryUri: 'https://example.com',
473
+ eventRecordFormat: lambda.EventRecordFormat.JSON,
474
+ authenticationType: lambda.KafkaSchemaRegistryAccessConfigType.BASIC_AUTH,
475
+ secret: secret,
476
+ schemaValidationConfigs: [{ attribute: lambda.KafkaSchemaValidationAttribute.KEY }],
477
+ }),
478
+ }));
479
+ ```
480
+
481
+ Set Glue schema registry to de-serialize events from the event source. Note, this will similarly work for `SelfManagedKafkaEventSource` but the example only shows setup for `ManagedKafkaEventSource`.
482
+
483
+ ```ts
484
+ import { CfnRegistry } from 'aws-cdk-lib/aws-glue';
485
+ import { ManagedKafkaEventSource, GlueSchemaRegistry } from 'aws-cdk-lib/aws-lambda-event-sources';
486
+
487
+ // Your MSK cluster arn
488
+ declare const clusterArn: string;
489
+
490
+ // The Kafka topic you want to subscribe to
491
+ const topic = 'some-cool-topic';
492
+
493
+ // Your Glue Schema Registry
494
+ const glueRegistry = new CfnRegistry(this, 'Registry', {
495
+ name: 'schema-registry',
496
+ description: 'Schema registry for event source',
497
+ });
498
+
499
+ declare const myFunction: lambda.Function;
500
+ myFunction.addEventSource(new ManagedKafkaEventSource({
501
+ clusterArn,
502
+ topic,
503
+ startingPosition: lambda.StartingPosition.TRIM_HORIZON,
504
+ provisionedPollerConfig: {
505
+ minimumPollers: 1,
506
+ maximumPollers: 3,
507
+ },
508
+ schemaRegistryConfig: new GlueSchemaRegistry({
509
+ schemaRegistry: glueRegistry,
510
+ eventRecordFormat: lambda.EventRecordFormat.JSON,
511
+ schemaValidationConfigs: [{ attribute: lambda.KafkaSchemaValidationAttribute.KEY }],
512
+ }),
513
+ }));
514
+ ```
515
+
448
516
  ## Roadmap
449
517
 
450
518
  Eventually, this module will support all the event sources described under
@@ -0,0 +1,186 @@
1
+ import { TestFunction } from './test-function';
2
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
3
+ import {
4
+ SelfManagedKafkaEventSource,
5
+ AuthenticationMethod,
6
+ GlueSchemaRegistry,
7
+ ConfluentSchemaRegistry,
8
+ } from 'aws-cdk-lib/aws-lambda-event-sources';
9
+ import * as lambda from 'aws-cdk-lib/aws-lambda';
10
+ import { App, StackProps, Stack, SecretValue } from 'aws-cdk-lib';
11
+ import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
12
+ import { CfnRegistry } from 'aws-cdk-lib/aws-glue';
13
+
14
+ // Self-Managed Kafka Stack with Schema Registry
15
+ export class SmkGlueSchemaRegistryStack extends Stack {
16
+ constructor(scope: App, id: string, props?: StackProps) {
17
+ super(scope, id, props);
18
+
19
+ // Create a Lambda function
20
+ const testLambdaFunction = new TestFunction(this, 'GlueFunction');
21
+
22
+ // Create dummy certificates for authentication
23
+ const dummyCertString = `-----BEGIN CERTIFICATE-----
24
+ MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw
25
+ cmUuiAii9R0=
26
+ -----END CERTIFICATE-----
27
+ -----BEGIN CERTIFICATE-----
28
+ MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb
29
+ c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg==
30
+ -----END CERTIFICATE-----"
31
+ `;
32
+
33
+ const dummyPrivateKey = `-----BEGIN ENCRYPTED PRIVATE KEY-----
34
+ zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA==
35
+ -----END ENCRYPTED PRIVATE KEY-----`;
36
+
37
+ // Create secrets for Kafka authentication
38
+ const rootCASecret = new secretsmanager.Secret(this, 'GlueRootCASecret', {
39
+ secretObjectValue: {
40
+ certificate: SecretValue.unsafePlainText(dummyCertString),
41
+ },
42
+ });
43
+
44
+ const clientCertificatesSecret = new secretsmanager.Secret(this, 'GlueClientCertSecret', {
45
+ secretObjectValue: {
46
+ certificate: SecretValue.unsafePlainText(dummyCertString),
47
+ privateKey: SecretValue.unsafePlainText(dummyPrivateKey),
48
+ },
49
+ });
50
+
51
+ // Grant read permissions to the Lambda function
52
+ rootCASecret.grantRead(testLambdaFunction);
53
+ clientCertificatesSecret.grantRead(testLambdaFunction);
54
+
55
+ // Create a Glue Schema Registry
56
+ const glueRegistry = new CfnRegistry(this, 'SchemaRegistry', {
57
+ name: 'smk-glue-test-schema-registry',
58
+ description: 'Schema registry for SMK integration tests',
59
+ });
60
+
61
+ // Define Kafka bootstrap servers
62
+ const bootstrapServers = [
63
+ 'kafka-broker-1:9092',
64
+ 'kafka-broker-2:9092',
65
+ 'kafka-broker-3:9092',
66
+ ];
67
+
68
+ // Common configuration for SMK event sources
69
+ const commonConfig = {
70
+ bootstrapServers,
71
+ secret: clientCertificatesSecret,
72
+ authenticationMethod: AuthenticationMethod.CLIENT_CERTIFICATE_TLS_AUTH,
73
+ rootCACertificate: rootCASecret,
74
+ startingPosition: lambda.StartingPosition.TRIM_HORIZON,
75
+ };
76
+
77
+ // SMK with Glue Schema Registry
78
+ testLambdaFunction.addEventSource(new SelfManagedKafkaEventSource({
79
+ ...commonConfig,
80
+ topic: 'test-topic-smk-glue',
81
+ consumerGroupId: 'test-consumer-group-smk-glue',
82
+ provisionedPollerConfig: {
83
+ minimumPollers: 1,
84
+ maximumPollers: 3,
85
+ },
86
+ schemaRegistryConfig: new GlueSchemaRegistry({
87
+ schemaRegistry: glueRegistry,
88
+ eventRecordFormat: lambda.EventRecordFormat.JSON,
89
+ schemaValidationConfigs: [{ attribute: lambda.KafkaSchemaValidationAttribute.KEY }],
90
+ }),
91
+ }));
92
+ }
93
+ }
94
+
95
+ // Self-Managed Kafka Stack with Schema Registry
96
+ export class SmkConfluentSchemaRegistryStack extends Stack {
97
+ constructor(scope: App, id: string, props?: StackProps) {
98
+ super(scope, id, props);
99
+
100
+ // Create a Lambda function
101
+ const testLambdaFunction = new TestFunction(this, 'ConfluentFunction');
102
+
103
+ // Create dummy certificates for authentication
104
+ const dummyCertString = `-----BEGIN CERTIFICATE-----
105
+ MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw
106
+ cmUuiAii9R0=
107
+ -----END CERTIFICATE-----
108
+ -----BEGIN CERTIFICATE-----
109
+ MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb
110
+ c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg==
111
+ -----END CERTIFICATE-----"
112
+ `;
113
+
114
+ const dummyPrivateKey = `-----BEGIN ENCRYPTED PRIVATE KEY-----
115
+ zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA==
116
+ -----END ENCRYPTED PRIVATE KEY-----`;
117
+
118
+ // Create secrets for Kafka authentication
119
+ const rootCASecret = new secretsmanager.Secret(this, 'ConfluentRootCASecret', {
120
+ secretObjectValue: {
121
+ certificate: SecretValue.unsafePlainText(dummyCertString),
122
+ },
123
+ });
124
+
125
+ const clientCertificatesSecret = new secretsmanager.Secret(this, 'ConfluentClientCertSecret', {
126
+ secretObjectValue: {
127
+ certificate: SecretValue.unsafePlainText(dummyCertString),
128
+ privateKey: SecretValue.unsafePlainText(dummyPrivateKey),
129
+ },
130
+ });
131
+
132
+ // Grant read permissions to the Lambda function
133
+ rootCASecret.grantRead(testLambdaFunction);
134
+ clientCertificatesSecret.grantRead(testLambdaFunction);
135
+
136
+ // Define Kafka bootstrap servers
137
+ const bootstrapServers = [
138
+ 'kafka-broker-1:9092',
139
+ 'kafka-broker-2:9092',
140
+ 'kafka-broker-3:9092',
141
+ ];
142
+
143
+ // Common configuration for SMK event sources
144
+ const commonConfig = {
145
+ bootstrapServers,
146
+ secret: clientCertificatesSecret,
147
+ authenticationMethod: AuthenticationMethod.CLIENT_CERTIFICATE_TLS_AUTH,
148
+ rootCACertificate: rootCASecret,
149
+ startingPosition: lambda.StartingPosition.TRIM_HORIZON,
150
+ };
151
+
152
+ // SMK with Confluent Schema Registry
153
+ testLambdaFunction.addEventSource(new SelfManagedKafkaEventSource({
154
+ ...commonConfig,
155
+ topic: 'test-topic-smk-confluent',
156
+ consumerGroupId: 'test-consumer-group-smk-confluent',
157
+ provisionedPollerConfig: {
158
+ minimumPollers: 1,
159
+ maximumPollers: 3,
160
+ },
161
+ schemaRegistryConfig: new ConfluentSchemaRegistry({
162
+ schemaRegistryUri: 'https://schema-registry.example.com',
163
+ eventRecordFormat: lambda.EventRecordFormat.JSON,
164
+ authenticationType: lambda.KafkaSchemaRegistryAccessConfigType.BASIC_AUTH,
165
+ secret: clientCertificatesSecret,
166
+ schemaValidationConfigs: [{ attribute: lambda.KafkaSchemaValidationAttribute.KEY }],
167
+ }),
168
+ }));
169
+ }
170
+ }
171
+
172
+ // Create the app and stacks
173
+ const app = new App({
174
+ postCliContext: {
175
+ '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
176
+ },
177
+ });
178
+ const glueStack = new SmkGlueSchemaRegistryStack(app, 'lambda-event-source-glue-schema-registry');
179
+ const confluentStack = new SmkConfluentSchemaRegistryStack(app, 'lambda-event-source-confluent-schema-registry');
180
+
181
+ // Create the integration tests
182
+ new IntegTest(app, 'SchemaRegistryInteg', {
183
+ testCases: [glueStack, confluentStack],
184
+ });
185
+
186
+ app.synth();
@@ -156,6 +156,22 @@ bucket.grantReadWrite(myLambda);
156
156
  Will give the Lambda's execution role permissions to read and write
157
157
  from the bucket.
158
158
 
159
+ ### Understanding "grant" Methods
160
+
161
+ The S3 construct library provides several grant methods for the `Bucket` resource, but two of them have a special behavior. This two accept an `objectsKeyPattern` parameter to restrict granted permissions to specific resources:
162
+ - `grantRead`
163
+ - `grantReadWrite`
164
+
165
+ When examining the synthesized policy, you'll notice it includes both your specified object key patterns and the bucket itself.
166
+ This is by design. Some permissions (like `s3:ListBucket`) apply at the bucket level, while others (like `s3:GetObject`) apply to specific objects.
167
+
168
+ Specifically, the [`s3:ListBucket` action operates on bucket resources](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#amazons3-bucket)
169
+ and requires the bucket ARN to work properly. This might be seen as a bug, giving the impression that more permissions were granted than the ones you intended, but the reality is that the policy does not ignore your `objectsKeyPattern` - object-specific actions like `s3:GetObject`
170
+ will still be limited to the resources defined in your pattern.
171
+
172
+ If you need to restrict the `s3:ListBucket` action to specific paths, you can add a `Condition` to your policy that limits the `objectsKeyPattern` to specific folders. For more details and examples, see the [AWS documentation on bucket policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-folders).
173
+
174
+
159
175
  ## AWS Foundational Security Best Practices
160
176
 
161
177
  ### Enforcing SSL
@@ -103,6 +103,7 @@ Flags come in three types:
103
103
  | [@aws-cdk/s3-notifications:addS3TrustKeyPolicyForSnsSubscriptions](#aws-cdks3-notificationsadds3trustkeypolicyforsnssubscriptions) | Add an S3 trust policy to a KMS key resource policy for SNS subscriptions. | 2.195.0 | fix |
104
104
  | [@aws-cdk/aws-ec2:requirePrivateSubnetsForEgressOnlyInternetGateway](#aws-cdkaws-ec2requireprivatesubnetsforegressonlyinternetgateway) | When enabled, the EgressOnlyGateway resource is only created if private subnets are defined in the dual-stack VPC. | 2.196.0 | fix |
105
105
  | [@aws-cdk/aws-s3:publicAccessBlockedByDefault](#aws-cdkaws-s3publicaccessblockedbydefault) | When enabled, setting any combination of options for BlockPublicAccess will automatically set true for any options not defined. | 2.196.0 | fix |
106
+ | [@aws-cdk/aws-kms:applyImportedAliasPermissionsToPrincipal](#aws-cdkaws-kmsapplyimportedaliaspermissionstoprincipal) | Enable grant methods on Aliases imported by name to use kms:ResourceAliases condition | V2NEXT | fix |
106
107
 
107
108
  <!-- END table -->
108
109
 
@@ -146,6 +147,7 @@ The following json shows the current recommended set of flags, as `cdk init` wou
146
147
  "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true,
147
148
  "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true,
148
149
  "@aws-cdk/aws-kms:aliasNameRef": true,
150
+ "@aws-cdk/aws-kms:applyImportedAliasPermissionsToPrincipal": true,
149
151
  "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true,
150
152
  "@aws-cdk/core:includePrefixInUniqueNameGeneration": true,
151
153
  "@aws-cdk/aws-efs:denyAnonymousAccess": true,
@@ -2175,4 +2177,23 @@ The new behavior from this feature will allow a user, for example, to set 1 of t
2175
2177
  | 2.196.0 | `false` | `true` |
2176
2178
 
2177
2179
 
2180
+ ### @aws-cdk/aws-kms:applyImportedAliasPermissionsToPrincipal
2181
+
2182
+ *Enable grant methods on Aliases imported by name to use kms:ResourceAliases condition*
2183
+
2184
+ Flag type: Backwards incompatible bugfix
2185
+
2186
+ This flag enables the grant methods (grant, grantDecrypt, grantEncrypt, etc.) on Aliases imported
2187
+ by name to grant permissions based on the 'kms:ResourceAliases' condition rather than no-op grants.
2188
+ When disabled, grant calls on imported aliases will be dropped (no-op) to maintain compatibility.
2189
+
2190
+
2191
+ | Since | Default | Recommended |
2192
+ | ----- | ----- | ----- |
2193
+ | (not in v1) | | |
2194
+ | V2NEXT | `false` | `true` |
2195
+
2196
+ **Compatibility with old behavior:** Remove calls to the grant* methods on the aliases referenced by name
2197
+
2198
+
2178
2199
  <!-- END details -->
@@ -310,6 +310,20 @@ _cdk.json_
310
310
  }
311
311
  ```
312
312
 
313
+ * `@aws-cdk/aws-kms:applyImportedAliasPermissionsToPrincipal`
314
+
315
+ Enable grant methods on imported KMS Aliases to apply permissions scoped by the alias using the `kms:ResourceAliases` condition key. When this flag is disabled, grant* methods on `Alias.fromAliasName` remain no-ops to preserve existing behavior.
316
+
317
+ _cdk.json_
318
+
319
+ ```json
320
+ {
321
+ "context": {
322
+ "@aws-cdk/aws-kms:applyImportedAliasPermissionsToPrincipal": true
323
+ }
324
+ }
325
+ ```
326
+
313
327
  * `@aws-cdk/aws-eks:nodegroupNameAttribute`
314
328
 
315
329
  When enabled, nodegroupName attribute of the provisioned EKS NodeGroup will not have the cluster name prefix.
@@ -565,6 +565,7 @@ pass in order to promote from the `PreProd` to the `Prod` environment:
565
565
  declare const pipeline: pipelines.CodePipeline;
566
566
  const preprod = new MyApplicationStage(this, 'PreProd');
567
567
  const prod = new MyApplicationStage(this, 'Prod');
568
+ const topic = new sns.Topic(this, 'ChangeApprovalTopic');
568
569
 
569
570
  pipeline.addStage(preprod, {
570
571
  post: [
@@ -574,7 +575,12 @@ pipeline.addStage(preprod, {
574
575
  ],
575
576
  });
576
577
  pipeline.addStage(prod, {
577
- pre: [new pipelines.ManualApprovalStep('PromoteToProd')],
578
+ pre: [new pipelines.ManualApprovalStep('PromoteToProd', {
579
+ //All options below are optional
580
+ comment: 'Please validate changes',
581
+ reviewUrl: 'https://my.webservice.com/',
582
+ notificationTopic: topic,
583
+ })],
578
584
  });
579
585
  ```
580
586
 
@@ -0,0 +1,53 @@
1
+ import * as path from 'path';
2
+ import * as s3 from 'aws-cdk-lib/aws-s3';
3
+ import * as s3_assets from 'aws-cdk-lib/aws-s3-assets';
4
+ import * as sqs from 'aws-cdk-lib/aws-sqs';
5
+ import * as pipelines from 'aws-cdk-lib/pipelines';
6
+ import { App, RemovalPolicy, Stack, StackProps, Stage, StageProps } from 'aws-cdk-lib';
7
+ import { Construct } from 'constructs';
8
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
9
+
10
+ class PipelineStack extends Stack {
11
+ constructor(scope: Construct, id: string, props?: StackProps) {
12
+ super(scope, id, props);
13
+
14
+ const bucket = new s3.Bucket(this, 'Source', {
15
+ removalPolicy: RemovalPolicy.DESTROY,
16
+ });
17
+ const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
18
+ synth: new pipelines.ShellStep('Synth', {
19
+ input: pipelines.CodePipelineSource.s3(bucket, 'source.zip'),
20
+ commands: [
21
+ 'npm ci',
22
+ 'npm run build',
23
+ 'npx cdk synth',
24
+ ],
25
+ }),
26
+ publishAssetsInParallel: false,
27
+ });
28
+
29
+ pipeline.addStage(new AppStage(this, 'Beta'));
30
+ }
31
+ }
32
+
33
+ class AppStage extends Stage {
34
+ constructor(scope: Construct, id: string, props?: StageProps) {
35
+ super(scope, id, props);
36
+
37
+ const stack = new Stack(this, 'Stack1');
38
+ new s3_assets.Asset(stack, 'Asset', {
39
+ path: path.join(__dirname, 'testhelpers/assets/test-file-asset.txt'),
40
+ });
41
+ new s3_assets.Asset(stack, 'Asset2', {
42
+ path: path.join(__dirname, 'testhelpers/assets/test-file-asset-two.txt'),
43
+ });
44
+
45
+ new sqs.Queue(stack, 'OtherQueue');
46
+ }
47
+ }
48
+
49
+ const app = new App();
50
+ const stack = new PipelineStack(app, 'PipelineStackSinglePublisher');
51
+ new IntegTest(app, 'PipelineStackSinglePublisher-integ', {
52
+ testCases: [stack],
53
+ });
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: konokenj.cdk-api-mcp-server
3
- Version: 0.28.0
3
+ Version: 0.29.0
4
4
  Summary: An MCP server provides AWS CDK API Reference
5
5
  Project-URL: Documentation, https://github.com/konokenj/cdk-api-mcp-server#readme
6
6
  Project-URL: Issues, https://github.com/konokenj/cdk-api-mcp-server/issues
@@ -26,7 +26,7 @@ Description-Content-Type: text/markdown
26
26
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/konokenj.cdk-api-mcp-server.svg)](https://pypi.org/project/konokenj.cdk-api-mcp-server)
27
27
 
28
28
  <!-- DEP-VERSIONS-START -->
29
- [![aws-cdk](https://img.shields.io/badge/aws%20cdk-v2.200.2-blue.svg)](https://github.com/konokenj/cdk-api-mcp-server/blob/main/current-versions/aws-cdk.txt)
29
+ [![aws-cdk](https://img.shields.io/badge/aws%20cdk-v2.201.0-blue.svg)](https://github.com/konokenj/cdk-api-mcp-server/blob/main/current-versions/aws-cdk.txt)
30
30
  <!-- DEP-VERSIONS-END -->
31
31
 
32
32
  ---
@@ -1,4 +1,4 @@
1
- cdk_api_mcp_server/__about__.py,sha256=H02F2KaySSZlTVNBkuy6vTZUNhJZK1YXywCoSsUSBMQ,129
1
+ cdk_api_mcp_server/__about__.py,sha256=9S13DyABPe2B3vTF5X18DqNAAQQ25aIIJrzmwh5oIZU,129
2
2
  cdk_api_mcp_server/__init__.py,sha256=yJA6yIEhJviC-qNlB-nC6UR1JblQci_d84i-viHZkc0,187
3
3
  cdk_api_mcp_server/models.py,sha256=cMS1Hi29M41YjuBxqqrzNrNvyG3MgnUBb1SqYpMCJ30,692
4
4
  cdk_api_mcp_server/resources.py,sha256=R7LVwn29I4BJzU5XAwKbX8j6uy-3ZxcB1b0HzZ_Z2PI,6689
@@ -6,7 +6,7 @@ cdk_api_mcp_server/server.py,sha256=uN5SE6PHpiOYY8QlNID1a0j2hLdeO61QX3kgC_oTODg,
6
6
  cdk_api_mcp_server/resources/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/app-staging-synthesizer-alpha/README.md,sha256=rAatqlr_JE06sjgcBVdXszpwh3grV4aFkkb9L2s8IIU,16492
8
8
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/app-staging-synthesizer-alpha/resource-names.md,sha256=oSTmVHH2AZ9cd-KiITtuS0nJMOWGC0FpVg3t7p6UPMM,1323
9
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-amplify-alpha/README.md,sha256=2QWbqeWqbDhrlMvPOpBh120qqMNNk01P48lMaBJHNng,10496
9
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-amplify-alpha/README.md,sha256=gwkmgfklAjRLDG8uegSV68kxNKvG9YW1Ym8ZH5V9ezE,12236
10
10
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-applicationsignals-alpha/README.md,sha256=6nqc-WbHB1iFE3vXDr6hyQs8tYS6wwnWutXePY4EF4w,10873
11
11
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-apprunner-alpha/README.md,sha256=Jtm3RbnP4jQy8BYXwHvaRbMKizUjr4SqvimVMYhu6WQ,11982
12
12
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-alpha/README.md,sha256=vdiDc1bjueXbwQp3h_1xCrk6eCiOFZ74oIAMug43QVY,26658
@@ -42,7 +42,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-servicecatalogappre
42
42
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/cfnspec/README.md,sha256=nnoF99zdHuBLVTMCVB9k3-eLiqjS6XTETxnIi5hW0Y8,164
43
43
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/custom-resource-handlers/README.md,sha256=QctOoyGt6AqVWeFhRwpkCSxHZ1XFWj_nCKlkJHDFock,965
44
44
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/example-construct-library/README.md,sha256=vnVXyvtN9ICph68sw2y6gkdD_gmas0PiUa9TkwNckWQ,4501
45
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/integ-tests-alpha/README.md,sha256=Y5CjbYjAEwqFEyPbbm4hkluN9X9hScg4Q2h4X1MV864,17485
45
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/integ-tests-alpha/README.md,sha256=VifKLrR404_yLVT0E3ai8f3R5K0h22VNwQplpSUSZqc,17489
46
46
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/README.md/README.md,sha256=--qULBmqJB9AEPhZvZePzgS6c14VtlAclTtgSYWMPNQ,62385
47
47
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/assertions/MIGRATING.md,sha256=SYGX8QNB1Pm_rVYDBp4QRWkqwnxOb3CHzeFglUy_53k,3347
48
48
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/assertions/README.md,sha256=3yo3D05n5explTIgnuF-vkk01MTYeAYe7_3rcsD2baE,18299
@@ -232,7 +232,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudformation/i
232
232
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudformation/integ.nested-stacks-refs1.ts,sha256=DPzU8mAOqbwCB2zQERq2O-XbkfDeExcJShVp2RKRYb8,1045
233
233
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudformation/integ.nested-stacks-refs2.ts,sha256=ffjUAflZ0gvH7rDOpds2wG3m9HJoTgNj6g-e0L37Upc,1178
234
234
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudformation/integ.nested-stacks-refs3.ts,sha256=yMjla3H8kO3FNlshOtm7KojhoiesyPRaBb0GFmthCqE,1047
235
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/README.md,sha256=3QlTRLjR1OgrmZNoVHO-QTfxJ6WeFzqx5uWghb1DJZE,49696
235
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/README.md,sha256=3uIR4OWiq_6bffv0vFl9LgdqdiyoQQQg6q5s0-8bfJU,50161
236
236
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/integ.cloudfront-bucket-logging.ts,sha256=R_6hlp4mZ3laXosJhz7fTqKqZgCj-oEggBaA8Sm--DI,1178
237
237
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/integ.cloudfront-cross-region-cert.ts,sha256=f774j3lIB3xUsszX5xoo9x5zas-W9O0ZBXLIWmeTQos,2096
238
238
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/integ.cloudfront-custom-s3.ts,sha256=_O3hXQD5N4vlOStBisGe-MAQ5nl7w3cb_UswFxrP20k,1380
@@ -684,12 +684,12 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-efs/integ.efs-tr
684
684
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-efs/integ.efs.permission.ts,sha256=bzH7koi5t2FgkDhEp-6ZtXgoteiCDTNd2igab4bXytA,3338
685
685
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-efs/integ.efs.ts,sha256=NmhtimqEUqH6Tu9sksWLmn8e9QcrlF-J1dn0B-9eVqw,837
686
686
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/MANUAL_TEST.md,sha256=uObwqDllAUYBGkoNEAQGioL6JuKqh5ScVbq9KC3x89Q,1862
687
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/README.md,sha256=oSe9CgxXaKWDS0fLKqE6eAAZ4bHSUXRWA2Bu1nCXMhA,81337
687
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/README.md,sha256=20F9MXScfbNlHhzEwIegmhFQ96JyKiRS8JgFzGz_LYw,81337
688
688
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.alb-controller-authapi.ts,sha256=L9dF26-F2Fw-O1iGAnT-AYnkq4JmO_IQoQn0RsOhLVY,1355
689
689
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.alb-controller.ts,sha256=cbL2kY-t0LAWLkK1Lb3RUPBeMUpw8xHWjDhkroD_Rb4,3314
690
690
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.custom-addons.ts,sha256=ZXsXljCokHOA_JubQ7ZsLT-tGy-28mg1gZ_bmNX_F-k,1475
691
691
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-addon.ts,sha256=27QObP5R7S6wvr_r7iwYhPxvU8_OSDjoCRIH3l8ak9o,1076
692
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-al2023-nodegroup.ts,sha256=_9FwyluV5pXcMBSjE1obkeFXsCSh3zQzGaIbDeeOcaA,2462
692
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-al2023-nodegroup.ts,sha256=C8fdvN5Xa7tvkV8SEqlSoE1rXYx_KKb3mNEsfmwn82s,2449
693
693
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-bottlerocket-ng.ts,sha256=gxc3SRUusX7GywuCFI8C9zng7Fza-3_c-7dNuUnUWBU,1965
694
694
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-cluster-handlers-vpc.ts,sha256=5ziP_cDA4Gvc0ZTEYsezSIw1XRi-JY3bIXB4MS9RP3c,1142
695
695
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-cluster-imported.ts,sha256=VcOdMfU2jCukU63bL1DJ03npPLyI8Xwr-vAtO3xFNMA,7448
@@ -707,7 +707,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-se
707
707
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-standard-access-entry.ts,sha256=upWuIZ41tsmF0n80W0jo82GYV7jXXYe8LBFTyUgON0k,1864
708
708
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-subnet-updates.ts,sha256=zVEcn14vZuvsj3IuzRjV5iSFSZdKmQJEoQHIfEyxa5c,1156
709
709
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-windows-ng.ts,sha256=yUFEU6FBn3WQcOJweV_p3KqJpyml_CkQdItcRo0HSiA,2118
710
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.fargate-cluster.ts,sha256=p668dqjce8WLmAOD84CRJ7CHh9OmPJEPiDMOAjzdgQk,2006
710
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.fargate-cluster.ts,sha256=Vl3pLV36u-EbqG9PbhJiABA_18PJIsMpKtJFk2SVErE,1992
711
711
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.nodegroup-repair-config.ts,sha256=hgKsbhgAaXS73GTQGOcVnmI_-gReoTuPEgCOeBpwuBA,1654
712
712
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancing/README.md,sha256=TvRV54AcSiSZ3uOENOGmzkiBBRuHSG3DeEqgW_8FkZs,1795
713
713
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancing/integ.elb.ts,sha256=6qAybkYElxtfNefo1IpFo8MgrCubixLs2hTUUPeZoRg,555
@@ -840,7 +840,8 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesisfirehose/
840
840
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesisfirehose/integ.delivery-stream.ts,sha256=DXJlTu1eJOs7bFW35Tl-JCan6Eg1dUJMom6PU0mFTB8,1490
841
841
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesisfirehose/integ.kinesis-stream-events-target.ts,sha256=bLE3v9K0_V2KbR5oTGiePpoLOo_bpjkloqF3eNcKBOQ,2138
842
842
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kinesisfirehose/integ.s3-bucket.lit.ts,sha256=QU_0D7Q7ES3bubcRXvZTLo7zABTixDSVql9IYzIEFlw,3514
843
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kms/README.md,sha256=o88v_l7FVk8Yu97glXrOC-zgaXOZTQCeUZPyAv0jbFw,9787
843
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kms/README.md,sha256=QZHTsP5DaV6RDpKVc6l4EQ25krt6M1fJ0b0ft-e-fic,10072
844
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kms/integ.alias-from-alias-name.ts,sha256=_OpjM8RpN5QdXqj1-EdWCEeR51n_7W-NjliiFx2fwWE,783
844
845
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kms/integ.key-alias.ts,sha256=M7JE2iQtwYuLIZheSZ7a2v63xMmA8fw_lOJdFwVX4LE,458
845
846
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kms/integ.key-from-lookup-dummy.ts,sha256=hu1OyvieepuNXBq8e3bgyZf92Z_cSqOYlM7LxSe4D5g,671
846
847
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-kms/integ.key-grants.ts,sha256=4ZweTN8R6fWKzEsjPwi7AjY92WmscKmiwbBeFXIWCYs,571
@@ -890,11 +891,12 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.vpc
890
891
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-destinations/README.md,sha256=_6ZqM3kbkZCmN-9BtU3FbERs82Shv4D2QiWuq47T_VI,5453
891
892
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-destinations/integ.destinations.ts,sha256=bCxe7DTOSIRyxe2iStWRdl0_J-tQZ8n-715uo9gMHvE,4187
892
893
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-destinations/integ.lambda-chain.ts,sha256=vqRxTBuBaAZqeN1AQ4l0Z9b4dsOVTkYMXKIlil_yyCg,3381
893
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/README.md,sha256=1DTSdOh7W6bO_3fxHg-ssmS_87CLJl-Hmx9__NCJ_c8,21468
894
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/README.md,sha256=-hknVrQdnowd5D4HNWKqt4fxY5ahza0V6c7tmLJwTsI,23869
894
895
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.dynamodb-with-boolean-filter.ts,sha256=bGvfF5RgMbK9W2DO0HsKVoAK5KV5a0kLKYZKeOOFcx0,1217
895
896
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.dynamodb-with-filter-criteria.ts,sha256=7RrxbpLll7YIY-sNFp4reML6mA5ptC05K6DRmww32rY,1897
896
897
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.dynamodb-with-metrics-config.ts,sha256=_HEgmdb8iDBNWqDWo8RJHbbRtacdPp4V8LkS2U3DkI8,1286
897
898
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.dynamodb.ts,sha256=5Qas_PPDvTb8sHl3AiNnv-k7XaazG5nDNVNbmJ6Wwfo,1205
899
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-schema-registry.ts,sha256=mN1-eMpDDvEjqRqFB3WwDMAWtr1JhFt61ndeYMw3XlI,6640
898
900
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kafka-selfmanaged.ts,sha256=B85zVhxNs9IVcWHnxlYi9knhEPwfxKHmCpXigjk0xJs,4805
899
901
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kinesis-at-timestamp.ts,sha256=coNqlm5wKzy4jViKmzto6umHXcKzqVQFoosqgO_kaEI,832
900
902
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-event-sources/integ.kinesis-stream-consumer.ts,sha256=-wWHWes3tTpArZIzVKBPS-MFyQc5ZHJjMzG_2BnGAZ0,1199
@@ -1050,7 +1052,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53-targets/
1050
1052
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53-targets/integ.interface-vpc-endpoint-target.ts,sha256=8PlAPtbxMr8TQezAMykKCgZx8QicPtu30GvGsTtt2tY,999
1051
1053
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53-targets/integ.route53-record.ts,sha256=x8gFRbKDGjmQOpjZgErQcnGlyf9o2NgvCQ56Ae7eBbw,849
1052
1054
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53-targets/integ.userpool-domain-alias-target.ts,sha256=DR4O77TLlzhlLj3cpB6YHygNt4vSDfXKS0b2sglsEEo,1248
1053
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3/README.md,sha256=1Fn6W5s8iSey-6byizSihZw0puOwlxc1UeY9FHiGJw0,37234
1055
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3/README.md,sha256=BSQK7Ku34qKf_9xBY3GRa2zrWBhVg9MmnrBjif_GOH4,38695
1054
1056
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3/integ.bucket-acls.ts,sha256=LgbnWxF3plTNPjyGKIl6eyaI7xTXMh4rvcDi-57hOpc,802
1055
1057
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3/integ.bucket-auto-delete-objects.ts,sha256=7x0Q_tQEIb5Cil3ARDg6YHFbepk8CKGHlPh0P3Xzo-8,2434
1056
1058
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-s3/integ.bucket-block-access.ts,sha256=kIIkpvAA71D-y00yEhYSQHSXH3HBEDhIwqJSQV1VEz4,1120
@@ -1337,18 +1339,19 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/int
1337
1339
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.provider-with-waiter-state-machine-custom-role.ts,sha256=60mjzf_2NI9zO30B2Guye5sA7kxIl4yrLMXUEWIDO9I,2401
1338
1340
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.provider-with-waiter-state-machine.ts,sha256=6Ci2_ABcu5azSj1f0EzY1VD4lQUg9KI5l1Q7ieejI-0,2058
1339
1341
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.provider.ts,sha256=u_YVV0YZk6hyIxo5JOOSwwUORbqS3BVbJU6DIAwxuk0,1814
1340
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/FEATURE_FLAGS.md,sha256=HaV3_1Dgij9sXwao0J84al-didzMr01n1n9QknksydY,101935
1342
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/FEATURE_FLAGS.md,sha256=A5U_vRN77DgEuwACJEl9E2tNnNF0Sopvw1yKQLXB3yA,102943
1341
1343
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/NESTED_ASSEMBLIES.md,sha256=P8PNyr4hIC_i-9aUxa301-5-N4tLcoHYnELBp3C6SQQ,4949
1342
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/README.md,sha256=OixPEelzx6OwknIs-O5rH11835n4Pns-Zf46MYLX55k,25160
1344
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/README.md,sha256=ZCeTKvVasVTvIDaY1cuVqCEWMR3P_Lndtl32kJeFUUU,25588
1343
1345
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-awscli/README.md,sha256=kMrrptXZcAiK_TXRQD4XcaNRa3RXaIoIUQRZYi29b30,681
1344
1346
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-awscli/integ.awscli-layer.ts,sha256=KHmEY9P_oqKm8uNRHEVSi0OajnFw92LdCJZZe22BYXc,1491
1345
1347
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-kubectl/integ.kubectl-layer.ts,sha256=lp8Jv0sePcfotHCAspdtoqZVgAWhha9hciDVI5w6Ps4,1513
1346
1348
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-node-proxy-agent/README.md,sha256=eWYOUl_BRExsSMY1mzF5V1oGsCuxVR-6MSIuapbOS4Y,632
1347
1349
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-node-proxy-agent/integ.node-proxy-agent.ts,sha256=YSEuo5dS-TMKovqWBuW9uWeJj0NOJd1UgOTt-2wZVMc,1545
1348
1350
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/ORIGINAL_API.md,sha256=JUo88_SWhqnKC3ObhkMwGTNOma-BniqBMhoBnxpifE4,26756
1349
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/README.md,sha256=mVXG_pdyarKPlCf-55wQ8LKIYb3v4dXQTqBuoVjfmXc,71243
1351
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/README.md,sha256=uHIk5psamSGELoHrrSMPBO5Tr0E6dMCPCrOHKT82dIk,71460
1350
1352
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.cross-account-pipeline-action.ts,sha256=A18UXJLsi5tyYfCp4Dw6SxI1Vk5JikNX1F0NbfEnICw,4804
1351
1353
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-reduce-stagerole-scope.ts,sha256=IqBDpjPHyU8Uk91YISZm-1I_ERD8fbQObiMd6ekOyKQ,2543
1354
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-single-publisher.ts,sha256=QzRNUoZ2n7_vq4HLxkvDHt7y5ce71KjQHVFVIEDxiC4,1705
1352
1355
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-with-codebuild-logging.ts,sha256=7SuokmiayilFwdHU68_X5ZinfDt_Kj75quML_yHcdYQ,2557
1353
1356
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-with-codestar-connection.ts,sha256=x9DCirWauwW9hD7iCzMEoKcsVnKP1XJxJoq2Gfvxvvc,1772
1354
1357
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-with-cross-account-keys.ts,sha256=Yu9URWWtrr_QJg5FhJ-Py4gQZSlEd-mPXZX76dsaZ4M,1960
@@ -1366,8 +1369,8 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.pipe
1366
1369
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/region-info/README.md,sha256=vewWkV3ds9o9iyyYaJBNTkaKJ2XA6K2yF17tAxUnujg,2718
1367
1370
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/README.md,sha256=hYIx7DbG_7p4LYLUfxDwgIQjw9UNdz1GLrqDe8_Dbko,4132
1368
1371
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/integ.triggers.ts,sha256=4OHplMoBOgHGkktAzoU-TuNmJQS5wGAUvBfj5bGSe_Y,2807
1369
- konokenj_cdk_api_mcp_server-0.28.0.dist-info/METADATA,sha256=0kkC8ZbCiQHeNObErVf2o7Q3PcDrJQE7wW-Rg05hNIs,2646
1370
- konokenj_cdk_api_mcp_server-0.28.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1371
- konokenj_cdk_api_mcp_server-0.28.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1372
- konokenj_cdk_api_mcp_server-0.28.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1373
- konokenj_cdk_api_mcp_server-0.28.0.dist-info/RECORD,,
1372
+ konokenj_cdk_api_mcp_server-0.29.0.dist-info/METADATA,sha256=uIYHznTjVybWBNTP2Mc1TJdxaAeKCq6c0JgbKpdYnMM,2646
1373
+ konokenj_cdk_api_mcp_server-0.29.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1374
+ konokenj_cdk_api_mcp_server-0.29.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1375
+ konokenj_cdk_api_mcp_server-0.29.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1376
+ konokenj_cdk_api_mcp_server-0.29.0.dist-info/RECORD,,