konokenj.cdk-api-mcp-server 0.53.0__py3-none-any.whl → 0.54.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.
Files changed (29) hide show
  1. cdk_api_mcp_server/__about__.py +1 -1
  2. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-eks-v2-alpha/README.md +45 -45
  3. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-imagebuilder-alpha/README.md +94 -0
  4. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-sagemaker-alpha/README.md +32 -0
  5. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/mixins-preview/README.md +151 -5
  6. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/README.md/README.md +2 -0
  7. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigateway/README.md +25 -0
  8. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigateway/integ.lambda-permission-consolidation.ts +55 -0
  9. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-integrations/README.md +35 -0
  10. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-apigatewayv2-integrations/integ.lambda-permission-consolidation.ts +45 -0
  11. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/README.md +26 -0
  12. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.add-to-resource-policy.ts +17 -0
  13. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.placement-strategies.ts +32 -8
  14. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/README.md +86 -86
  15. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.eks-al2023-nodegroup.ts +1 -1
  16. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.fargate-cluster.ts +1 -1
  17. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.runtime.inlinecode.ts +7 -0
  18. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-secretsmanager/integ.secret.dynamic-reference-key.ts +38 -0
  19. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/README.md +14 -3
  20. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.evaluate-expression-arm64.ts +27 -0
  21. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.evaluate-expression-default.ts +25 -0
  22. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.evaluate-expression-mixed-arch.ts +35 -0
  23. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.evaluate-expression-x86.ts +27 -0
  24. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/interfaces/README.md +33 -0
  25. {konokenj_cdk_api_mcp_server-0.53.0.dist-info → konokenj_cdk_api_mcp_server-0.54.0.dist-info}/METADATA +2 -2
  26. {konokenj_cdk_api_mcp_server-0.53.0.dist-info → konokenj_cdk_api_mcp_server-0.54.0.dist-info}/RECORD +29 -20
  27. {konokenj_cdk_api_mcp_server-0.53.0.dist-info → konokenj_cdk_api_mcp_server-0.54.0.dist-info}/WHEEL +0 -0
  28. {konokenj_cdk_api_mcp_server-0.53.0.dist-info → konokenj_cdk_api_mcp_server-0.54.0.dist-info}/entry_points.txt +0 -0
  29. {konokenj_cdk_api_mcp_server-0.53.0.dist-info → konokenj_cdk_api_mcp_server-0.54.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.53.0"
4
+ __version__ = "0.54.0"
@@ -33,7 +33,7 @@ Here is the minimal example of defining an AWS EKS cluster
33
33
 
34
34
  ```ts
35
35
  const cluster = new eks.Cluster(this, 'hello-eks', {
36
- version: eks.KubernetesVersion.V1_33,
36
+ version: eks.KubernetesVersion.V1_34,
37
37
  });
38
38
  ```
39
39
 
@@ -68,7 +68,7 @@ In a nutshell:
68
68
 
69
69
  ```ts
70
70
  const cluster = new eks.Cluster(this, 'AutoModeCluster', {
71
- version: eks.KubernetesVersion.V1_33,
71
+ version: eks.KubernetesVersion.V1_34,
72
72
  // Auto Mode is enabled by default
73
73
  });
74
74
  ```
@@ -81,7 +81,7 @@ In a nutshell:
81
81
 
82
82
  ```ts
83
83
  const cluster = new eks.Cluster(this, 'ManagedNodeCluster', {
84
- version: eks.KubernetesVersion.V1_33,
84
+ version: eks.KubernetesVersion.V1_34,
85
85
  defaultCapacityType: eks.DefaultCapacityType.NODEGROUP,
86
86
  });
87
87
 
@@ -98,7 +98,7 @@ In a nutshell:
98
98
 
99
99
  ```ts
100
100
  const cluster = new eks.FargateCluster(this, 'FargateCluster', {
101
- version: eks.KubernetesVersion.V1_33,
101
+ version: eks.KubernetesVersion.V1_34,
102
102
  });
103
103
  ```
104
104
 
@@ -108,7 +108,7 @@ In a nutshell:
108
108
 
109
109
  ```ts
110
110
  const cluster = new eks.Cluster(this, 'SelfManagedCluster', {
111
- version: eks.KubernetesVersion.V1_33,
111
+ version: eks.KubernetesVersion.V1_34,
112
112
  });
113
113
 
114
114
  // Add self-managed Auto Scaling Group
@@ -128,7 +128,7 @@ Creating a new cluster is done using the `Cluster` constructs. The only required
128
128
 
129
129
  ```ts
130
130
  new eks.Cluster(this, 'HelloEKS', {
131
- version: eks.KubernetesVersion.V1_33,
131
+ version: eks.KubernetesVersion.V1_34,
132
132
  });
133
133
  ```
134
134
 
@@ -136,7 +136,7 @@ You can also use `FargateCluster` to provision a cluster that uses only fargate
136
136
 
137
137
  ```ts
138
138
  new eks.FargateCluster(this, 'HelloEKS', {
139
- version: eks.KubernetesVersion.V1_33,
139
+ version: eks.KubernetesVersion.V1_34,
140
140
  });
141
141
  ```
142
142
 
@@ -145,12 +145,12 @@ be created by default. It will only be deployed when `kubectlProviderOptions`
145
145
  property is used.**
146
146
 
147
147
  ```ts
148
- import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
148
+ import { KubectlV34Layer } from '@aws-cdk/lambda-layer-kubectl-v34';
149
149
 
150
150
  new eks.Cluster(this, 'hello-eks', {
151
- version: eks.KubernetesVersion.V1_33,
151
+ version: eks.KubernetesVersion.V1_34,
152
152
  kubectlProviderOptions: {
153
- kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
153
+ kubectlLayer: new KubectlV34Layer(this, 'kubectl'),
154
154
  }
155
155
  });
156
156
  ```
@@ -168,7 +168,7 @@ Auto Mode is enabled by default when creating a new cluster without specifying a
168
168
  ```ts
169
169
  // Create EKS cluster with Auto Mode implicitly enabled
170
170
  const cluster = new eks.Cluster(this, 'EksAutoCluster', {
171
- version: eks.KubernetesVersion.V1_33,
171
+ version: eks.KubernetesVersion.V1_34,
172
172
  });
173
173
  ```
174
174
 
@@ -177,7 +177,7 @@ You can also explicitly enable Auto Mode using `defaultCapacityType`:
177
177
  ```ts
178
178
  // Create EKS cluster with Auto Mode explicitly enabled
179
179
  const cluster = new eks.Cluster(this, 'EksAutoCluster', {
180
- version: eks.KubernetesVersion.V1_33,
180
+ version: eks.KubernetesVersion.V1_34,
181
181
  defaultCapacityType: eks.DefaultCapacityType.AUTOMODE,
182
182
  });
183
183
  ```
@@ -193,7 +193,7 @@ These node pools are managed automatically by EKS. You can configure which node
193
193
 
194
194
  ```ts
195
195
  const cluster = new eks.Cluster(this, 'EksAutoCluster', {
196
- version: eks.KubernetesVersion.V1_33,
196
+ version: eks.KubernetesVersion.V1_34,
197
197
  defaultCapacityType: eks.DefaultCapacityType.AUTOMODE,
198
198
  compute: {
199
199
  nodePools: ['system', 'general-purpose'],
@@ -209,7 +209,7 @@ You can disable the default node pools entirely by setting an empty array for `n
209
209
 
210
210
  ```ts
211
211
  const cluster = new eks.Cluster(this, 'EksAutoCluster', {
212
- version: eks.KubernetesVersion.V1_33,
212
+ version: eks.KubernetesVersion.V1_34,
213
213
  defaultCapacityType: eks.DefaultCapacityType.AUTOMODE,
214
214
  compute: {
215
215
  nodePools: [], // Disable default node pools
@@ -226,7 +226,7 @@ If you prefer to manage your own node groups instead of using Auto Mode, you can
226
226
  ```ts
227
227
  // Create EKS cluster with traditional managed node group
228
228
  const cluster = new eks.Cluster(this, 'EksCluster', {
229
- version: eks.KubernetesVersion.V1_33,
229
+ version: eks.KubernetesVersion.V1_34,
230
230
  defaultCapacityType: eks.DefaultCapacityType.NODEGROUP,
231
231
  defaultCapacity: 3, // Number of instances
232
232
  defaultCapacityInstance: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.LARGE),
@@ -237,7 +237,7 @@ You can also create a cluster with no initial capacity and add node groups later
237
237
 
238
238
  ```ts
239
239
  const cluster = new eks.Cluster(this, 'EksCluster', {
240
- version: eks.KubernetesVersion.V1_33,
240
+ version: eks.KubernetesVersion.V1_34,
241
241
  defaultCapacityType: eks.DefaultCapacityType.NODEGROUP,
242
242
  defaultCapacity: 0,
243
243
  });
@@ -258,7 +258,7 @@ You can combine Auto Mode with traditional node groups for specific workload req
258
258
 
259
259
  ```ts
260
260
  const cluster = new eks.Cluster(this, 'Cluster', {
261
- version: eks.KubernetesVersion.V1_33,
261
+ version: eks.KubernetesVersion.V1_34,
262
262
  defaultCapacityType: eks.DefaultCapacityType.AUTOMODE,
263
263
  compute: {
264
264
  nodePools: ['system', 'general-purpose'],
@@ -298,7 +298,7 @@ By default, when using `DefaultCapacityType.NODEGROUP`, this library will alloca
298
298
 
299
299
  ```ts
300
300
  new eks.Cluster(this, 'HelloEKS', {
301
- version: eks.KubernetesVersion.V1_33,
301
+ version: eks.KubernetesVersion.V1_34,
302
302
  defaultCapacityType: eks.DefaultCapacityType.NODEGROUP,
303
303
  });
304
304
  ```
@@ -307,7 +307,7 @@ At cluster instantiation time, you can customize the number of instances and the
307
307
 
308
308
  ```ts
309
309
  new eks.Cluster(this, 'HelloEKS', {
310
- version: eks.KubernetesVersion.V1_33,
310
+ version: eks.KubernetesVersion.V1_34,
311
311
  defaultCapacityType: eks.DefaultCapacityType.NODEGROUP,
312
312
  defaultCapacity: 5,
313
313
  defaultCapacityInstance: ec2.InstanceType.of(ec2.InstanceClass.M5, ec2.InstanceSize.SMALL),
@@ -320,7 +320,7 @@ Additional customizations are available post instantiation. To apply them, set t
320
320
 
321
321
  ```ts
322
322
  const cluster = new eks.Cluster(this, 'HelloEKS', {
323
- version: eks.KubernetesVersion.V1_33,
323
+ version: eks.KubernetesVersion.V1_34,
324
324
  defaultCapacityType: eks.DefaultCapacityType.NODEGROUP,
325
325
  defaultCapacity: 0,
326
326
  });
@@ -371,7 +371,7 @@ The following code defines an Amazon EKS cluster with a default Fargate Profile
371
371
 
372
372
  ```ts
373
373
  const cluster = new eks.FargateCluster(this, 'MyCluster', {
374
- version: eks.KubernetesVersion.V1_33,
374
+ version: eks.KubernetesVersion.V1_34,
375
375
  });
376
376
  ```
377
377
 
@@ -390,7 +390,7 @@ You can add self-managed capacity to any cluster using the `addAutoScalingGroupC
390
390
 
391
391
  ```ts
392
392
  const cluster = new eks.Cluster(this, 'Cluster', {
393
- version: eks.KubernetesVersion.V1_33,
393
+ version: eks.KubernetesVersion.V1_34,
394
394
  });
395
395
 
396
396
  cluster.addAutoScalingGroupCapacity('self-managed-nodes', {
@@ -422,7 +422,7 @@ You can configure the [cluster endpoint access](https://docs.aws.amazon.com/eks/
422
422
 
423
423
  ```ts
424
424
  const cluster = new eks.Cluster(this, 'hello-eks', {
425
- version: eks.KubernetesVersion.V1_33,
425
+ version: eks.KubernetesVersion.V1_34,
426
426
  endpointAccess: eks.EndpointAccess.PRIVATE, // No access outside of your VPC.
427
427
  });
428
428
  ```
@@ -444,7 +444,7 @@ To deploy the controller on your EKS cluster, configure the `albController` prop
444
444
 
445
445
  ```ts
446
446
  new eks.Cluster(this, 'HelloEKS', {
447
- version: eks.KubernetesVersion.V1_33,
447
+ version: eks.KubernetesVersion.V1_34,
448
448
  albController: {
449
449
  version: eks.AlbControllerVersion.V2_8_2,
450
450
  },
@@ -485,7 +485,7 @@ You can specify the VPC of the cluster using the `vpc` and `vpcSubnets` properti
485
485
  declare const vpc: ec2.Vpc;
486
486
 
487
487
  new eks.Cluster(this, 'HelloEKS', {
488
- version: eks.KubernetesVersion.V1_33,
488
+ version: eks.KubernetesVersion.V1_34,
489
489
  vpc,
490
490
  vpcSubnets: [{ subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }],
491
491
  });
@@ -528,12 +528,12 @@ To create a `Kubectl Handler`, use `kubectlProviderOptions` when creating the cl
528
528
  `kubectlLayer` is the only required property in `kubectlProviderOptions`.
529
529
 
530
530
  ```ts
531
- import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
531
+ import { KubectlV34Layer } from '@aws-cdk/lambda-layer-kubectl-v34';
532
532
 
533
533
  new eks.Cluster(this, 'hello-eks', {
534
- version: eks.KubernetesVersion.V1_33,
534
+ version: eks.KubernetesVersion.V1_34,
535
535
  kubectlProviderOptions: {
536
- kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
536
+ kubectlLayer: new KubectlV34Layer(this, 'kubectl'),
537
537
  }
538
538
  });
539
539
  ```
@@ -562,12 +562,12 @@ const cluster = eks.Cluster.fromClusterAttributes(this, 'Cluster', {
562
562
  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:
563
563
 
564
564
  ```ts
565
- import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
565
+ import { KubectlV34Layer } from '@aws-cdk/lambda-layer-kubectl-v34';
566
566
 
567
567
  const cluster = new eks.Cluster(this, 'hello-eks', {
568
- version: eks.KubernetesVersion.V1_33,
568
+ version: eks.KubernetesVersion.V1_34,
569
569
  kubectlProviderOptions: {
570
- kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
570
+ kubectlLayer: new KubectlV34Layer(this, 'kubectl'),
571
571
  environment: {
572
572
  'http_proxy': 'http://proxy.myproxy.com',
573
573
  },
@@ -588,12 +588,12 @@ Depending on which version of kubernetes you're targeting, you will need to use
588
588
  the `@aws-cdk/lambda-layer-kubectl-vXY` packages.
589
589
 
590
590
  ```ts
591
- import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
591
+ import { KubectlV34Layer } from '@aws-cdk/lambda-layer-kubectl-v34';
592
592
 
593
593
  const cluster = new eks.Cluster(this, 'hello-eks', {
594
- version: eks.KubernetesVersion.V1_33,
594
+ version: eks.KubernetesVersion.V1_34,
595
595
  kubectlProviderOptions: {
596
- kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
596
+ kubectlLayer: new KubectlV34Layer(this, 'kubectl'),
597
597
  },
598
598
  });
599
599
  ```
@@ -603,14 +603,14 @@ const cluster = new eks.Cluster(this, 'hello-eks', {
603
603
  By default, the kubectl provider is configured with 1024MiB of memory. You can use the `memory` option to specify the memory size for the AWS Lambda function:
604
604
 
605
605
  ```ts
606
- import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
606
+ import { KubectlV34Layer } from '@aws-cdk/lambda-layer-kubectl-v34';
607
607
 
608
608
  new eks.Cluster(this, 'MyCluster', {
609
609
  kubectlProviderOptions: {
610
- kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
610
+ kubectlLayer: new KubectlV34Layer(this, 'kubectl'),
611
611
  memory: Size.gibibytes(4),
612
612
  },
613
- version: eks.KubernetesVersion.V1_33,
613
+ version: eks.KubernetesVersion.V1_34,
614
614
  });
615
615
  ```
616
616
 
@@ -641,7 +641,7 @@ When you create a cluster, you can specify a `mastersRole`. The `Cluster` constr
641
641
  ```ts
642
642
  declare const role: iam.Role;
643
643
  new eks.Cluster(this, 'HelloEKS', {
644
- version: eks.KubernetesVersion.V1_33,
644
+ version: eks.KubernetesVersion.V1_34,
645
645
  mastersRole: role,
646
646
  });
647
647
  ```
@@ -662,7 +662,7 @@ You can use the `secretsEncryptionKey` to configure which key the cluster will u
662
662
  const secretsKey = new kms.Key(this, 'SecretsKey');
663
663
  const cluster = new eks.Cluster(this, 'MyCluster', {
664
664
  secretsEncryptionKey: secretsKey,
665
- version: eks.KubernetesVersion.V1_33,
665
+ version: eks.KubernetesVersion.V1_34,
666
666
  });
667
667
  ```
668
668
 
@@ -672,7 +672,7 @@ You can also use a similar configuration for running a cluster built using the F
672
672
  const secretsKey = new kms.Key(this, 'SecretsKey');
673
673
  const cluster = new eks.FargateCluster(this, 'MyFargateCluster', {
674
674
  secretsEncryptionKey: secretsKey,
675
- version: eks.KubernetesVersion.V1_33,
675
+ version: eks.KubernetesVersion.V1_34,
676
676
  });
677
677
  ```
678
678
 
@@ -713,7 +713,7 @@ eks.AccessPolicy.fromAccessPolicyName('AmazonEKSAdminPolicy', {
713
713
  Use `grantAccess()` to grant the AccessPolicy to an IAM principal:
714
714
 
715
715
  ```ts
716
- import { KubectlV33Layer } from '@aws-cdk/lambda-layer-kubectl-v33';
716
+ import { KubectlV34Layer } from '@aws-cdk/lambda-layer-kubectl-v34';
717
717
  declare const vpc: ec2.Vpc;
718
718
 
719
719
  const clusterAdminRole = new iam.Role(this, 'ClusterAdminRole', {
@@ -727,9 +727,9 @@ const eksAdminRole = new iam.Role(this, 'EKSAdminRole', {
727
727
  const cluster = new eks.Cluster(this, 'Cluster', {
728
728
  vpc,
729
729
  mastersRole: clusterAdminRole,
730
- version: eks.KubernetesVersion.V1_33,
730
+ version: eks.KubernetesVersion.V1_34,
731
731
  kubectlProviderOptions: {
732
- kubectlLayer: new KubectlV33Layer(this, 'kubectl'),
732
+ kubectlLayer: new KubectlV34Layer(this, 'kubectl'),
733
733
  memory: Size.gibibytes(4),
734
734
  },
735
735
  });
@@ -914,7 +914,7 @@ when a cluster is defined:
914
914
 
915
915
  ```ts
916
916
  new eks.Cluster(this, 'MyCluster', {
917
- version: eks.KubernetesVersion.V1_33,
917
+ version: eks.KubernetesVersion.V1_34,
918
918
  prune: false,
919
919
  });
920
920
  ```
@@ -1230,7 +1230,7 @@ property. For example:
1230
1230
  ```ts
1231
1231
  const cluster = new eks.Cluster(this, 'Cluster', {
1232
1232
  // ...
1233
- version: eks.KubernetesVersion.V1_33,
1233
+ version: eks.KubernetesVersion.V1_34,
1234
1234
  clusterLogging: [
1235
1235
  eks.ClusterLoggingTypes.API,
1236
1236
  eks.ClusterLoggingTypes.AUTHENTICATOR,
@@ -0,0 +1,94 @@
1
+ # EC2 Image Builder Construct Library
2
+
3
+ <!--BEGIN STABILITY BANNER-->
4
+
5
+ ---
6
+
7
+ ![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)
8
+
9
+ > The APIs of higher level constructs in this module are experimental and under active development.
10
+ > They are subject to non-backward compatible changes or removal in any future version. These are
11
+ > not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be
12
+ > announced in the release notes. This means that while you may use them, you may need to update
13
+ > your source code when upgrading to a newer version of this package.
14
+
15
+ ---
16
+
17
+ <!--END STABILITY BANNER-->
18
+
19
+ This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project.
20
+
21
+ ## README
22
+
23
+ [Amazon EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html) is a
24
+ fully managed AWS service that helps you automate the creation, management, and deployment of customized, secure, and
25
+ up-to-date server images. You can use Image Builder to create Amazon Machine Images (AMIs) and container images for use
26
+ across AWS Regions.
27
+
28
+ This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project. It allows you to define
29
+ Image Builder pipelines, images, recipes, components, workflows, and lifecycle policies.
30
+ A component defines the sequence of steps required to customize an instance during image creation (build component) or
31
+ test an instance launched from the created image (test component). Components are created from declarative YAML or JSON
32
+ documents that describe runtime configuration for building, validating, or testing instances. Components are included
33
+ when added to the image recipe or container recipe for an image build.
34
+
35
+ EC2 Image Builder supports AWS-managed components for common tasks, AWS Marketplace components, and custom components
36
+ that you create. Components run during specific workflow phases: build and validate phases during the build stage, and
37
+ test phase during the test stage.
38
+
39
+ ### Infrastructure Configuration
40
+
41
+ Infrastructure configuration defines the compute resources and environment settings used during the image building
42
+ process. This includes instance types, IAM instance profile, VPC settings, subnets, security groups, SNS topics for
43
+ notifications, logging configuration, and troubleshooting settings like whether to terminate instances on failure or
44
+ keep them running for debugging. These settings are applied to builds when included in an image or an image pipeline.
45
+
46
+ ```ts
47
+ const infrastructureConfiguration = new imagebuilder.InfrastructureConfiguration(this, 'InfrastructureConfiguration', {
48
+ infrastructureConfigurationName: 'test-infrastructure-configuration',
49
+ description: 'An Infrastructure Configuration',
50
+ // Optional - instance types to use for build/test
51
+ instanceTypes: [
52
+ ec2.InstanceType.of(ec2.InstanceClass.STANDARD7_INTEL, ec2.InstanceSize.LARGE),
53
+ ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE3, ec2.InstanceSize.LARGE)
54
+ ],
55
+ // Optional - create an instance profile with necessary permissions
56
+ instanceProfile: new iam.InstanceProfile(this, 'InstanceProfile', {
57
+ instanceProfileName: 'test-instance-profile',
58
+ role: new iam.Role(this, 'InstanceProfileRole', {
59
+ assumedBy: iam.ServicePrincipal.fromStaticServicePrincipleName('ec2.amazonaws.com'),
60
+ managedPolicies: [
61
+ iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore'),
62
+ iam.ManagedPolicy.fromAwsManagedPolicyName('EC2InstanceProfileForImageBuilder')
63
+ ]
64
+ })
65
+ }),
66
+ // Use VPC network configuration
67
+ vpc,
68
+ subnetSelection: { subnetType: ec2.SubnetType.PUBLIC },
69
+ securityGroups: [ec2.SecurityGroup.fromSecurityGroupId(this, 'SecurityGroup', vpc.vpcDefaultSecurityGroup)],
70
+ keyPair: ec2.KeyPair.fromKeyPairName(this, 'KeyPair', 'imagebuilder-instance-key-pair'),
71
+ terminateInstanceOnFailure: true,
72
+ // Optional - IMDSv2 settings
73
+ httpTokens: imagebuilder.HttpTokens.REQUIRED,
74
+ httpPutResponseHopLimit: 1,
75
+ // Optional - publish image completion messages to an SNS topic
76
+ notificationTopic: sns.Topic.fromTopicArn(
77
+ this,
78
+ 'Topic',
79
+ this.formatArn({ service: 'sns', resource: 'image-builder-topic' })
80
+ ),
81
+ // Optional - log settings. Logging is enabled by default
82
+ logging: {
83
+ s3Bucket: s3.Bucket.fromBucketName(this, 'LogBucket', `imagebuilder-logging-${Aws.ACCOUNT_ID}`),
84
+ s3KeyPrefix: 'imagebuilder-logs'
85
+ },
86
+ // Optional - host placement settings
87
+ ec2InstanceAvailabilityZone: Stack.of(this).availabilityZones[0],
88
+ ec2InstanceHostId: dedicatedHost.attrHostId,
89
+ ec2InstanceTenancy: imagebuilder.Tenancy.HOST,
90
+ resourceTags: {
91
+ Environment: 'production'
92
+ }
93
+ });
94
+ ```
@@ -214,6 +214,38 @@ const endpointConfig = new sagemaker.EndpointConfig(this, 'EndpointConfig', {
214
214
  });
215
215
  ```
216
216
 
217
+ ### Serverless Inference
218
+
219
+ Amazon SageMaker Serverless Inference is a purpose-built inference option that makes it easy for you to deploy and scale ML models. Serverless endpoints automatically launch compute resources and scale them in and out depending on traffic, eliminating the need to choose instance types or manage scaling policies. For more information, see [SageMaker Serverless Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).
220
+
221
+ To create a serverless endpoint configuration, use the `serverlessProductionVariant` property:
222
+
223
+ ```typescript
224
+ import * as sagemaker from '@aws-cdk/aws-sagemaker-alpha';
225
+
226
+ declare const model: sagemaker.Model;
227
+
228
+ const endpointConfig = new sagemaker.EndpointConfig(this, 'ServerlessEndpointConfig', {
229
+ serverlessProductionVariant: {
230
+ model: model,
231
+ variantName: 'serverlessVariant',
232
+ maxConcurrency: 10,
233
+ memorySizeInMB: 2048,
234
+ provisionedConcurrency: 5, // optional
235
+ },
236
+ });
237
+ ```
238
+
239
+ Serverless inference is ideal for workloads with intermittent or unpredictable traffic patterns. You can configure:
240
+
241
+ - `maxConcurrency`: Maximum concurrent invocations (1-200)
242
+ - `memorySizeInMB`: Memory allocation in 1GB increments (1024, 2048, 3072, 4096, 5120, or 6144 MB)
243
+ - `provisionedConcurrency`: Optional pre-warmed capacity to reduce cold starts
244
+
245
+ **Note**: Provisioned concurrency incurs charges even when the endpoint is not processing requests. Use it only when you need to minimize cold start latency.
246
+
247
+ You cannot mix serverless and instance-based variants in the same endpoint configuration.
248
+
217
249
  ### Endpoint
218
250
 
219
251
  When you create an endpoint from an `EndpointConfig`, Amazon SageMaker launches the ML compute
@@ -1,16 +1,162 @@
1
- # CDK Mixins: Composable Abstractions for AWS Resources
2
-
1
+ # CDK Mixins (Preview)
3
2
  <!--BEGIN STABILITY BANNER-->
4
3
 
5
4
  ---
6
5
 
7
6
  ![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)
8
7
 
9
- > The APIs of higher level constructs in this module are experimental and under active development. They are subject to non-backward compatible changes or removal in any future version. These are not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be announced in the release notes. This means that while you may use them, you may need to update your source code when upgrading to a newer version of this package.
8
+ > The APIs of higher level constructs in this module are experimental and under active development.
9
+ > They are subject to non-backward compatible changes or removal in any future version. These are
10
+ > not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be
11
+ > announced in the release notes. This means that while you may use them, you may need to update
12
+ > your source code when upgrading to a newer version of this package.
10
13
 
11
14
  ---
12
15
 
13
16
  <!--END STABILITY BANNER-->
14
17
 
15
- Implementation of the CDK Mixins proposal.
16
- See <https://github.com/aws/aws-cdk-rfcs/pull/824> for details.
18
+ CDK Mixins provide a new, advanced way to add functionality through composable abstractions.
19
+ Unlike traditional L2 constructs that bundle all features together, Mixins allow you to pick and choose exactly the capabilities you need for constructs.
20
+
21
+ ## Key Benefits
22
+
23
+ * **Universal Compatibility**: Apply the same abstractions to L1 constructs, L2 constructs, or custom constructs
24
+ * **Composable Design**: Mix and match features without being locked into specific implementations
25
+ * **Cross-Service Abstractions**: Use common patterns like encryption across different AWS services
26
+ * **Escape Hatch Freedom**: Customize resources in a safe, typed way while keeping the abstractions you want
27
+
28
+ ## Basic Usage
29
+
30
+ Mixins use `Mixins.of()` as the fundamental API for applying abstractions to constructs:
31
+
32
+ ```typescript
33
+ // Base form: apply mixins to any construct
34
+ const bucket = new s3.CfnBucket(scope, "MyBucket");
35
+ Mixins.of(bucket)
36
+ .apply(new EncryptionAtRest())
37
+ .apply(new AutoDeleteObjects());
38
+ ```
39
+
40
+ ## Creating Custom Mixins
41
+
42
+ Mixins are simple classes that implement the `IMixin` interface:
43
+
44
+ ```typescript
45
+ // Simple mixin that enables versioning
46
+ class CustomVersioningMixin implements IMixin {
47
+ supports(construct: any): boolean {
48
+ return construct instanceof s3.CfnBucket;
49
+ }
50
+
51
+ applyTo(bucket: any): any {
52
+ bucket.versioningConfiguration = {
53
+ status: "Enabled"
54
+ };
55
+ return bucket;
56
+ }
57
+ }
58
+
59
+ // Usage
60
+ const bucket = new s3.CfnBucket(scope, "MyBucket");
61
+ Mixins.of(bucket).apply(new CustomVersioningMixin());
62
+ ```
63
+
64
+ ## Construct Selection
65
+
66
+ Mixins operate on construct trees and can be applied selectively:
67
+
68
+ ```typescript
69
+ // Apply to all constructs in a scope
70
+ Mixins.of(scope).apply(new EncryptionAtRest());
71
+
72
+ // Apply to specific resource types
73
+ Mixins.of(scope, ConstructSelector.resourcesOfType(s3.CfnBucket))
74
+ .apply(new EncryptionAtRest());
75
+
76
+ // Apply to constructs matching a pattern
77
+ Mixins.of(scope, ConstructSelector.byId(/.*-prod-.*/))
78
+ .apply(new ProductionSecurityMixin());
79
+ ```
80
+
81
+ ## Built-in Mixins
82
+
83
+ ### Cross-Service Mixins
84
+
85
+ **EncryptionAtRest**: Applies encryption to supported AWS resources
86
+
87
+ ```typescript
88
+ // Works across different resource types
89
+ const bucket = new s3.CfnBucket(scope, "Bucket");
90
+ Mixins.of(bucket).apply(new EncryptionAtRest());
91
+
92
+ const logGroup = new logs.CfnLogGroup(scope, "LogGroup");
93
+ Mixins.of(logGroup).apply(new EncryptionAtRest());
94
+ ```
95
+
96
+ ### S3-Specific Mixins
97
+
98
+ **AutoDeleteObjects**: Configures automatic object deletion for S3 buckets
99
+
100
+ ```typescript
101
+ const bucket = new s3.CfnBucket(scope, "Bucket");
102
+ Mixins.of(bucket).apply(new AutoDeleteObjects());
103
+ ```
104
+
105
+ **EnableVersioning**: Enables versioning on S3 buckets
106
+
107
+ ```typescript
108
+ const bucket = new s3.CfnBucket(scope, "Bucket");
109
+ Mixins.of(bucket).apply(new EnableVersioning());
110
+ ```
111
+
112
+ ### Generic Mixins
113
+
114
+ **CfnPropertiesMixin**: Applies arbitrary CloudFormation properties
115
+
116
+ ```typescript
117
+ const bucket = new s3.CfnBucket(scope, "Bucket");
118
+ Mixins.of(bucket).apply(new CfnPropertiesMixin({
119
+ customProperty: { enabled: true }
120
+ }));
121
+ ```
122
+
123
+ ## Error Handling
124
+
125
+ Mixins provide comprehensive error handling:
126
+
127
+ ```typescript
128
+ // Graceful handling of unsupported constructs
129
+ Mixins.of(scope)
130
+ .apply(new EncryptionAtRest()); // Skips unsupported constructs
131
+
132
+ // Strict application that requires all constructs to match
133
+ Mixins.of(scope)
134
+ .mustApply(new EncryptionAtRest()); // Throws if no constructs support the mixin
135
+ ```
136
+
137
+ ## API Reference
138
+
139
+ ### Core Interfaces
140
+
141
+ * `IMixin` - Interface that all mixins must implement
142
+ * `Mixins` - Main entry point for applying mixins
143
+ * `ConstructSelector` - Selects constructs from a tree based on criteria
144
+ * `MixinApplicator` - Applies mixins to selected constructs
145
+
146
+ ### Mixins
147
+
148
+ * `EncryptionAtRest` - Cross-service encryption mixin
149
+ * `AutoDeleteObjects` - S3 auto-delete objects mixin
150
+ * `EnableVersioning` - S3 versioning mixin
151
+ * `CfnPropertiesMixin` - Generic CloudFormation properties mixin
152
+
153
+ ### Selectors
154
+
155
+ * `ConstructSelector.all()` - Select all constructs
156
+ * `ConstructSelector.cfnResource()` - Select CfnResource constructs
157
+ * `ConstructSelector.resourcesOfType()` - Select by type
158
+ * `ConstructSelector.byId()` - Select by ID pattern
159
+
160
+ ## License
161
+
162
+ This project is licensed under the Apache-2.0 License.
@@ -480,6 +480,8 @@ CloudFormation to re-read the secret.
480
480
  `SecretValue.ssmSecure()` is only supported for a limited set of resources.
481
481
  [Click here for a list of supported resources and properties](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#template-parameters-dynamic-patterns-resources).
482
482
 
483
+ `SecretValue.cfnDynamicReferenceKey` takes the same parameters as `SecretValue.secretsManager` and returns a key which can be used within a [dynamic reference](#dynamic-references) to dynamically load a secret from AWS Secrets Manager.
484
+
483
485
  ## ARN manipulation
484
486
 
485
487
  Sometimes you will need to put together or pick apart Amazon Resource Names
@@ -334,6 +334,31 @@ const getMessageIntegration = new apigateway.AwsIntegration({
334
334
  });
335
335
  ```
336
336
 
337
+ ### Lambda Integration Permissions
338
+
339
+ By default, creating a `LambdaIntegration` will add a permission for API Gateway to invoke your AWS Lambda function, scoped to the specific method which uses the integration.
340
+
341
+ If you reuse the same AWS Lambda function for many integrations, the AWS Lambda permission policy size can be exceeded by adding a separate policy statement for each method which invokes the AWS Lambda function. To avoid this, you can opt to scope permissions to any method on the API by setting `scopePermissionToMethod` to `false`, and this will ensure only a single policy statement is added to the AWS Lambda permission policy.
342
+
343
+ ```ts
344
+ declare const book: apigateway.Resource;
345
+ declare const backend: lambda.Function;
346
+
347
+ const getBookIntegration = new apigateway.LambdaIntegration(backend, {
348
+ scopePermissionToMethod: false,
349
+ });
350
+ const createBookIntegration = new apigateway.LambdaIntegration(backend, {
351
+ scopePermissionToMethod: false,
352
+ });
353
+
354
+ book.addMethod('GET', getBookIntegration);
355
+ book.addMethod('POST', createBookIntegration);
356
+ ```
357
+
358
+ In the above example, a single permission is added, shared by both `getBookIntegration` and `createBookIntegration`.
359
+
360
+ Note that setting `scopePermissionToMethod` to `false` will always allow test invocations, no matter the value specified for `allowTestInvoke`.
361
+
337
362
  ## Usage Plan & API Keys
338
363
 
339
364
  A usage plan specifies who can access one or more deployed API stages and methods, and the rate at which they can be