konokenj.cdk-api-mcp-server 0.46.0__py3-none-any.whl → 0.48.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 (20) hide show
  1. cdk_api_mcp_server/__about__.py +1 -1
  2. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-elasticache-alpha/README.md +421 -0
  3. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/README.md/README.md +1 -1
  4. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/README.md +14 -0
  5. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.http-origin.ts +5 -2
  6. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/README.md +76 -0
  7. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-fleet-attribute-based-compute.ts +59 -7
  8. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-fleet-custom-instance-type.ts +130 -0
  9. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-fleet-overflow-behavior.ts +61 -0
  10. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/README.md +24 -0
  11. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster-serverless.ts +34 -0
  12. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md +101 -0
  13. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-capacity-provider.ts +112 -0
  14. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/README.md +4 -0
  15. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-reduce-stagerole-scope.ts +4 -1
  16. {konokenj_cdk_api_mcp_server-0.46.0.dist-info → konokenj_cdk_api_mcp_server-0.48.0.dist-info}/METADATA +2 -2
  17. {konokenj_cdk_api_mcp_server-0.46.0.dist-info → konokenj_cdk_api_mcp_server-0.48.0.dist-info}/RECORD +20 -15
  18. {konokenj_cdk_api_mcp_server-0.46.0.dist-info → konokenj_cdk_api_mcp_server-0.48.0.dist-info}/WHEEL +0 -0
  19. {konokenj_cdk_api_mcp_server-0.46.0.dist-info → konokenj_cdk_api_mcp_server-0.48.0.dist-info}/entry_points.txt +0 -0
  20. {konokenj_cdk_api_mcp_server-0.46.0.dist-info → konokenj_cdk_api_mcp_server-0.48.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.46.0"
4
+ __version__ = "0.48.0"
@@ -0,0 +1,421 @@
1
+ # ElastiCache CDK Construct Library
2
+ <!--BEGIN STABILITY BANNER-->
3
+
4
+ ---
5
+
6
+ ![cdk-constructs: Experimental](https://img.shields.io/badge/cdk--constructs-experimental-important.svg?style=for-the-badge)
7
+
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.
13
+
14
+ ---
15
+
16
+ <!--END STABILITY BANNER-->
17
+
18
+ This module has constructs for [Amazon ElastiCache](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/WhatIs.html).
19
+
20
+ * The `ServerlessCache` construct facilitates the creation and management of serverless cache.
21
+ * The `User` and `UserGroup` constructs facilitate the creation and management of users for the cache.
22
+
23
+ ## Serverless Cache
24
+
25
+ Amazon ElastiCache Serverless is a serverless option that automatically scales cache capacity based on application traffic patterns. You can create a serverless cache using the `ServerlessCache` construct:
26
+
27
+ ```ts
28
+ const vpc = new ec2.Vpc(this, 'VPC');
29
+
30
+ const cache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
31
+ vpc,
32
+ });
33
+ ```
34
+
35
+ ### Connecting to serverless cache
36
+
37
+ To control who can access the serverless cache by the security groups, use the `.connections` attribute.
38
+
39
+ The serverless cache has a default port `6379`.
40
+
41
+ This example allows an EC2 instance to connect to the serverless cache:
42
+
43
+ ```ts
44
+ declare const serverlessCache: elasticache.ServerlessCache;
45
+ declare const instance: ec2.Instance;
46
+
47
+ // allow the EC2 instance to connect to serverless cache on default port 6379
48
+ serverlessCache.connections.allowDefaultPortFrom(instance);
49
+ ```
50
+
51
+ ### Cache usage limits
52
+
53
+ You can configure usage limits on both cache data storage and ECPU/second for your cache to control costs and ensure predictable performance.
54
+
55
+ **Configuration options:**
56
+
57
+ * **Maximum limits**: Ensure your cache usage never exceeds the configured maximum
58
+ * **Minimum limits**: Reserve a baseline level of resources for consistent performance
59
+ * **Both**: Define a range where your cache usage will operate
60
+
61
+ For more infomation, see [Setting scaling limits to manage costs](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Scaling.html#Pre-Scaling).
62
+
63
+ ```ts
64
+ declare const vpc: ec2.Vpc;
65
+
66
+ const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
67
+ engine: elasticache.CacheEngine.VALKEY_LATEST,
68
+ vpc,
69
+ cacheUsageLimits: {
70
+ // cache data storage limits (GB)
71
+ dataStorageMinimumSize: Size.gibibytes(2), // minimum: 1GB
72
+ dataStorageMaximumSize: Size.gibibytes(3), // maximum: 5000GB
73
+ // rate limits (ECPU/second)
74
+ requestRateLimitMinimum: 1000, // minimum: 1000
75
+ requestRateLimitMaximum: 10000, // maximum: 15000000
76
+ },
77
+ });
78
+ ```
79
+
80
+ ### Backups and restore
81
+
82
+ You can enable automatic backups for serverless cache.
83
+ When automatic backups are enabled, ElastiCache creates a backup of the cache on a daily basis.
84
+
85
+ Also you can set the backup window for any time when it's most convenient.
86
+ If you don't specify a backup window, ElastiCache assigns one automatically.
87
+
88
+ For more information, see [Scheduling automatic backups](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/backups-automatic.html).
89
+
90
+ To enable automatic backups, set the `backupRetentionLimit` property. You can also specify the snapshot creation time by setting `backupTime` property:
91
+
92
+ ```ts
93
+ declare const vpc: ec2.Vpc;
94
+
95
+ const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
96
+ backup: {
97
+ // enable automatic backups and set the retention period to 6 days
98
+ backupRetentionLimit: 6,
99
+ // set the backup window to 9:00 AM UTC
100
+ backupTime: events.Schedule.cron({
101
+ hour: '9',
102
+ minute: '0',
103
+ }),
104
+ },
105
+ vpc,
106
+ });
107
+ ```
108
+
109
+ You can create a final backup by setting `backupNameBeforeDeletion` property.
110
+
111
+ ```ts
112
+ declare const vpc: ec2.Vpc;
113
+
114
+ const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
115
+ engine: elasticache.CacheEngine.VALKEY_LATEST,
116
+ backup: {
117
+ // set a backup name before deleting a cache
118
+ backupNameBeforeDeletion: "my-final-backup-name",
119
+ },
120
+ vpc,
121
+ });
122
+ ```
123
+
124
+ You can restore from backups by setting snapshot ARNs to `backupArnsToRestore` property:
125
+
126
+ ```ts
127
+ declare const vpc: ec2.Vpc;
128
+
129
+ const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
130
+ engine: elasticache.CacheEngine.VALKEY_LATEST,
131
+ backup: {
132
+ // set the backup(s) to restore
133
+ backupArnsToRestore: ['arn:aws:elasticache:us-east-1:123456789012:serverlesscachesnapshot:my-final-backup-name'],
134
+ },
135
+ vpc,
136
+ });
137
+ ```
138
+
139
+ ### Encryption at rest
140
+
141
+ At-rest encryption is always enabled for Serverless Cache. There are two encryption options:
142
+
143
+ * **Default**: When no `kmsKey` is specified (left as `undefined`), AWS owned KMS keys are used automatically
144
+ * **Customer Managed Key**: Create a KMS key first, then pass it to the cache via the `kmsKey` property
145
+
146
+ ### Customer Managed Key for encryption at rest
147
+
148
+ ElastiCache supports symmetric Customer Managed key (CMK) for encryption at rest.
149
+
150
+ For more information, see [Using customer managed keys from AWS KMS](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/at-rest-encryption.html#using-customer-managed-keys-for-elasticache-security).
151
+
152
+ To use CMK, set your CMK to the `kmsKey` property:
153
+
154
+ ```ts
155
+ import { Key } from 'aws-cdk-lib/aws-kms';
156
+
157
+ declare const kmsKey: Key;
158
+ declare const vpc: ec2.Vpc;
159
+
160
+ const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
161
+ engine: elasticache.CacheEngine.VALKEY_LATEST,
162
+ serverlessCacheName: 'my-serverless-cache',
163
+ vpc,
164
+ // set Customer Managed Key
165
+ kmsKey,
166
+ });
167
+ ```
168
+
169
+ ### Metrics and monitoring
170
+
171
+ You can monitor your serverless cache using CloudWatch Metrics via the `metric` method.
172
+
173
+ For more information about serverless cache metrics, see [Serverless metrics and events for Valkey and Redis OSS](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/serverless-metrics-events-redis.html) and [Serverless metrics and events for Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/serverless-metrics-events.memcached.html).
174
+
175
+ ```ts
176
+ declare const serverlessCache: elasticache.ServerlessCache;
177
+
178
+ // The 5 minutes average of the total number of successful read-only key lookups in the cache.
179
+ const cacheHits = serverlessCache.metricCacheHitCount();
180
+
181
+ // The 5 minutes average of the total number of bytes used by the data stored in the cache.
182
+ const bytesUsedForCache = serverlessCache.metricDataStored();
183
+
184
+ // The 5 minutes average of the total number of ElastiCacheProcessingUnits (ECPUs) consumed by the requests executed on the cache.
185
+ const elastiCacheProcessingUnits = serverlessCache.metricProcessingUnitsConsumed();
186
+
187
+ // Create an alarm for ECPUs.
188
+ elastiCacheProcessingUnits.createAlarm(this, 'ElastiCacheProcessingUnitsAlarm', {
189
+ threshold: 50,
190
+ evaluationPeriods: 1,
191
+ });
192
+ ```
193
+
194
+ ### Import an existing serverless cache
195
+
196
+ To import an existing ServerlessCache, use the `ServerlessCache.fromServerlessCacheAttributes` method:
197
+
198
+ ```ts
199
+ declare const securityGroup: ec2.SecurityGroup;
200
+
201
+ const importedServerlessCache = elasticache.ServerlessCache.fromServerlessCacheAttributes(this, 'ImportedServerlessCache', {
202
+ serverlessCacheName: 'my-serverless-cache',
203
+ securityGroups: [securityGroup],
204
+ });
205
+ ```
206
+
207
+ ## User and User Group
208
+
209
+ Setup required properties and create:
210
+
211
+ ```ts
212
+ const newDefaultUser = new elasticache.NoPasswordUser(this, 'NoPasswordUser', {
213
+ userId: 'default',
214
+ accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
215
+ })
216
+
217
+ const userGroup = new elasticache.UserGroup(this, 'UserGroup', {
218
+ users: [newDefaultUser],
219
+ });
220
+ ```
221
+
222
+ ### RBAC
223
+
224
+ In Valkey 7.2 and onward and Redis OSS 6.0 onward you can use a feature called Role-Based Access Control (RBAC). RBAC is also the only way to control access to serverless caches.
225
+
226
+ RBAC enables you to control cache access through user groups. These user groups are designed as a way to organize access to caches.
227
+
228
+ For more information, see [Role-Based Access Control (RBAC)](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html).
229
+
230
+ To enable RBAC for ElastiCache with Valkey or Redis OSS, you take the following steps:
231
+
232
+ * Create users.
233
+ * Create a user group and add users to the user group.
234
+ * Assign the user group to a cache.
235
+
236
+ ### Create users
237
+
238
+ First, you need to create users by using `IamUser`, `PasswordUser` or `NoPasswordUser` construct.
239
+
240
+ With RBAC, you create users and assign them specific permissions by using `accessString` property.
241
+
242
+ For more information, see [Specifying Permissions Using an Access String](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html#Access-string).
243
+
244
+ You can create an IAM-enabled user by using `IamUser` construct:
245
+
246
+ ```ts
247
+ const user = new elasticache.IamUser(this, 'User', {
248
+ // set user engine
249
+ engine: elasticache.UserEngine.REDIS,
250
+
251
+ // set user id
252
+ userId: 'my-user',
253
+
254
+ // set username
255
+ userName: 'my-user',
256
+
257
+ // set access string
258
+ accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
259
+ });
260
+ ```
261
+
262
+ > NOTE: IAM-enabled users must have matching user id and username. For more information, see [Limitations](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/auth-iam.html). The construct can set automatically the username to be the same as the user id.
263
+
264
+ If you want to create a password authenticated user, use `PasswordUser` construct:
265
+
266
+ ```ts
267
+ const user = new elasticache.PasswordUser(this, 'User', {
268
+ // set user engine
269
+ engine: elasticache.UserEngine.VALKEY,
270
+
271
+ // set user id
272
+ userId: 'my-user-id',
273
+
274
+ // set access string
275
+ accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
276
+
277
+ // set username
278
+ userName: 'my-user-name',
279
+
280
+ // set up to two passwords
281
+ passwords: [
282
+ // "SecretIdForPassword" is the secret id for the password
283
+ SecretValue.secretsManager('SecretIdForPassword'),
284
+ // "AnotherSecretIdForPassword" is the secret id for the password
285
+ SecretValue.secretsManager('AnotherSecretIdForPassword'),
286
+ ],
287
+ });
288
+ ```
289
+
290
+ You can also create a no password required user by using `NoPasswordUser` construct:
291
+
292
+ ```ts
293
+ const user = new elasticache.NoPasswordUser(this, 'User', {
294
+ // set user engine
295
+ engine: elasticache.UserEngine.REDIS,
296
+
297
+ // set user id
298
+ userId: 'my-user-id',
299
+
300
+ // set access string
301
+ accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
302
+
303
+ // set username
304
+ userName: 'my-user-name',
305
+ });
306
+ ```
307
+
308
+ ### Default user
309
+
310
+ ElastiCache automatically creates a default user with both a user ID and username set to `default`. This default user cannot be modified or deleted. The user is created as a no password authentication user.
311
+
312
+ This user is intended for compatibility with the default behavior of previous Redis OSS versions and has an access string that permits it to call all commands and access all keys.
313
+
314
+ To use this automatically created default user in CDK, you can import it using `NoPasswordUser.fromUserAttributes` method. For more information on import methods, see the [Import an existing user and user group](#import-an-existing-user-and-user-group) section.
315
+
316
+ To add proper access control to a cache, replace the default user with a new one that is either disabled by setting the `accessString` to `off -@all` or secured with a strong password.
317
+
318
+ To change the default user, create a new default user with the username set to `default`. You can then swap it with the original default user.
319
+
320
+ For more information, see [Applying RBAC to a Cache for ElastiCache with Valkey or Redis OSS](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/Clusters.RBAC.html#rbac-using).
321
+
322
+ If you want to create a new default user, `userName` must be `default` and `userId` must not be `default` by using `NoPasswordUser` or `PasswordUser`:
323
+
324
+ ```ts
325
+ // use the original `default` user by using import method
326
+ const defaultUser = elasticache.NoPasswordUser.fromUserAttributes(this, 'DefaultUser', {
327
+ // userId and userName must be 'default'
328
+ userId: 'default',
329
+ });
330
+
331
+ // create a new default user
332
+ const newDefaultUser = new elasticache.NoPasswordUser(this, 'NewDefaultUser', {
333
+ // new default user id must not be 'default'
334
+ userId: 'new-default',
335
+ // new default username must be 'default'
336
+ userName: 'default',
337
+ // set access string
338
+ accessControl: elasticache.AccessControl.fromAccessString("on ~* +@all"),
339
+ });
340
+ ```
341
+
342
+ > NOTE: You can't create a new default user using `IamUser` because an IAM-enabled user's username and user ID cannot be different.
343
+
344
+ ### Add users to the user group
345
+
346
+ Next, use the `UserGroup` construct to create a user group and add users to it.
347
+ Ensure that you include either the original default user or a new default user:
348
+
349
+ ```ts
350
+ declare const newDefaultUser: elasticache.IUser;
351
+ declare const user: elasticache.IUser;
352
+ declare const anotherUser: elasticache.IUser;
353
+
354
+ const userGroup = new elasticache.UserGroup(this, 'UserGroup', {
355
+ // add users including default user
356
+ users: [newDefaultUser, user],
357
+ });
358
+
359
+ // you can also add a user by using addUser method
360
+ userGroup.addUser(anotherUser);
361
+ ```
362
+
363
+ ### Assign user group
364
+
365
+ Finally, assign a user group to cache:
366
+
367
+ ```ts
368
+ declare const vpc: ec2.Vpc;
369
+ declare const userGroup: elasticache.UserGroup;
370
+
371
+ const serverlessCache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
372
+ engine: elasticache.CacheEngine.VALKEY_LATEST,
373
+ serverlessCacheName: 'my-serverless-cache',
374
+ vpc,
375
+ // assign User Group
376
+ userGroup,
377
+ });
378
+
379
+ ```
380
+
381
+ ### Grant permissions to IAM-enabled users
382
+
383
+ If you create IAM-enabled users, `"elasticache:Connect"` action must be allowed for the users and cache.
384
+
385
+ > NOTE: You don't need grant permissions to no password required users or password authentication users.
386
+
387
+ For more information, see [Authenticating with IAM](https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/auth-iam.html).
388
+
389
+ To grant permissions, you can use the `grantConnect` method in `IamUser` and `ServerlessCache` constructs:
390
+
391
+ ```ts
392
+ declare const user: elasticache.IamUser;
393
+ declare const serverlessCache: elasticache.ServerlessCache;
394
+ declare const role: iam.Role;
395
+
396
+ // grant "elasticache:Connect" action permissions to role
397
+ user.grantConnect(role);
398
+ serverlessCache.grantConnect(role);
399
+ ```
400
+
401
+ ### Import an existing user and user group
402
+
403
+ You can import an existing user and user group by using import methods:
404
+
405
+ ```ts
406
+ const stack = new Stack();
407
+
408
+ const importedIamUser = elasticache.IamUser.fromUserId(this, 'ImportedIamUser', 'my-iam-user-id');
409
+
410
+ const importedPasswordUser = elasticache.PasswordUser.fromUserAttributes(stack, 'ImportedPasswordUser', {
411
+ userId: 'my-password-user-id',
412
+ });
413
+
414
+ const importedNoPasswordUser = elasticache.NoPasswordUser.fromUserAttributes(stack, 'ImportedNoPasswordUser', {
415
+ userId: 'my-no-password-user-id',
416
+ });
417
+
418
+ const importedUserGroup = elasticache.UserGroup.fromUserGroupAttributes(this, 'ImportedUserGroup', {
419
+ userGroupName: 'my-user-group-name'
420
+ });
421
+ ```
@@ -1059,7 +1059,7 @@ The properties passed to the level 2 constructs `AutoScalingGroup` and `Instance
1059
1059
  `aws-ec2` module abstract what is passed into the `CfnOption` properties `resourceSignal` and
1060
1060
  `autoScalingCreationPolicy`, but when using level 1 constructs you can specify these yourself.
1061
1061
 
1062
- The CfnWaitCondition resource from the `aws-cloudformation` module suppports the `resourceSignal`.
1062
+ The CfnWaitCondition resource from the `aws-cloudformation` module supports the `resourceSignal`.
1063
1063
  The format of the timeout is `PT#H#M#S`. In the example below AWS Cloudformation will wait for
1064
1064
  3 success signals to occur within 15 minutes before the status of the resource will be set to
1065
1065
  `CREATE_COMPLETE`.
@@ -597,6 +597,20 @@ new cloudfront.Distribution(this, 'myDist', {
597
597
  });
598
598
  ```
599
599
 
600
+ You can specify the IP address type for connecting to the origin:
601
+
602
+ ```ts
603
+ const origin = new origins.HttpOrigin('www.example.com', {
604
+ ipAddressType: cloudfront.OriginIpAddressType.IPV6, // IPv4, IPv6, or DUALSTACK
605
+ });
606
+
607
+ new cloudfront.Distribution(this, 'Distribution', {
608
+ defaultBehavior: { origin },
609
+ });
610
+ ```
611
+
612
+ The `ipAddressType` property allows you to specify whether CloudFront should use IPv4, IPv6, or both (dual-stack) when connecting to your origin.
613
+
600
614
  The origin can be customized with timeout settings to handle different response scenarios:
601
615
 
602
616
  ```ts
@@ -1,13 +1,16 @@
1
1
  import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
2
2
  import * as cdk from 'aws-cdk-lib';
3
3
  import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
4
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
4
5
 
5
6
  const app = new cdk.App();
6
7
 
7
8
  const stack = new cdk.Stack(app, 'cloudfront-http-origin');
8
9
 
9
10
  new cloudfront.Distribution(stack, 'Distribution', {
10
- defaultBehavior: { origin: new origins.HttpOrigin('www.example.com') },
11
+ defaultBehavior: { origin: new origins.HttpOrigin('www.example.com', { ipAddressType: cloudfront.OriginIpAddressType.DUALSTACK }) },
11
12
  });
12
13
 
13
- app.synth();
14
+ new IntegTest(app, 'http-origin-test-integ', {
15
+ testCases: [stack],
16
+ });
@@ -577,6 +577,82 @@ const fleet = new codebuild.Fleet(this, 'MyFleet', {
577
577
  });
578
578
  ```
579
579
 
580
+ ### Custom instance types
581
+ You can use [specific EC2 instance
582
+ types](https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-compute-types.html#environment-reserved-capacity.instance-types)
583
+ for your fleet by setting the `computeType` to `CUSTOM_INSTANCE_TYPE`. This
584
+ allows you to specify the `instanceType` in `computeConfiguration`. Only certain
585
+ EC2 instance types are supported; see the linked documentation for details.
586
+
587
+ ```ts
588
+ import { Size } from 'aws-cdk-lib';
589
+
590
+ const fleet = new codebuild.Fleet(this, 'MyFleet', {
591
+ baseCapacity: 1,
592
+ computeType: codebuild.FleetComputeType.CUSTOM_INSTANCE_TYPE,
593
+ environmentType: codebuild.EnvironmentType.LINUX_CONTAINER,
594
+ computeConfiguration: {
595
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM),
596
+ // By default, 64 GiB of disk space is included. Any value optionally
597
+ // specified here is _incremental_ on top of the included disk space.
598
+ disk: Size.gibibytes(10),
599
+ },
600
+ });
601
+ ```
602
+
603
+ ### Fleet overflow behavior
604
+
605
+ When your builds exceed the capacity of your fleet, you can specify how CodeBuild should handle the overflow builds by setting the `overflowBehavior` property:
606
+
607
+ ```ts
608
+ const fleet = new codebuild.Fleet(this, 'Fleet', {
609
+ computeType: codebuild.FleetComputeType.MEDIUM,
610
+ environmentType: codebuild.EnvironmentType.LINUX_CONTAINER,
611
+ baseCapacity: 1,
612
+ overflowBehavior: codebuild.FleetOverflowBehavior.ON_DEMAND,
613
+ });
614
+ ```
615
+
616
+ The available overflow behaviors are:
617
+
618
+ - `QUEUE` (default): Overflow builds wait for existing fleet instances to become available
619
+ - `ON_DEMAND`: Overflow builds run on CodeBuild on-demand instances
620
+
621
+ Note: If you set overflow behavior to `ON_DEMAND` for a VPC-connected fleet, ensure your VPC settings allow access to public AWS services.
622
+
623
+ ### VPCs
624
+ The same considerations that apply to [Project
625
+ VPCs](#definition-of-vpc-configuration-in-codebuild-project) also apply to Fleet
626
+ VPCs. When using a Fleet in a CodeBuild Project, it is an error to configure a
627
+ VPC on the Project. Configure a VPC on the fleet instead.
628
+
629
+ ```ts
630
+ declare const loadBalancer: elbv2.ApplicationLoadBalancer;
631
+
632
+ const vpc = new ec2.Vpc(this, 'MyVPC');
633
+ const fleet = new codebuild.Fleet(this, 'MyProject', {
634
+ computeType: codebuild.FleetComputeType.MEDIUM,
635
+ environmentType: codebuild.EnvironmentType.LINUX_CONTAINER,
636
+ baseCapacity: 1,
637
+ vpc,
638
+ });
639
+
640
+ fleet.connections.allowTo(loadBalancer, ec2.Port.tcp(443));
641
+
642
+ const project = new codebuild.Project(this, 'MyProject', {
643
+ environment: {
644
+ fleet,
645
+ },
646
+ buildSpec: codebuild.BuildSpec.fromObject({
647
+ // ...
648
+ }),
649
+ // Trying to configure a project-level VPC is an error, because this project
650
+ // runs on the Fleet created above.
651
+ // vpc,
652
+ });
653
+ ```
654
+ >>>>>>> 39ec36ec6a (feat(codebuild): add custom instance type and VPC to Fleets)
655
+
580
656
  ## Logs
581
657
 
582
658
  CodeBuild lets you specify an S3 Bucket, CloudWatch Log Group or both to receive logs from your projects.
@@ -1,17 +1,55 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
1
2
  import * as cdk from 'aws-cdk-lib';
2
3
  import * as integ from '@aws-cdk/integ-tests-alpha';
3
4
  import * as codebuild from 'aws-cdk-lib/aws-codebuild';
4
5
  import { Construct } from 'constructs';
5
6
 
6
- const configurations: codebuild.ComputeConfiguration[] = [
7
+ type StackConfiguration = {
8
+ computeConfiguration: codebuild.ComputeConfiguration;
9
+ vpcProps?: ec2.VpcProps;
10
+ subnetSelection?: ec2.SubnetSelection;
11
+ securityGroupProps?: Array<Omit<ec2.SecurityGroupProps, 'vpc'>>;
12
+ }
13
+ const configurations: Array<StackConfiguration> = [
14
+ {
15
+ computeConfiguration: {
16
+ machineType: codebuild.MachineType.GENERAL,
17
+ },
18
+ },
7
19
  {
8
- machineType: codebuild.MachineType.GENERAL,
20
+ computeConfiguration: {
21
+ machineType: codebuild.MachineType.GENERAL,
22
+ vCpu: 2,
23
+ memory: cdk.Size.gibibytes(4),
24
+ disk: cdk.Size.gibibytes(10),
25
+ },
9
26
  },
10
27
  {
11
- machineType: codebuild.MachineType.GENERAL,
12
- vCpu: 2,
13
- memory: cdk.Size.gibibytes(4),
14
- disk: cdk.Size.gibibytes(10),
28
+ computeConfiguration: {
29
+ machineType: codebuild.MachineType.GENERAL,
30
+ },
31
+ vpcProps: {
32
+ maxAzs: 1,
33
+ restrictDefaultSecurityGroup: false,
34
+ },
35
+ },
36
+ {
37
+ computeConfiguration: {
38
+ machineType: codebuild.MachineType.GENERAL,
39
+ },
40
+ vpcProps: {
41
+ maxAzs: 1,
42
+ // Incredibly, if you pass a SubnetSelection that produces more than 1
43
+ // subnet, you currently get this error:
44
+ // > Resource handler returned message: "Invalid vpc config: the maximum number of subnets is 1
45
+ // This seems like a terrible limitation from the CodeBuild team.
46
+ // maxAzs: 2,
47
+ },
48
+ subnetSelection: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
49
+ securityGroupProps: [
50
+ { allowAllOutbound: true },
51
+ { allowAllIpv6Outbound: true },
52
+ ],
15
53
  },
16
54
  ];
17
55
 
@@ -19,14 +57,27 @@ class FleetStack extends cdk.Stack {
19
57
  public readonly fleet: codebuild.Fleet;
20
58
  public readonly project: codebuild.Project;
21
59
 
22
- constructor(scope: Construct, id: string, computeConfiguration: codebuild.ComputeConfiguration) {
60
+ constructor(scope: Construct, id: string, { computeConfiguration, vpcProps, subnetSelection, securityGroupProps }: StackConfiguration) {
23
61
  super(scope, id);
24
62
 
63
+ let vpc: ec2.Vpc | undefined;
64
+ let securityGroups: Array<ec2.SecurityGroup> | undefined;
65
+ if (vpcProps) {
66
+ vpc = new ec2.Vpc(this, 'Vpc', vpcProps);
67
+ const refinedVpc = vpc;
68
+ securityGroups = securityGroupProps?.map((props, i) =>
69
+ new ec2.SecurityGroup(this, `SecurityGroup${i}`, { ...props, vpc: refinedVpc }),
70
+ );
71
+ }
72
+
25
73
  this.fleet = new codebuild.Fleet(this, 'MyFleet', {
26
74
  baseCapacity: 1,
27
75
  computeType: codebuild.FleetComputeType.ATTRIBUTE_BASED,
28
76
  computeConfiguration,
29
77
  environmentType: codebuild.EnvironmentType.LINUX_CONTAINER,
78
+ vpc,
79
+ securityGroups,
80
+ subnetSelection,
30
81
  });
31
82
 
32
83
  this.project = new codebuild.Project(this, 'MyProject', {
@@ -38,6 +89,7 @@ class FleetStack extends cdk.Stack {
38
89
  }),
39
90
  environment: {
40
91
  buildImage: codebuild.LinuxBuildImage.STANDARD_7_0,
92
+ fleet: this.fleet,
41
93
  },
42
94
  });
43
95
  }
@@ -0,0 +1,130 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import * as integ from '@aws-cdk/integ-tests-alpha';
3
+ import * as cdk from 'aws-cdk-lib';
4
+ import * as codebuild from 'aws-cdk-lib/aws-codebuild';
5
+ import { Construct } from 'constructs';
6
+
7
+ type StackConfiguration = {
8
+ computeConfiguration: codebuild.ComputeConfiguration;
9
+ vpcProps?: ec2.VpcProps;
10
+ subnetSelection?: ec2.SubnetSelection;
11
+ securityGroupProps?: Array<Omit<ec2.SecurityGroupProps, 'vpc'>>;
12
+ }
13
+ const configurations: Array<StackConfiguration> = [
14
+ {
15
+ computeConfiguration: {
16
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM),
17
+ },
18
+ },
19
+ {
20
+ computeConfiguration: {
21
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM),
22
+ disk: cdk.Size.gibibytes(10),
23
+ },
24
+ },
25
+ {
26
+ computeConfiguration: {
27
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM),
28
+ },
29
+ vpcProps: {
30
+ maxAzs: 1,
31
+ restrictDefaultSecurityGroup: false,
32
+ },
33
+ },
34
+ {
35
+ computeConfiguration: {
36
+ instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM),
37
+ },
38
+ vpcProps: {
39
+ maxAzs: 1,
40
+ // Incredibly, if you pass a SubnetSelection that produces more than 1
41
+ // subnet, you currently get this error:
42
+ // > Resource handler returned message: "Invalid vpc config: the maximum number of subnets is 1
43
+ // This seems like a terrible limitation from the CodeBuild team.
44
+ // maxAzs: 2,
45
+ },
46
+ subnetSelection: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS },
47
+ securityGroupProps: [
48
+ { allowAllOutbound: true },
49
+ { allowAllIpv6Outbound: true },
50
+ ],
51
+ },
52
+ ];
53
+
54
+ class FleetStack extends cdk.Stack {
55
+ public readonly fleet: codebuild.Fleet;
56
+ public readonly project: codebuild.Project;
57
+
58
+ constructor(scope: Construct, id: string, { computeConfiguration, vpcProps, subnetSelection, securityGroupProps }: StackConfiguration) {
59
+ super(scope, id);
60
+
61
+ let vpc: ec2.Vpc | undefined;
62
+ let securityGroups: Array<ec2.SecurityGroup> | undefined;
63
+ if (vpcProps) {
64
+ vpc = new ec2.Vpc(this, 'Vpc', vpcProps);
65
+ const refinedVpc = vpc;
66
+ securityGroups = securityGroupProps?.map((props, i) =>
67
+ new ec2.SecurityGroup(this, `SecurityGroup${i}`, { ...props, vpc: refinedVpc }),
68
+ );
69
+ }
70
+
71
+ this.fleet = new codebuild.Fleet(this, 'MyFleet', {
72
+ baseCapacity: 1,
73
+ computeType: codebuild.FleetComputeType.CUSTOM_INSTANCE_TYPE,
74
+ computeConfiguration,
75
+ environmentType: codebuild.EnvironmentType.LINUX_CONTAINER,
76
+ vpc,
77
+ securityGroups,
78
+ subnetSelection,
79
+ });
80
+
81
+ this.project = new codebuild.Project(this, 'MyProject', {
82
+ buildSpec: codebuild.BuildSpec.fromObject({
83
+ version: '0.2',
84
+ phases: {
85
+ build: { commands: ['echo "Nothing to do!"'] },
86
+ },
87
+ }),
88
+ environment: {
89
+ buildImage: codebuild.LinuxBuildImage.STANDARD_7_0,
90
+ fleet: this.fleet,
91
+ },
92
+ });
93
+ }
94
+ }
95
+
96
+ const app = new cdk.App();
97
+ const stacks = configurations.map(
98
+ (config, index) => new FleetStack(
99
+ app,
100
+ `CustomInstanceTypeComputeFleetIntegStack${index}`,
101
+ config,
102
+ ),
103
+ );
104
+
105
+ const test = new integ.IntegTest(app, 'CustomInstanceTypeComputeFleetIntegTest', {
106
+ testCases: stacks,
107
+ });
108
+
109
+ const listFleets = test.assertions.awsApiCall('Codebuild', 'listFleets');
110
+ for (const { fleet, project } of stacks) {
111
+ listFleets.expect(integ.ExpectedResult.objectLike({
112
+ fleets: integ.Match.arrayWith([fleet.fleetArn]),
113
+ }));
114
+
115
+ const startBuild = test.assertions.awsApiCall('Codebuild', 'startBuild', { projectName: project.projectName });
116
+
117
+ // Describe the build and wait for the status to be successful
118
+ test.assertions.awsApiCall('CodeBuild', 'batchGetBuilds', {
119
+ ids: [startBuild.getAttString('build.id')],
120
+ }).assertAtPath(
121
+ 'builds.0.buildStatus',
122
+ integ.ExpectedResult.stringLikeRegexp('SUCCEEDED'),
123
+ ).waitForAssertions({
124
+ // After a custom instance type fleet is created, there can still be high
125
+ // latency on creating actual instances. Needs a long timeout, builds are
126
+ // pending until instances are initialized.
127
+ totalTimeout: cdk.Duration.minutes(10),
128
+ interval: cdk.Duration.seconds(30),
129
+ });
130
+ }
@@ -0,0 +1,61 @@
1
+ import * as cdk from 'aws-cdk-lib';
2
+ import * as integ from '@aws-cdk/integ-tests-alpha';
3
+ import * as codebuild from 'aws-cdk-lib/aws-codebuild';
4
+ import { Construct } from 'constructs';
5
+
6
+ class FleetStack extends cdk.Stack {
7
+ public readonly fleet: codebuild.Fleet;
8
+ public readonly project: codebuild.Project;
9
+
10
+ constructor(scope: Construct, id: string) {
11
+ super(scope, id);
12
+
13
+ this.fleet = new codebuild.Fleet(this, 'MyFleet', {
14
+ baseCapacity: 1,
15
+ computeType: codebuild.FleetComputeType.SMALL,
16
+ environmentType: codebuild.EnvironmentType.LINUX_CONTAINER,
17
+ overflowBehavior: codebuild.FleetOverflowBehavior.ON_DEMAND,
18
+ });
19
+
20
+ this.project = new codebuild.Project(this, 'MyProject', {
21
+ buildSpec: codebuild.BuildSpec.fromObject({
22
+ version: '0.2',
23
+ phases: {
24
+ build: { commands: ['echo "Nothing to do!"'] },
25
+ },
26
+ }),
27
+ environment: {
28
+ fleet: this.fleet,
29
+ buildImage: codebuild.LinuxBuildImage.STANDARD_7_0,
30
+ },
31
+ });
32
+ }
33
+ }
34
+
35
+ const app = new cdk.App();
36
+ const stack= new FleetStack(
37
+ app,
38
+ 'OverflowBehaviorFleetStack',
39
+ );
40
+
41
+ const test = new integ.IntegTest(app, 'OverflowBehaviorFleetInteg', {
42
+ testCases: [stack],
43
+ });
44
+
45
+ const listFleets = test.assertions.awsApiCall('Codebuild', 'listFleets');
46
+ listFleets.expect(integ.ExpectedResult.objectLike({
47
+ fleets: integ.Match.arrayWith([stack.fleet.fleetArn]),
48
+ }));
49
+
50
+ const startBuild = test.assertions.awsApiCall('Codebuild', 'startBuild', { projectName: stack.project.projectName });
51
+
52
+ // Describe the build and wait for the status to be successful
53
+ test.assertions.awsApiCall('CodeBuild', 'batchGetBuilds', {
54
+ ids: [startBuild.getAttString('build.id')],
55
+ }).assertAtPath(
56
+ 'builds.0.buildStatus',
57
+ integ.ExpectedResult.stringLikeRegexp('SUCCEEDED'),
58
+ ).waitForAssertions({
59
+ totalTimeout: cdk.Duration.minutes(5),
60
+ interval: cdk.Duration.seconds(30),
61
+ });
@@ -28,6 +28,28 @@ By default, the master password will be generated and stored in AWS Secrets Mana
28
28
 
29
29
  Your cluster will be empty by default.
30
30
 
31
+ ## Serverless Clusters
32
+
33
+ DocumentDB supports serverless clusters that automatically scale capacity based on your application's needs.
34
+ To create a serverless cluster, specify the `serverlessV2ScalingConfiguration` instead of `instanceType`:
35
+
36
+ ```ts
37
+ declare const vpc: ec2.Vpc;
38
+ const cluster = new docdb.DatabaseCluster(this, 'Database', {
39
+ masterUser: {
40
+ username: 'myuser',
41
+ },
42
+ vpc,
43
+ serverlessV2ScalingConfiguration: {
44
+ minCapacity: 0.5,
45
+ maxCapacity: 2,
46
+ },
47
+ engineVersion: '5.0.0', // Serverless requires engine version 5.0.0 or higher
48
+ });
49
+ ```
50
+
51
+ **Note**: DocumentDB serverless requires engine version 5.0.0 or higher and is not compatible with all features. See the [AWS documentation](https://docs.aws.amazon.com/documentdb/latest/developerguide/docdb-serverless-limitations.html) for limitations.
52
+
31
53
  ## Connecting
32
54
 
33
55
  To control who can access the cluster, use the `.connections` attribute. DocumentDB databases have a default port, so
@@ -278,3 +300,5 @@ const cluster = new docdb.DatabaseCluster(this, 'Database', {
278
300
  ```
279
301
 
280
302
  **Note**: `StorageType.IOPT1` is supported starting with engine version 5.0.0.
303
+
304
+ **Note**: For serverless clusters, storage type is managed automatically and cannot be specified.
@@ -0,0 +1,34 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import * as cdk from 'aws-cdk-lib';
3
+ import * as constructs from 'constructs';
4
+ import { DatabaseCluster } from 'aws-cdk-lib/aws-docdb';
5
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
6
+
7
+ class TestStack extends cdk.Stack {
8
+ constructor(scope: constructs.Construct, id: string, props?: cdk.StackProps) {
9
+ super(scope, id, props);
10
+
11
+ const vpc = new ec2.Vpc(this, 'VPC', { maxAzs: 2, restrictDefaultSecurityGroup: false });
12
+
13
+ new DatabaseCluster(this, 'Database', {
14
+ masterUser: {
15
+ username: 'docdb',
16
+ },
17
+ vpc,
18
+ serverlessV2ScalingConfiguration: {
19
+ minCapacity: 0.5,
20
+ maxCapacity: 2,
21
+ },
22
+ engineVersion: '5.0.0',
23
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
24
+ });
25
+ }
26
+ }
27
+
28
+ const app = new cdk.App();
29
+
30
+ const stack = new TestStack(app, 'aws-cdk-docdb-cluster-serverless');
31
+
32
+ new IntegTest(app, 'aws-cdk-docdb-cluster-serverless-integ', {
33
+ testCases: [stack],
34
+ });
@@ -1659,6 +1659,107 @@ new ecs.Ec2Service(this, 'EC2Service', {
1659
1659
  });
1660
1660
  ```
1661
1661
 
1662
+ ### Managed Instances Capacity Providers
1663
+
1664
+ Managed Instances Capacity Providers allow you to use AWS-managed EC2 instances for your ECS tasks while providing more control over instance selection than standard Fargate. AWS handles the instance lifecycle, patching, and maintenance while you can specify detailed instance requirements.
1665
+
1666
+ To create a Managed Instances Capacity Provider, you need to specify the required EC2 instance profile, and networking configuration. You can also define detailed instance requirements to control which types of instances are used for your workloads.
1667
+
1668
+ ```ts
1669
+ declare const vpc: ec2.Vpc;
1670
+ declare const infrastructureRole: iam.Role;
1671
+ declare const instanceProfile: iam.InstanceProfile;
1672
+
1673
+ const cluster = new ecs.Cluster(this, 'Cluster', { vpc });
1674
+
1675
+ // Create a Managed Instances Capacity Provider
1676
+ const miCapacityProvider = new ecs.ManagedInstancesCapacityProvider(this, 'MICapacityProvider', {
1677
+ infrastructureRole,
1678
+ ec2InstanceProfile: instanceProfile,
1679
+ subnets: vpc.privateSubnets,
1680
+ securityGroups: [new ec2.SecurityGroup(this, 'MISecurityGroup', { vpc })],
1681
+ instanceRequirements: {
1682
+ vCpuCountMin: 1,
1683
+ memoryMin: Size.gibibytes(2),
1684
+ cpuManufacturers: [ec2.CpuManufacturer.INTEL],
1685
+ acceleratorManufacturers: [ec2.AcceleratorManufacturer.NVIDIA],
1686
+ },
1687
+ propagateTags: ecs.PropagateManagedInstancesTags.CAPACITY_PROVIDER,
1688
+ });
1689
+
1690
+ // Add the capacity provider to the cluster
1691
+ cluster.addManagedInstancesCapacityProvider(miCapacityProvider);
1692
+
1693
+ const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef');
1694
+
1695
+ taskDefinition.addContainer('web', {
1696
+ image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'),
1697
+ memoryReservationMiB: 256,
1698
+ });
1699
+
1700
+ new ecs.Ec2Service(this, 'EC2Service', {
1701
+ cluster,
1702
+ taskDefinition,
1703
+ minHealthyPercent: 100,
1704
+ capacityProviderStrategies: [
1705
+ {
1706
+ capacityProvider: miCapacityProvider.capacityProviderName,
1707
+ weight: 1,
1708
+ },
1709
+ ],
1710
+ });
1711
+ ```
1712
+
1713
+ You can specify detailed instance requirements to control which types of instances are used:
1714
+
1715
+ ```ts
1716
+ declare const infrastructureRole: iam.Role;
1717
+ declare const instanceProfile: iam.InstanceProfile;
1718
+ declare const vpc: ec2.Vpc;
1719
+
1720
+ const miCapacityProvider = new ecs.ManagedInstancesCapacityProvider(this, 'MICapacityProvider', {
1721
+ infrastructureRole,
1722
+ ec2InstanceProfile: instanceProfile,
1723
+ subnets: vpc.privateSubnets,
1724
+ instanceRequirements: {
1725
+ // Required: CPU and memory constraints
1726
+ vCpuCountMin: 2,
1727
+ vCpuCountMax: 8,
1728
+ memoryMin: Size.gibibytes(4),
1729
+ memoryMax: Size.gibibytes(32),
1730
+
1731
+ // CPU preferences
1732
+ cpuManufacturers: [ec2.CpuManufacturer.INTEL, ec2.CpuManufacturer.AMD],
1733
+ instanceGenerations: [ec2.InstanceGeneration.CURRENT],
1734
+
1735
+ // Instance type filtering
1736
+ allowedInstanceTypes: ['m5.*', 'c5.*'],
1737
+
1738
+ // Performance characteristics
1739
+ burstablePerformance: ec2.BurstablePerformance.EXCLUDED,
1740
+ bareMetal: ec2.BareMetal.EXCLUDED,
1741
+
1742
+ // Accelerator requirements (for ML/AI workloads)
1743
+ acceleratorTypes: [ec2.AcceleratorType.GPU],
1744
+ acceleratorManufacturers: [ec2.AcceleratorManufacturer.NVIDIA],
1745
+ acceleratorNames: [ec2.AcceleratorName.T4, ec2.AcceleratorName.V100],
1746
+ acceleratorCountMin: 1,
1747
+
1748
+ // Storage requirements
1749
+ localStorage: ec2.LocalStorage.REQUIRED,
1750
+ localStorageTypes: [ec2.LocalStorageType.SSD],
1751
+ totalLocalStorageGBMin: 100,
1752
+
1753
+ // Network requirements
1754
+ networkInterfaceCountMin: 2,
1755
+ networkBandwidthGbpsMin: 10,
1756
+
1757
+ // Cost optimization
1758
+ onDemandMaxPricePercentageOverLowestPrice: 10,
1759
+ },
1760
+ });
1761
+ ```
1762
+
1662
1763
  ### Cluster Default Provider Strategy
1663
1764
 
1664
1765
  A capacity provider strategy determines whether ECS tasks are launched on EC2 instances or Fargate/Fargate Spot. It can be specified at the cluster, service, or task level, and consists of one or more capacity providers. You can specify an optional base and weight value for finer control of how tasks are launched. The `base` specifies a minimum number of tasks on one capacity provider, and the `weight`s of each capacity provider determine how tasks are distributed after `base` is satisfied.
@@ -0,0 +1,112 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import * as iam from 'aws-cdk-lib/aws-iam';
3
+ import * as cdk from 'aws-cdk-lib';
4
+ import * as ecs from 'aws-cdk-lib/aws-ecs';
5
+ import * as integ from '@aws-cdk/integ-tests-alpha';
6
+
7
+ const app = new cdk.App({
8
+ postCliContext: {
9
+ '@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm': true,
10
+ '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
11
+ '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
12
+ },
13
+ });
14
+ const stack = new cdk.Stack(app, 'integ-managedinstances-capacity-provider');
15
+
16
+ const vpc = new ec2.Vpc(stack, 'Vpc', { maxAzs: 2, restrictDefaultSecurityGroup: false });
17
+ const cluster = new ecs.Cluster(stack, 'ManagedInstancesCluster', {
18
+ vpc,
19
+ enableFargateCapacityProviders: true,
20
+ });
21
+
22
+ // Create IAM roles required for FMI following Omakase specifications
23
+ const infrastructureRole = new iam.Role(stack, 'InfrastructureRole', {
24
+ roleName: 'AmazonECSInfrastructureRoleForOmakase',
25
+ assumedBy: new iam.ServicePrincipal('ecs.amazonaws.com'),
26
+ managedPolicies: [
27
+ iam.ManagedPolicy.fromAwsManagedPolicyName('AdministratorAccess'),
28
+ ],
29
+ });
30
+
31
+ const instanceRole = new iam.Role(stack, 'InstanceRole', {
32
+ roleName: 'AmazonECSInstanceRoleForOmakase',
33
+ assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
34
+ managedPolicies: [
35
+ iam.ManagedPolicy.fromAwsManagedPolicyName('AdministratorAccess'),
36
+ ],
37
+ });
38
+
39
+ const instanceProfile = new iam.InstanceProfile(stack, 'InstanceProfile', {
40
+ instanceProfileName: 'AmazonECSInstanceRoleForOmakase',
41
+ role: instanceRole,
42
+ });
43
+
44
+ // Create a security group for FMI instances
45
+ const fmiSecurityGroup = new ec2.SecurityGroup(stack, 'ManagedInstancesSecurityGroup', {
46
+ vpc,
47
+ description: 'Security group for ManagedInstances capacity provider instances',
48
+ allowAllOutbound: true,
49
+ });
50
+
51
+ // Create MI Capacity Provider
52
+ const miCapacityProvider = new ecs.ManagedInstancesCapacityProvider(stack, 'ManagedInstancesCapacityProvider', {
53
+ infrastructureRole: infrastructureRole,
54
+ ec2InstanceProfile: instanceProfile,
55
+ subnets: vpc.privateSubnets,
56
+ securityGroups: [fmiSecurityGroup],
57
+ propagateTags: ecs.PropagateManagedInstancesTags.CAPACITY_PROVIDER,
58
+ instanceRequirements: {
59
+ vCpuCountMin: 1,
60
+ memoryMin: cdk.Size.gibibytes(2),
61
+ cpuManufacturers: [ec2.CpuManufacturer.INTEL],
62
+ acceleratorManufacturers: [ec2.AcceleratorManufacturer.NVIDIA],
63
+ },
64
+ });
65
+
66
+ // Add FMI capacity provider to cluster
67
+ cluster.addManagedInstancesCapacityProvider(miCapacityProvider);
68
+ cluster.addDefaultCapacityProviderStrategy([
69
+ {
70
+ capacityProvider: miCapacityProvider.capacityProviderName,
71
+ weight: 1,
72
+ },
73
+ ]);
74
+
75
+ // Create a task definition compatible with Managed Instances and Fargate
76
+ const taskDefinition = new ecs.TaskDefinition(stack, 'TaskDef', {
77
+ compatibility: ecs.Compatibility.FARGATE_AND_MANAGED_INSTANCES,
78
+ cpu: '256',
79
+ memoryMiB: '512',
80
+ networkMode: ecs.NetworkMode.AWS_VPC,
81
+ });
82
+
83
+ taskDefinition.addContainer('web', {
84
+ image: ecs.ContainerImage.fromRegistry('public.ecr.aws/docker/library/httpd:2.4'),
85
+ memoryLimitMiB: 512,
86
+ portMappings: [
87
+ {
88
+ containerPort: 80,
89
+ protocol: ecs.Protocol.TCP,
90
+ },
91
+ ],
92
+ });
93
+
94
+ // Create a service using the MI capacity provider
95
+ new ecs.FargateService(stack, 'ManagedInstancesService', {
96
+ cluster,
97
+ taskDefinition,
98
+ capacityProviderStrategies: [
99
+ {
100
+ capacityProvider: miCapacityProvider.capacityProviderName,
101
+ weight: 1,
102
+ },
103
+ ],
104
+ desiredCount: 1,
105
+ });
106
+
107
+ new integ.IntegTest(app, 'ManagedInstancesCapacityProviders', {
108
+ testCases: [stack],
109
+ regions: ['us-west-2'],
110
+ });
111
+
112
+ app.synth();
@@ -739,6 +739,10 @@ new pipelines.CodeBuildStep('Synth', {
739
739
  buildEnvironment: {
740
740
  computeType: codebuild.ComputeType.LARGE,
741
741
  privileged: true,
742
+ dockerServer: {
743
+ computeType: codebuild.DockerServerComputeType.SMALL,
744
+ securityGroups: [mySecurityGroup],
745
+ },
742
746
  },
743
747
  timeout: Duration.minutes(90),
744
748
  fileSystemLocations: [
@@ -53,8 +53,11 @@ class PipelineStack extends Stack {
53
53
  dockerEnabledForSynth: true,
54
54
  codeBuildDefaults: {
55
55
  buildEnvironment: {
56
- buildImage: codebuild.LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_3_0,
56
+ buildImage: codebuild.LinuxBuildImage.AMAZON_LINUX_2023_5,
57
57
  computeType: codebuild.ComputeType.SMALL,
58
+ dockerServer: {
59
+ computeType: codebuild.DockerServerComputeType.SMALL,
60
+ },
58
61
  },
59
62
  cache: codebuild.Cache.local(codebuild.LocalCacheMode.DOCKER_LAYER),
60
63
  },
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: konokenj.cdk-api-mcp-server
3
- Version: 0.46.0
3
+ Version: 0.48.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.216.0-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.218.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=7X5Q3f5BVA_UqKDTb4LYcIvNCYfpvE09llaieR8Xq6U,129
1
+ cdk_api_mcp_server/__about__.py,sha256=srzMbr0otzQq5BX_rtov_llD8WR7FdcIlipzD5IkGlQ,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
@@ -16,6 +16,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-custom-resource-sdk
16
16
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-ec2-alpha/README.md,sha256=ZySzpPJ4eUj3ZJ_jWF6YFOX4J9a7F-GU3o6QT_zJggQ,36094
17
17
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-eks-v2-alpha/MANUAL_TEST.md,sha256=uObwqDllAUYBGkoNEAQGioL6JuKqh5ScVbq9KC3x89Q,1862
18
18
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-eks-v2-alpha/README.md,sha256=PZR9EHmUdly15E0ZRfLjUZR_NyvlvV_3Jip6FSqyBR8,41992
19
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-elasticache-alpha/README.md,sha256=5rwHuZ0rekBgrFzF1ig9rAxqufypWy8XN8-7y3De0dA,15152
19
20
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-gamelift-alpha/README.md,sha256=pZqlGXpIekT05CmRYo99QPI-7S1iGtKoNESGryLQFxQ,28324
20
21
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-glue-alpha/README.md,sha256=BCr7YEJ6Ht3oYR21NMCH3t1N738QjQ9Sh_dL_DUhECQ,32235
21
22
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-iot-actions-alpha/README.md,sha256=R6vkGxu-JjfB1IfGVquiD6Gcn4RQQpgbGo36njBdJe4,11947
@@ -43,7 +44,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/cfnspec/README.md,sha25
43
44
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/custom-resource-handlers/README.md,sha256=QctOoyGt6AqVWeFhRwpkCSxHZ1XFWj_nCKlkJHDFock,965
44
45
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/example-construct-library/README.md,sha256=vnVXyvtN9ICph68sw2y6gkdD_gmas0PiUa9TkwNckWQ,4501
45
46
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/integ-tests-alpha/README.md,sha256=VifKLrR404_yLVT0E3ai8f3R5K0h22VNwQplpSUSZqc,17489
46
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/README.md/README.md,sha256=5tNXSQdAoxRB2CXlKDpTlt-07OG3yIFqEEMnofQTGxE,76232
47
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/README.md/README.md,sha256=3UAoxAPV0YhySOFVSCnsNgur2YHYqBqJL4LGiWBQ7Tw,76231
47
48
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/assertions/MIGRATING.md,sha256=SYGX8QNB1Pm_rVYDBp4QRWkqwnxOb3CHzeFglUy_53k,3347
48
49
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/assertions/README.md,sha256=3yo3D05n5explTIgnuF-vkk01MTYeAYe7_3rcsD2baE,18299
49
50
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/assets/README.md,sha256=kL56RlfxBa5LwV0cRseybeKIRKHhEXPjUo0HWPZqdO8,53
@@ -270,12 +271,12 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/integ
270
271
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/integ.key-value-store-frominline.ts,sha256=H2nulQGsjNN2e9WFL4s0s_f7WwWhglrhifbbOCoSQ2o,646
271
272
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/integ.key-value-store.ts,sha256=d_364YWDm0IXXVZhSOgpqDJdIH85GpykvsQ-pqQI6zM,561
272
273
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront/integ.realtime-log-config.ts,sha256=ZhR1zUbouvf7RmYiYUCk-79AuTGwzDE6d8EcPWVzAPo,896
273
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/README.md,sha256=wJ8PuIAcpzeTLPXpUyxoMvtjt2C4O75wuR-mGcUbT_I,34919
274
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/README.md,sha256=yLcxLT8CAH_vWnYjQY65d_wGUeXTKiKsu6QLKmM9ol8,35377
274
275
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.function-url-origin-oac-alias.ts,sha256=3-edAxGbTMdiXKl2eLO92R1CkKVyHV8aJDHTIooU2I4,3331
275
276
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.function-url-origin-oac-custom.ts,sha256=Iv3QloWAIGk3tnCoeVVac7SgOVeXe_TI2YxAoY3Ixck,3618
276
277
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.function-url-origin-oac.ts,sha256=adecJ-YpyzA2uW3bt9OPL8uhXoY2GmhLg5W_q2UxyQU,3104
277
278
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.function-url-origin.ts,sha256=V6G-mt2FWdS_FssMxoTPCtFeBewUV9scyvRaddxSg-g,923
278
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.http-origin.ts,sha256=XOUD4AdemstukXCE1JT0HFd0GClB_qeoNi5dXdbsMCQ,392
279
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.http-origin.ts,sha256=JR5-JoCwGub7EzwPxE4HVl785gk5Q4ImrKmtH6pFwKM,569
279
280
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.load-balancer-origin.ts,sha256=F2TP5zO5FqEL-1Uw-qZTzfpqJzyPyUfsysZ4i6kHWrw,706
280
281
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.origin-group-selection-criteria.ts,sha256=V1kKE5ulDzBQ31liqUI0kr7nZ6lAEu4s6n5SSchx04g,1154
281
282
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudfront-origins/integ.origin-group.ts,sha256=rEZTwiMBsk6dzizh6d2AwqwIhCuidmBJvTqxHVeIVAA,738
@@ -324,7 +325,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch-actio
324
325
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch-actions/integ.lambda-alarm-action.ts,sha256=onNZET1IofzJ-_LmnlREFQ3O7MkISTW2OrLrCkJ2qBA,4614
325
326
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch-actions/integ.lambda-alarm-multiple-stepscalingpolicy.ts,sha256=gPLnWcaoTAAlmDYKyHsZz_55lpEDjG92xTNdjEc3IPk,2722
326
327
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-cloudwatch-actions/integ.ssm-incident-alarm-action.ts,sha256=X5iWnwQcAbLQnDkrxd5_rKL-jfw4s60kEQMVFLnCTRk,1895
327
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/README.md,sha256=pKI0s8e1zzvjz4LvKZga20AJxS6kpUEpsysTAP3N9ls,34404
328
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/README.md,sha256=D5zH4G72KjcgUBoxvyeMv5IiibETqfsjFqbsTu5N2ao,37188
328
329
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.asset-build-spec.ts,sha256=APwn0Tzph1El4XowRux9zXXlZO3eXJMFbp3bbovs-AM,1850
329
330
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.aws-deep-learning-container-build-image.ts,sha256=hSyb2cy-zu1rEkNiPybncQaV-Gh63REI95WBpuXeL-Y,488
330
331
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.breakpoint.ts,sha256=ezkSR2Ne1erXri4XV_kMwS4-DUhR5m3EMG1nxzbKZs4,838
@@ -343,7 +344,9 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.
343
344
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-buildspec-artifacts.ts,sha256=3Fx_jwCa5HW0Dsat2B5hMXrZw_CVldbITSTZRbSGRjo,693
344
345
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-docker-server.ts,sha256=n-TtyWQmaxiI-dWyWe6nZgCDtdn_gvqZAigIT_ugFPI,1301
345
346
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-file-system-location.ts,sha256=t1I6uabPbfoaQ7lzP2EJIbvB3_5vkTrr_oQRh69_HQk,1060
346
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-fleet-attribute-based-compute.ts,sha256=ttHvMAKsoo0zEF4f82x6cSyI_2QA0se6zrXoN64A2WY,2303
347
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-fleet-attribute-based-compute.ts,sha256=dAC9hW95FKgQl9sc_I4YK7UzIYcEZUrDblmlqd-bVJo,3930
348
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-fleet-custom-instance-type.ts,sha256=tobSWcbc6bd9De3brfmqAqV5_muT3FlOJPee378ff5g,4248
349
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-fleet-overflow-behavior.ts,sha256=XqE1fRey0AoXWUOIKSlBo_9uumqzL_hUayqXo21uU0c,1895
347
350
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-fleet.ts,sha256=kCXeV4i_mq2JFzvTDox6rv10no6LOZ-bb_Gk6aSa7A4,1913
348
351
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-linux-arm-lambda-image.lit.ts,sha256=f8fQCveGRs6yCEF0Shkww6BxGs1_iOb8QGl5nZg-138,1282
349
352
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codebuild/integ.project-linux-arm.ts,sha256=cB-WiW6Vy4hK5vNbozAHUTX2UduHf2L2Yghm-bNF4uM,1318
@@ -461,11 +464,12 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-config/integ.cus
461
464
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-config/integ.rule-evaluation-mode.ts,sha256=EMkgQ6799C9j6DLTbsNV2e6XI6YnJ9BS5f-YBkA6Itg,1888
462
465
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-config/integ.rule.ts,sha256=1pv5tnR-mA3CAspXEr5_EtoinfPy0e17YzOjCdKFQL8,2003
463
466
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-config/integ.scoped-rule.ts,sha256=tezmTuoD9VJ8mHS2I7NKdaPgu1Ve9SuEpVQArLGECBE,911
464
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/README.md,sha256=pCcUSJjhWhSKJsnk5yC3HokE2yRVjJw60Wuxz-RDf70,8996
467
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/README.md,sha256=bOXAzpc_UFlrzAhU2ih-fiphNWW2DkpGmABay48ATnE,9912
465
468
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster-copy-tags-to-snapshot.ts,sha256=jk6FB_5y0x3E7q6h9-3OT6htE7y0_L2W9o8fCo2rmzg,1007
466
469
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster-instance-ca-certificate.ts,sha256=lf0OILYv2Ez8-p0d-CQGT3dUH8lPcxDY2WVvZgf42Hg,1013
467
470
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster-removal-policy-snapshot.ts,sha256=EiA7liJZmGqA8wKU0hrrgSsw71MxztUTh9LwoK1rZ1Y,1868
468
471
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster-rotation.lit.ts,sha256=i4vSXs0eQ7-1sLtL0GEXIW0FYdVyKpVX8Nvz_N85I9M,1022
472
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster-serverless.ts,sha256=fVUwucggIFd_bkV6cMKFoO6UE8l_yImtyGyMupGc_Qw,971
469
473
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster-storage-type.ts,sha256=lY6eDVhKPOLF06uUT_jl-ao-mwllhXiJalS1GRqGEHY,888
470
474
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster.ts,sha256=9CI-3GXkVKVedg642mBMv5fBrqeSXRLfsvoftA1OM7s,1683
471
475
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/README.md,sha256=RegSheolCw5G878J1icibTPPfrDig67gXrYAZbGNouY,39383
@@ -581,7 +585,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr-assets/integ
581
585
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr-assets/integ.assets-tarball.ts,sha256=pSbNMWSorKT7lUTXxnzkxpcRumKPYWUmcbqRSwwWOgI,937
582
586
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr-assets/integ.nested-stacks-docker.ts,sha256=4hDobse34oIG2r0mjbYXzsEXXLEqv077jUh3pjoYmcc,981
583
587
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/CONTRIBUTING.md,sha256=TlNwpeYemLdYq4jdo24v7nwDIj3RmZ7u2j_LCQiQR74,2634
584
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md,sha256=3x7qZzMSZhlUITrPhNTscpSQbBQV34cDMADTqmOA7uc,75808
588
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md,sha256=g4z6674_NsRjkJoBj0eGXlWp03nQyapkjdJkiJ0GUUw,79348
585
589
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.add-docker-label.ts,sha256=avHktilCBVPuVelquVaY2ylRkSLraWn7vUIIIFPsbyI,1375
586
590
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.add-environment-variable.ts,sha256=sIdwJl7LYh5wlv_EDLPSGCavC2OF6W8IBwZ_hMOnCfw,1143
587
591
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.app-mesh-proxy-config.ts,sha256=vWr45An7W7lgW9Ws_yPFhapf9DXyJP-D0fhTNg5fZC0,1717
@@ -623,6 +627,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.gravit
623
627
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.graviton.ts,sha256=SfImqll0RwSnvXxB_UIb8pQbdN_OxFfUVsq69lI4k2o,840
624
628
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.lb-awsvpc-nw.ts,sha256=Rwqi34a5qRjNqLnbh6bNgb46CVDnGD7WGWGWm321w24,1623
625
629
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.lb-bridge-nw.ts,sha256=sxV4f9fRvG2aTwDI0rUfipuE8yQFZy0CWUTd3H0OdUc,1632
630
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-capacity-provider.ts,sha256=oGNex2Yj_aHaaRp9rUfWerjJv7O91Ls4ChkJXqmjgpE,3561
626
631
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.nlb-awsvpc-nw.ts,sha256=vXdMwV8Ythm3Qa4cHX_mg0WjRESCMYe0GgA3tX_uqTk,1474
627
632
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.placement-constraint-default-empty.ts,sha256=mMQZyejxLzLlENEuiDk7GKa1syiPkpb6xb6DEtYH62s,1490
628
633
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.placement-strategies.ts,sha256=W797uZbgznmaIVRYBaguJ3cM9OxXi70utWvE3g-nPiM,1424
@@ -1390,9 +1395,9 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-kubectl
1390
1395
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-node-proxy-agent/README.md,sha256=eWYOUl_BRExsSMY1mzF5V1oGsCuxVR-6MSIuapbOS4Y,632
1391
1396
  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
1392
1397
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/ORIGINAL_API.md,sha256=JUo88_SWhqnKC3ObhkMwGTNOma-BniqBMhoBnxpifE4,26756
1393
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/README.md,sha256=uHIk5psamSGELoHrrSMPBO5Tr0E6dMCPCrOHKT82dIk,71460
1398
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/README.md,sha256=UEyWH7ey2xFDUNla-gNh7-zm081fRRJhkTw9pnK6Ozc,71588
1394
1399
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.cross-account-pipeline-action.ts,sha256=A18UXJLsi5tyYfCp4Dw6SxI1Vk5JikNX1F0NbfEnICw,4804
1395
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-reduce-stagerole-scope.ts,sha256=IqBDpjPHyU8Uk91YISZm-1I_ERD8fbQObiMd6ekOyKQ,2543
1400
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-reduce-stagerole-scope.ts,sha256=YTTB_Vo8WqHM9Q12ARHyeLQfIyrvE8qGJ-c8Ac8Rx2c,2637
1396
1401
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-single-publisher.ts,sha256=QzRNUoZ2n7_vq4HLxkvDHt7y5ce71KjQHVFVIEDxiC4,1705
1397
1402
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-with-codebuild-logging.ts,sha256=7SuokmiayilFwdHU68_X5ZinfDt_Kj75quML_yHcdYQ,2557
1398
1403
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-with-codestar-connection.ts,sha256=x9DCirWauwW9hD7iCzMEoKcsVnKP1XJxJoq2Gfvxvvc,1772
@@ -1412,8 +1417,8 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.pipe
1412
1417
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/region-info/README.md,sha256=vewWkV3ds9o9iyyYaJBNTkaKJ2XA6K2yF17tAxUnujg,2718
1413
1418
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/README.md,sha256=hYIx7DbG_7p4LYLUfxDwgIQjw9UNdz1GLrqDe8_Dbko,4132
1414
1419
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/integ.triggers.ts,sha256=4OHplMoBOgHGkktAzoU-TuNmJQS5wGAUvBfj5bGSe_Y,2807
1415
- konokenj_cdk_api_mcp_server-0.46.0.dist-info/METADATA,sha256=G0mnhyrr9OiZZacbusRKWGnxUmw1PEUB0bptSBHBIVQ,2646
1416
- konokenj_cdk_api_mcp_server-0.46.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1417
- konokenj_cdk_api_mcp_server-0.46.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1418
- konokenj_cdk_api_mcp_server-0.46.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1419
- konokenj_cdk_api_mcp_server-0.46.0.dist-info/RECORD,,
1420
+ konokenj_cdk_api_mcp_server-0.48.0.dist-info/METADATA,sha256=DlxK8jwG-lfIznfwyArD_Rgn_I07ZrlH_ftIRTLM1y8,2646
1421
+ konokenj_cdk_api_mcp_server-0.48.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1422
+ konokenj_cdk_api_mcp_server-0.48.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1423
+ konokenj_cdk_api_mcp_server-0.48.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1424
+ konokenj_cdk_api_mcp_server-0.48.0.dist-info/RECORD,,