konokenj.cdk-api-mcp-server 0.69.0__py3-none-any.whl → 0.71.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 (21) hide show
  1. cdk_api_mcp_server/__about__.py +1 -1
  2. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-agentcore-alpha/README.md +146 -10
  3. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-elasticache-alpha/README.md +1 -1
  4. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-sagemaker-alpha/README.md +25 -0
  5. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/mixins-preview/README.md +18 -0
  6. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-batch/README.md +54 -34
  7. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/README.md +1 -1
  8. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md +81 -0
  9. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.canary-deployment-strategy.ts +117 -0
  10. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.linear-deployment-strategy.ts +117 -0
  11. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-capacity-provider.ts +1 -0
  12. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-iam/README.md +14 -11
  13. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/README.md +15 -2
  14. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroup-deletionprotection.ts +14 -0
  15. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-sns/README.md +2 -2
  16. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/ORIGINAL_API.md +1 -1
  17. {konokenj_cdk_api_mcp_server-0.69.0.dist-info → konokenj_cdk_api_mcp_server-0.71.0.dist-info}/METADATA +2 -2
  18. {konokenj_cdk_api_mcp_server-0.69.0.dist-info → konokenj_cdk_api_mcp_server-0.71.0.dist-info}/RECORD +21 -18
  19. {konokenj_cdk_api_mcp_server-0.69.0.dist-info → konokenj_cdk_api_mcp_server-0.71.0.dist-info}/WHEEL +0 -0
  20. {konokenj_cdk_api_mcp_server-0.69.0.dist-info → konokenj_cdk_api_mcp_server-0.71.0.dist-info}/entry_points.txt +0 -0
  21. {konokenj_cdk_api_mcp_server-0.69.0.dist-info → konokenj_cdk_api_mcp_server-0.71.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.69.0"
4
+ __version__ = "0.71.0"
@@ -155,7 +155,7 @@ to production by simply updating the endpoint to point to the newer version.
155
155
 
156
156
  | Name | Type | Required | Description |
157
157
  |------|------|----------|-------------|
158
- | `runtimeName` | `string` | Yes | The name of the agent runtime. Valid characters are a-z, A-Z, 0-9, _ (underscore). Must start with a letter and can be up to 48 characters long |
158
+ | `runtimeName` | `string` | No | The name of the agent runtime. Valid characters are a-z, A-Z, 0-9, _ (underscore). Must start with a letter and can be up to 48 characters long. If not provided, a unique name will be auto-generated |
159
159
  | `agentRuntimeArtifact` | `AgentRuntimeArtifact` | Yes | The artifact configuration for the agent runtime containing the container configuration with ECR URI |
160
160
  | `executionRole` | `iam.IRole` | No | The IAM role that provides permissions for the agent runtime. If not provided, a role will be created automatically |
161
161
  | `networkConfiguration` | `NetworkConfiguration` | No | Network configuration for the agent runtime. Defaults to `RuntimeNetworkConfiguration.usingPublicNetwork()` |
@@ -171,7 +171,7 @@ to production by simply updating the endpoint to point to the newer version.
171
171
 
172
172
  | Name | Type | Required | Description |
173
173
  |------|------|----------|-------------|
174
- | `endpointName` | `string` | Yes | The name of the runtime endpoint. Valid characters are a-z, A-Z, 0-9, _ (underscore). Must start with a letter and can be up to 48 characters long |
174
+ | `endpointName` | `string` | No | The name of the runtime endpoint. Valid characters are a-z, A-Z, 0-9, _ (underscore). Must start with a letter and can be up to 48 characters long. If not provided, a unique name will be auto-generated |
175
175
  | `agentRuntimeId` | `string` | Yes | The Agent Runtime ID for this endpoint |
176
176
  | `agentRuntimeVersion` | `string` | Yes | The Agent Runtime version for this endpoint. Must be between 1 and 5 characters long.|
177
177
  | `description` | `string` | No | Optional description for the runtime endpoint |
@@ -748,7 +748,7 @@ For more information on VPC connectivity for Amazon Bedrock AgentCore Browser, p
748
748
 
749
749
  | Name | Type | Required | Description |
750
750
  |------|------|----------|-------------|
751
- | `browserCustomName` | `string` | Yes | The name of the browser. Must start with a letter and can be up to 48 characters long. Pattern: `[a-zA-Z][a-zA-Z0-9_]{0,47}` |
751
+ | `browserCustomName` | `string` | No | The name of the browser. Must start with a letter and can be up to 48 characters long. Pattern: `[a-zA-Z][a-zA-Z0-9_]{0,47}`. If not provided, a unique name will be auto-generated |
752
752
  | `description` | `string` | No | Optional description for the browser. Can have up to 200 characters |
753
753
  | `networkConfiguration` | `BrowserNetworkConfiguration` | No | Network configuration for browser. Defaults to PUBLIC network mode |
754
754
  | `recordingConfig` | `RecordingConfig` | No | Recording configuration for browser. Defaults to no recording |
@@ -959,7 +959,7 @@ For more information on VPC connectivity for Amazon Bedrock AgentCore Browser, p
959
959
 
960
960
  | Name | Type | Required | Description |
961
961
  |------|------|----------|-------------|
962
- | `codeInterpreterCustomName` | `string` | Yes | The name of the code interpreter. Must start with a letter and can be up to 48 characters long. Pattern: `[a-zA-Z][a-zA-Z0-9_]{0,47}` |
962
+ | `codeInterpreterCustomName` | `string` | No | The name of the code interpreter. Must start with a letter and can be up to 48 characters long. Pattern: `[a-zA-Z][a-zA-Z0-9_]{0,47}`. If not provided, a unique name will be auto-generated |
963
963
  | `description` | `string` | No | Optional description for the code interpreter. Can have up to 200 characters |
964
964
  | `executionRole` | `iam.IRole` | No | The IAM role that provides permissions for the code interpreter to access AWS services. A new role will be created if not provided |
965
965
  | `networkConfiguration` | `CodeInterpreterNetworkConfiguration` | No | Network configuration for code interpreter. Defaults to PUBLIC network mode |
@@ -1084,7 +1084,7 @@ The Gateway construct provides a way to create Amazon Bedrock Agent Core Gateway
1084
1084
 
1085
1085
  | Name | Type | Required | Description |
1086
1086
  |------|------|----------|-------------|
1087
- | `gatewayName` | `string` | Yes | The name of the gateway. Valid characters are a-z, A-Z, 0-9, _ (underscore) and - (hyphen). Maximum 100 characters |
1087
+ | `gatewayName` | `string` | No | The name of the gateway. Valid characters are a-z, A-Z, 0-9, _ (underscore) and - (hyphen). Maximum 100 characters. If not provided, a unique name will be auto-generated |
1088
1088
  | `description` | `string` | No | Optional description for the gateway. Maximum 200 characters |
1089
1089
  | `protocolConfiguration` | `IGatewayProtocolConfig` | No | The protocol configuration for the gateway. Defaults to MCP protocol |
1090
1090
  | `authorizerConfiguration` | `IGatewayAuthorizerConfig` | No | The authorizer configuration for the gateway. Defaults to Cognito |
@@ -1307,7 +1307,7 @@ credential provider attached enabling you to securely access targets whether the
1307
1307
 
1308
1308
  | Name | Type | Required | Description |
1309
1309
  |------|------|----------|-------------|
1310
- | `gatewayTargetName` | `string` | Yes | The name of the gateway target. Valid characters are a-z, A-Z, 0-9, _ (underscore) and - (hyphen) |
1310
+ | `gatewayTargetName` | `string` | No | The name of the gateway target. Valid characters are a-z, A-Z, 0-9, _ (underscore) and - (hyphen). If not provided, a unique name will be auto-generated |
1311
1311
  | `description` | `string` | No | Optional description for the gateway target. Maximum 200 characters |
1312
1312
  | `gateway` | `IGateway` | Yes | The gateway this target belongs to |
1313
1313
  | `targetConfiguration` | `ITargetConfiguration` | Yes | The target configuration (Lambda, OpenAPI, or Smithy). **Note:** Users typically don't create this directly. When using convenience methods like `GatewayTarget.forLambda()`, `GatewayTarget.forOpenApi()`, `GatewayTarget.forSmithy()` or the gateway's `addLambdaTarget()`, `addOpenApiTarget()`, `addSmithyTarget()` methods, this configuration is created internally for you. Only needed when using the GatewayTarget constructor directly for [advanced scenarios](#advanced-usage-direct-configuration-for-gateway-target). |
@@ -1842,6 +1842,124 @@ const target = new agentcore.GatewayTarget(this, "AdvancedTarget", {
1842
1842
 
1843
1843
  This approach gives you full control over the configuration but is typically not necessary for most use cases. The convenience methods (`GatewayTarget.forLambda()`, `GatewayTarget.forOpenApi()`, `GatewayTarget.forSmithy()`) handle all of this internally.
1844
1844
 
1845
+ ### Gateway Interceptors
1846
+
1847
+ Gateway interceptors allow you to run custom code during each gateway invocation to implement fine-grained access control, transform requests and responses, or implement custom authorization logic. A gateway can have at most one REQUEST interceptor and one RESPONSE interceptor.
1848
+
1849
+ **Interceptor Types:**
1850
+
1851
+ - **REQUEST interceptors**: Execute before the gateway calls the target. Useful for request validation, transformation, or custom authorization
1852
+ - **RESPONSE interceptors**: Execute after the target responds but before the gateway sends the response back. Useful for response transformation, filtering, or adding custom headers
1853
+
1854
+ **Security Best Practices:**
1855
+
1856
+ 1. Keep `passRequestHeaders` disabled unless absolutely necessary (default: false)
1857
+ 2. Implement idempotent Lambda functions (gateway may retry on failures)
1858
+ 3. Restrict gateway execution role to specific Lambda functions
1859
+ 4. Avoid logging sensitive information in your interceptor
1860
+
1861
+ For more information, see the [Gateway Interceptors documentation](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-interceptors.html).
1862
+
1863
+ #### Adding Interceptors via Constructor
1864
+
1865
+ ```typescript fixture=default
1866
+ // Create Lambda functions for interceptors
1867
+ const requestInterceptorFn = new lambda.Function(this, "RequestInterceptor", {
1868
+ runtime: lambda.Runtime.PYTHON_3_12,
1869
+ handler: "index.handler",
1870
+ code: lambda.Code.fromInline(`
1871
+ def handler(event, context):
1872
+ # Validate and transform request
1873
+ return {
1874
+ "interceptorOutputVersion": "1.0",
1875
+ "mcp": {
1876
+ "transformedGatewayRequest": event["mcp"]["gatewayRequest"]
1877
+ }
1878
+ }
1879
+ `),
1880
+ });
1881
+
1882
+ const responseInterceptorFn = new lambda.Function(this, "ResponseInterceptor", {
1883
+ runtime: lambda.Runtime.PYTHON_3_12,
1884
+ handler: "index.handler",
1885
+ code: lambda.Code.fromInline(`
1886
+ def handler(event, context):
1887
+ # Filter or transform response
1888
+ return {
1889
+ "interceptorOutputVersion": "1.0",
1890
+ "mcp": {
1891
+ "transformedGatewayResponse": event["mcp"]["gatewayResponse"]
1892
+ }
1893
+ }
1894
+ `),
1895
+ });
1896
+
1897
+ // Create gateway with interceptors
1898
+ const gateway = new agentcore.Gateway(this, "MyGateway", {
1899
+ gatewayName: "my-gateway",
1900
+ interceptorConfigurations: [
1901
+ agentcore.LambdaInterceptor.forRequest(requestInterceptorFn, {
1902
+ passRequestHeaders: true // Only if you need to inspect headers
1903
+ }),
1904
+ agentcore.LambdaInterceptor.forResponse(responseInterceptorFn)
1905
+ ]
1906
+ });
1907
+ ```
1908
+
1909
+ **Automatic Permission Granting:**
1910
+
1911
+ When you add a Lambda interceptor to a gateway (either via constructor or `addInterceptor()`), the gateway's IAM role automatically receives `lambda:InvokeFunction` permission on the Lambda function. This permission grant happens internally during the bind process - you do not need to manually configure these IAM permissions.
1912
+
1913
+ #### Adding Interceptors Dynamically
1914
+
1915
+ ```typescript fixture=default
1916
+ // Create a gateway first
1917
+ const gateway = new agentcore.Gateway(this, "MyGateway", {
1918
+ gatewayName: "my-gateway",
1919
+ });
1920
+
1921
+ // Create Lambda functions for interceptors
1922
+ const requestInterceptorFn = new lambda.Function(this, "RequestInterceptor", {
1923
+ runtime: lambda.Runtime.PYTHON_3_12,
1924
+ handler: "index.handler",
1925
+ code: lambda.Code.fromInline(`
1926
+ def handler(event, context):
1927
+ # Custom request validation logic
1928
+ return {
1929
+ "interceptorOutputVersion": "1.0",
1930
+ "mcp": {
1931
+ "transformedGatewayRequest": event["mcp"]["gatewayRequest"]
1932
+ }
1933
+ }
1934
+ `),
1935
+ });
1936
+
1937
+ const responseInterceptorFn = new lambda.Function(this, "ResponseInterceptor", {
1938
+ runtime: lambda.Runtime.PYTHON_3_12,
1939
+ handler: "index.handler",
1940
+ code: lambda.Code.fromInline(`
1941
+ def handler(event, context):
1942
+ # Filter sensitive data from response
1943
+ return {
1944
+ "interceptorOutputVersion": "1.0",
1945
+ "mcp": {
1946
+ "transformedGatewayResponse": event["mcp"]["gatewayResponse"]
1947
+ }
1948
+ }
1949
+ `),
1950
+ });
1951
+
1952
+ gateway.addInterceptor(
1953
+ agentcore.LambdaInterceptor.forRequest(requestInterceptorFn, {
1954
+ passRequestHeaders: false // Default, headers not passed for security
1955
+ })
1956
+ );
1957
+
1958
+ gateway.addInterceptor(
1959
+ agentcore.LambdaInterceptor.forResponse(responseInterceptorFn)
1960
+ );
1961
+ ```
1962
+
1845
1963
  ### Gateway Target IAM Permissions
1846
1964
 
1847
1965
  The Gateway Target construct provides convenient methods for granting IAM permissions:
@@ -1901,7 +2019,7 @@ To write to long-term memory, you need to configure extraction strategies which
1901
2019
 
1902
2020
  | Name | Type | Required | Description |
1903
2021
  |------|------|----------|-------------|
1904
- | `memoryName` | `string` | Yes | The name of the memory |
2022
+ | `memoryName` | `string` | No | The name of the memory. If not provided, a unique name will be auto-generated |
1905
2023
  | `expirationDuration` | `Duration` | No | Short-term memory expiration in days (between 7 and 365). Default: 90 days |
1906
2024
  | `description` | `string` | No | Optional description for the memory. Default: no description. |
1907
2025
  | `kmsKey` | `IKey` | No | Custom KMS key to use for encryption. Default: Your data is encrypted with a key that AWS owns and manages for you |
@@ -1958,7 +2076,7 @@ You can use built-in extraction strategies for quick setup, or create custom ext
1958
2076
 
1959
2077
  ### Memory with Built-in Strategies
1960
2078
 
1961
- The library provides three built-in LTM strategies. These are default strategies for organizing and extracting memory data,
2079
+ The library provides four built-in LTM strategies. These are default strategies for organizing and extracting memory data,
1962
2080
  each optimized for specific use cases.
1963
2081
 
1964
2082
  For example: An agent helps multiple users with cloud storage setup. From these conversations,
@@ -1985,6 +2103,14 @@ Extracted memory example: User needs clear guidance on cloud storage account con
1985
2103
  - Extracts user behavior patterns from raw conversations
1986
2104
  - Namespace: `/strategies/{memoryStrategyId}/actors/{actorId}`
1987
2105
 
2106
+ 4. **Episodic Memory Strategy** (`MemoryStrategy.usingBuiltInEpisodic()`)
2107
+ Captures meaningful slices of user and system interactions, preserve them into compact records after summarizing.
2108
+ Extracted memory example: User first asked about pricing on Monday, then requested feature comparison on Tuesday, finally made purchase decision on Wednesday.
2109
+
2110
+ - Captures event sequences and temporal relationships
2111
+ - Namespace: `/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}`
2112
+ - Reflections: `/strategy/{memoryStrategyId}/actor/{actorId}`
2113
+
1988
2114
  ```typescript fixture=default
1989
2115
  // Create memory with built-in strategies
1990
2116
  const memory = new agentcore.Memory(this, "MyMemory", {
@@ -1995,6 +2121,7 @@ const memory = new agentcore.Memory(this, "MyMemory", {
1995
2121
  agentcore.MemoryStrategy.usingBuiltInSummarization(),
1996
2122
  agentcore.MemoryStrategy.usingBuiltInSemantic(),
1997
2123
  agentcore.MemoryStrategy.usingBuiltInUserPreference(),
2124
+ agentcore.MemoryStrategy.usingBuiltInEpisodic(),
1998
2125
  ],
1999
2126
  });
2000
2127
  ```
@@ -2004,6 +2131,7 @@ The name generated for each built in memory strategy is as follows:
2004
2131
  - For Summarization: `summary_builtin_cdk001`
2005
2132
  - For Semantic:`semantic_builtin_cdk001>`
2006
2133
  - For User Preferences: `preference_builtin_cdk001`
2134
+ - For Episodic : `episodic_builtin_cdkGen0001`
2007
2135
 
2008
2136
  ### Memory with custom Strategies
2009
2137
 
@@ -2045,12 +2173,13 @@ You can customise the namespace, i.e. where the memories are stored by using the
2045
2173
  1. **Summarization Strategy** (`MemoryStrategy.usingSummarization(props)`)
2046
2174
  1. **Semantic Memory Strategy** (`MemoryStrategy.usingSemantic(props)`)
2047
2175
  1. **User Preference Strategy** (`MemoryStrategy.usingUserPreference(props)`)
2176
+ 1. **Episodic Memory Strategy** (`MemoryStrategy.usingEpisodic(props)`)
2048
2177
 
2049
2178
  ```typescript fixture=default
2050
- // Create memory with built-in strategies
2179
+ // Create memory with custom strategies
2051
2180
  const memory = new agentcore.Memory(this, "MyMemory", {
2052
2181
  memoryName: "my_memory",
2053
- description: "Memory with built-in strategies",
2182
+ description: "Memory with custom strategies",
2054
2183
  expirationDuration: cdk.Duration.days(90),
2055
2184
  memoryStrategies: [
2056
2185
  agentcore.MemoryStrategy.usingUserPreference({
@@ -2061,6 +2190,13 @@ const memory = new agentcore.Memory(this, "MyMemory", {
2061
2190
  name: "CustomerSupportSemantic",
2062
2191
  namespaces: ["support/customer/{actorId}/semantic"]
2063
2192
  }),
2193
+ agentcore.MemoryStrategy.usingEpisodic({
2194
+ name: "customerJourneyEpisodic",
2195
+ namespaces: ["/journey/customer/{actorId}/episodes"],
2196
+ reflectionConfiguration: {
2197
+ namespaces: ["/journey/customer/{actorId}/reflections"]
2198
+ }
2199
+ }),
2064
2200
  ],
2065
2201
  });
2066
2202
  ```
@@ -397,7 +397,7 @@ declare const role: iam.Role;
397
397
 
398
398
  // grant "elasticache:Connect" action permissions to role
399
399
  user.grantConnect(role);
400
- serverlessCache.grantConnect(role);
400
+ serverlessCache.grants.connect(role);
401
401
  ```
402
402
 
403
403
  ### Import an existing user and user group
@@ -214,6 +214,31 @@ const endpointConfig = new sagemaker.EndpointConfig(this, 'EndpointConfig', {
214
214
  });
215
215
  ```
216
216
 
217
+ #### Container Startup Health Check Timeout
218
+
219
+ You can specify a timeout value for your inference container to pass health check by configuring
220
+ the `containerStartupHealthCheckTimeout` property. This is useful when your model takes longer
221
+ to initialize and you want to avoid premature health check failures:
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, 'EndpointConfig', {
229
+ instanceProductionVariants: [
230
+ {
231
+ model: model,
232
+ variantName: 'my-variant',
233
+ containerStartupHealthCheckTimeout: cdk.Duration.minutes(5), // 5 minutes timeout
234
+ },
235
+ ]
236
+ });
237
+ ```
238
+
239
+ The timeout value must be between 60 seconds and 1 hour (3600 seconds). If not specified,
240
+ Amazon SageMaker uses the default timeout behavior.
241
+
217
242
  ### Serverless Inference
218
243
 
219
244
  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).
@@ -134,6 +134,24 @@ const bucket = new s3.CfnBucket(scope, "Bucket");
134
134
  Mixins.of(bucket).apply(new EnableVersioning());
135
135
  ```
136
136
 
137
+ **BucketPolicyStatementsMixin**: Adds IAM policy statements to a bucket policy
138
+
139
+ ```typescript
140
+ declare const bucket: s3.IBucketRef;
141
+
142
+ const bucketPolicy = new s3.CfnBucketPolicy(scope, "BucketPolicy", {
143
+ bucket: bucket,
144
+ policyDocument: new iam.PolicyDocument(),
145
+ });
146
+ Mixins.of(bucketPolicy).apply(new BucketPolicyStatementsMixin([
147
+ new iam.PolicyStatement({
148
+ actions: ["s3:GetObject"],
149
+ resources: ["*"],
150
+ principals: [new iam.AnyPrincipal()],
151
+ }),
152
+ ]));
153
+ ```
154
+
137
155
  ### Logs Delivery
138
156
 
139
157
  Configures vended logs delivery for supported resources to various destinations:
@@ -65,68 +65,88 @@ For stateful or otherwise non-interruption-tolerant workflows, omit `spot` or se
65
65
 
66
66
  #### Choosing Your Instance Types
67
67
 
68
- Batch allows you to choose most up-to-date instance classes based on your region.
69
- This example configures your `ComputeEnvironment` to use only ARM64 instance:
68
+ There are several ways to configure instance types for your compute environment:
69
+
70
+ ##### Using Default Instance Classes (Recommended)
71
+
72
+ AWS Batch provides default instance classes that automatically select cost-effective, up-to-date instances based on your region.
73
+ This is the recommended approach for new projects:
70
74
 
71
75
  ```ts
72
- const vpc = new ec2.Vpc(this, 'VPC');
76
+ const vpc = new ec2.Vpc(this, 'Vpc');
73
77
 
74
- new batch.ManagedEc2EcsComputeEnvironment(this, 'myEc2ComputeEnv', {
78
+ // Use ARM64 instances (e.g., m6g, c6g, r6g, c7g families)
79
+ new batch.ManagedEc2EcsComputeEnvironment(this, 'Arm64Ec2ComputeEnv', {
75
80
  vpc,
76
81
  defaultInstanceClasses: [batch.DefaultInstanceClass.ARM64],
77
82
  });
78
- ```
79
-
80
- This example configures your `ComputeEnvironment` to use only the `M5AD.large` instance:
81
-
82
- ```ts
83
- const vpc = new ec2.Vpc(this, 'VPC');
84
83
 
85
- new batch.ManagedEc2EcsComputeEnvironment(this, 'myEc2ComputeEnv', {
84
+ // Use x86_64 instances (e.g., m6i, c6i, r6i, c7i families)
85
+ new batch.ManagedEc2EcsComputeEnvironment(this, 'X86_64Ec2ComputeEnv', {
86
86
  vpc,
87
- instanceTypes: [ec2.InstanceType.of(ec2.InstanceClass.M5AD, ec2.InstanceSize.LARGE)],
87
+ defaultInstanceClasses: [batch.DefaultInstanceClass.X86_64],
88
88
  });
89
89
  ```
90
90
 
91
- Batch allows you to specify only the instance class and to let it choose the size, which you can do like this:
91
+ The `default_x86_64` and `default_arm64` categories are dynamically updated by AWS as new instance families become available in your region.
92
+
93
+ ##### Using Specific Instance Types Only
94
+
95
+ To use only specific instance types without any automatic defaults, set `useOptimalInstanceClasses: false`:
92
96
 
93
97
  ```ts
94
- const vpc = new ec2.Vpc(this, 'VPC');
98
+ const vpc = new ec2.Vpc(this, 'Vpc');
95
99
 
96
- declare const computeEnv: batch.IManagedEc2EcsComputeEnvironment
97
- computeEnv.addInstanceClass(ec2.InstanceClass.M5AD);
98
- // Or, specify it on the constructor:
99
- new batch.ManagedEc2EcsComputeEnvironment(this, 'myEc2ComputeEnv', {
100
+ // Use only R4 instance class (Batch chooses the size)
101
+ new batch.ManagedEc2EcsComputeEnvironment(this, 'R4Ec2ComputeEnv', {
100
102
  vpc,
103
+ useOptimalInstanceClasses: false,
101
104
  instanceClasses: [ec2.InstanceClass.R4],
102
105
  });
106
+
107
+ // Use only a specific instance type
108
+ new batch.ManagedEc2EcsComputeEnvironment(this, 'M5AdLargeEc2ComputeEnv', {
109
+ vpc,
110
+ useOptimalInstanceClasses: false,
111
+ instanceTypes: [ec2.InstanceType.of(ec2.InstanceClass.M5AD, ec2.InstanceSize.LARGE)],
112
+ });
103
113
  ```
104
114
 
105
- > [!WARNING]
106
- > `useOptimalInstanceClasses` is deprecated! Use `defaultInstanceClasses` instead.
115
+ ##### Using Optimal Instance Classes
116
+
117
+ By default, `useOptimalInstanceClasses` is `true`, which adds the `optimal` instance type.
118
+
119
+ **Note**: Since November 2025, `optimal` behaves the same as `default_x86_64` and is dynamically updated as AWS introduces new instance families. Both options automatically select cost-effective x86_64 instance types (from the m6i, c6i, r6i, and c7i families) based on your region.
107
120
 
108
- Unless you explicitly specify `useOptimalInstanceClasses: false`, this compute environment will use `'optimal'` instances,
109
- which tells Batch to pick an instance from the C4, M4, and R4 instance families.
110
- *Note*: Batch does not allow specifying instance types or classes with different architectures.
111
- For example, `InstanceClass.A1` cannot be specified alongside `'optimal'`,
112
- because `A1` uses ARM and `'optimal'` uses x86_64.
113
- You can specify both `'optimal'` alongside several different instance types in the same compute environment:
121
+ You can combine this with additional instance types:
114
122
 
115
123
  ```ts
116
124
  declare const vpc: ec2.IVpc;
117
125
 
118
- const computeEnv = new batch.ManagedEc2EcsComputeEnvironment(this, 'myEc2ComputeEnv', {
119
- instanceTypes: [ec2.InstanceType.of(ec2.InstanceClass.M5AD, ec2.InstanceSize.LARGE)],
120
- useOptimalInstanceClasses: true, // default
126
+ const computeEnv = new batch.ManagedEc2EcsComputeEnvironment(this, 'Ec2ComputeEnv', {
121
127
  vpc,
128
+ instanceTypes: [ec2.InstanceType.of(ec2.InstanceClass.M5AD, ec2.InstanceSize.LARGE)],
129
+ // useOptimalInstanceClasses: true (default)
122
130
  });
123
- // Note: this is equivalent to specifying
124
- computeEnv.addInstanceType(ec2.InstanceType.of(ec2.InstanceClass.M5AD, ec2.InstanceSize.LARGE));
125
- computeEnv.addInstanceClass(ec2.InstanceClass.C4);
126
- computeEnv.addInstanceClass(ec2.InstanceClass.M4);
127
- computeEnv.addInstanceClass(ec2.InstanceClass.R4);
131
+ // Result: ['m5ad.large', 'optimal']
128
132
  ```
129
133
 
134
+ ##### Instance Type Configuration Reference
135
+
136
+ | Goal | Configuration |
137
+ |------|---------------|
138
+ | Use latest x86_64 instances | `defaultInstanceClasses: [DefaultInstanceClass.X86_64]` or no configuration (default) |
139
+ | Use latest ARM64 instances | `defaultInstanceClasses: [DefaultInstanceClass.ARM64]` |
140
+ | Use only specific instance classes | `useOptimalInstanceClasses: false` + `instanceClasses: [...]` |
141
+ | Use only specific instance types | `useOptimalInstanceClasses: false` + `instanceTypes: [...]` |
142
+ | Use optimal + additional instances | `instanceClasses: [...]` or `instanceTypes: [...]` |
143
+
144
+ **Note**: Batch does not allow specifying instance types or classes with different architectures.
145
+ For example, `InstanceClass.A1` (ARM) cannot be specified alongside `optimal` (x86_64).
146
+ When using ARM-based instances (e.g., Graviton), use `defaultInstanceClasses: [DefaultInstanceClass.ARM64]`, or set `useOptimalInstanceClasses: false` and explicitly specify ARM instance classes/types.
147
+
148
+ **Note**: `useOptimalInstanceClasses` and `defaultInstanceClasses` cannot be used together.
149
+
130
150
  #### Configure AMIs
131
151
 
132
152
  You can configure Amazon Machine Images (AMIs). This example configures your `ComputeEnvironment` to use Amazon Linux 2023.
@@ -245,7 +245,7 @@ const vpc = new ec2.Vpc(this, 'TheVPC', {
245
245
  const securityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', { vpc });
246
246
  securityGroup.addEgressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(443));
247
247
  for (const gateway of provider.gatewayInstances) {
248
- bucket.grantWrite(gateway);
248
+ bucket.grants.write(gateway);
249
249
  gateway.addSecurityGroup(securityGroup);
250
250
  }
251
251
  ```
@@ -1678,6 +1678,8 @@ new ecs.Ec2Service(this, 'EC2Service', {
1678
1678
 
1679
1679
  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. You can define detailed instance requirements to control which types of instances are used for your workloads.
1680
1680
 
1681
+ Capacity Option Type provides the purchasing option for the EC2 instances used in the capacity provider. Determines whether to use On-Demand or Spot instances. Valid values are `ON_DEMAND` and `SPOT`. Defaults to `ON_DEMAND` when not specified. Changing this value will trigger replacement of the capacity provider. For more information, see [Amazon EC2 billing and purchasing options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-purchasing-options.html) in the Amazon EC2 User Guide.
1682
+
1681
1683
  See [ECS documentation for Managed Instances Capacity Provider](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-capacity-providers-concept.html) for more documentation.
1682
1684
 
1683
1685
  #### IAM Roles Setup
@@ -1695,6 +1697,7 @@ const securityGroup = new ec2.SecurityGroup(this, 'SecurityGroup', {
1695
1697
  });
1696
1698
 
1697
1699
  const miCapacityProvider = new ecs.ManagedInstancesCapacityProvider(this, 'MICapacityProvider', {
1700
+ capacityOptionType: ecs.CapacityOptionType.SPOT,
1698
1701
  subnets: vpc.privateSubnets,
1699
1702
  securityGroups: [securityGroup],
1700
1703
  instanceRequirements: {
@@ -2353,6 +2356,84 @@ const target = service.loadBalancerTarget({
2353
2356
  target.attachToApplicationTargetGroup(blueTargetGroup);
2354
2357
  ```
2355
2358
 
2359
+ ## Buil-in Linear and Canary Deployments
2360
+
2361
+ Amazon ECS supports progressive deployment strategies that allow you to validate new service revisions before shifting all production traffic. Both strategies require an Application Load Balancer (ALB) with target groups for traffic routing.
2362
+
2363
+ ### Linear Deployment
2364
+
2365
+ Linear deployment strategy shifts production traffic in equal percentage increments with configurable wait times between each step:
2366
+
2367
+ ```ts
2368
+ declare const cluster: ecs.Cluster;
2369
+ declare const taskDefinition: ecs.TaskDefinition;
2370
+ declare const blueTargetGroup: elbv2.ApplicationTargetGroup;
2371
+ declare const greenTargetGroup: elbv2.ApplicationTargetGroup;
2372
+ declare const prodListenerRule: elbv2.ApplicationListenerRule;
2373
+
2374
+ const service = new ecs.FargateService(this, 'Service', {
2375
+ cluster,
2376
+ taskDefinition,
2377
+ deploymentStrategy: ecs.DeploymentStrategy.LINEAR,
2378
+ linearConfiguration: {
2379
+ stepPercent: 10.0,
2380
+ stepBakeTime: Duration.minutes(5),
2381
+ },
2382
+ });
2383
+
2384
+ const target = service.loadBalancerTarget({
2385
+ containerName: 'web',
2386
+ containerPort: 80,
2387
+ alternateTarget: new ecs.AlternateTarget('AlternateTarget', {
2388
+ alternateTargetGroup: greenTargetGroup,
2389
+ productionListener: ecs.ListenerRuleConfiguration.applicationListenerRule(prodListenerRule),
2390
+ }),
2391
+ });
2392
+
2393
+ target.attachToApplicationTargetGroup(blueTargetGroup);
2394
+ ```
2395
+
2396
+ Valid values:
2397
+ - `stepPercent`: 3.0 to 100.0 (multiples of 0.1). Default: 10.0
2398
+ - `stepBakeTime`: 0 to 1440 minutes (24 hours). Default: 6 minutes
2399
+
2400
+ ### Canary Deployment
2401
+
2402
+ Canary deployment strategy shifts a fixed percentage of traffic to the new service revision for testing, then shifts the remaining traffic after a bake period:
2403
+
2404
+ ```ts
2405
+ declare const cluster: ecs.Cluster;
2406
+ declare const taskDefinition: ecs.TaskDefinition;
2407
+ declare const blueTargetGroup: elbv2.ApplicationTargetGroup;
2408
+ declare const greenTargetGroup: elbv2.ApplicationTargetGroup;
2409
+ declare const prodListenerRule: elbv2.ApplicationListenerRule;
2410
+
2411
+ const service = new ecs.FargateService(this, 'Service', {
2412
+ cluster,
2413
+ taskDefinition,
2414
+ deploymentStrategy: ecs.DeploymentStrategy.CANARY,
2415
+ canaryConfiguration: {
2416
+ stepPercent: 5.0,
2417
+ stepBakeTime: Duration.minutes(10),
2418
+ },
2419
+ });
2420
+
2421
+ const target = service.loadBalancerTarget({
2422
+ containerName: 'web',
2423
+ containerPort: 80,
2424
+ alternateTarget: new ecs.AlternateTarget('AlternateTarget', {
2425
+ alternateTargetGroup: greenTargetGroup,
2426
+ productionListener: ecs.ListenerRuleConfiguration.applicationListenerRule(prodListenerRule),
2427
+ }),
2428
+ });
2429
+
2430
+ target.attachToApplicationTargetGroup(blueTargetGroup);
2431
+ ```
2432
+
2433
+ Valid values:
2434
+ - `stepPercent`: 0.1 to 100.0 (multiples of 0.1). Default: 5.0
2435
+ - `stepBakeTime`: 0 to 1440 minutes (24 hours). Default: 10 minutes
2436
+
2356
2437
  ## Daemon Scheduling Strategy
2357
2438
  You can specify whether service use Daemon scheduling strategy by specifying `daemon` option in Service constructs. See [differences between Daemon and Replica scheduling strategy](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html)
2358
2439
 
@@ -0,0 +1,117 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
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
+ const stack = new cdk.Stack(app, 'aws-ecs-canary-deployment');
9
+
10
+ const vpc = new ec2.Vpc(stack, 'Vpc', { maxAzs: 2, restrictDefaultSecurityGroup: false });
11
+ const cluster = new ecs.Cluster(stack, 'FargateCluster', { vpc });
12
+
13
+ const blueTargetGroup = new elbv2.ApplicationTargetGroup(stack, 'BlueTG', {
14
+ vpc: cluster.vpc,
15
+ port: 80,
16
+ protocol: elbv2.ApplicationProtocol.HTTP,
17
+ targetType: elbv2.TargetType.IP,
18
+ healthCheck: {
19
+ path: '/',
20
+ healthyHttpCodes: '200',
21
+ },
22
+ });
23
+
24
+ const greenTargetGroup = new elbv2.ApplicationTargetGroup(stack, 'GreenTG', {
25
+ vpc: cluster.vpc,
26
+ port: 80,
27
+ protocol: elbv2.ApplicationProtocol.HTTP,
28
+ targetType: elbv2.TargetType.IP,
29
+ healthCheck: {
30
+ path: '/',
31
+ healthyHttpCodes: '200',
32
+ },
33
+ });
34
+
35
+ const lbSecurityGroup = new ec2.SecurityGroup(stack, 'LBSecurityGroup', {
36
+ vpc: cluster.vpc,
37
+ allowAllOutbound: true,
38
+ });
39
+
40
+ const ecsSecurityGroup = new ec2.SecurityGroup(stack, 'ECSSecurityGroup', {
41
+ vpc: cluster.vpc,
42
+ allowAllOutbound: true,
43
+ });
44
+ ecsSecurityGroup.addIngressRule(lbSecurityGroup, ec2.Port.tcp(80));
45
+
46
+ const alb = new elbv2.ApplicationLoadBalancer(stack, 'ALB', {
47
+ vpc: cluster.vpc,
48
+ internetFacing: true,
49
+ securityGroup: lbSecurityGroup,
50
+ idleTimeout: cdk.Duration.seconds(60),
51
+ });
52
+
53
+ const listener = alb.addListener('ALBListener', {
54
+ port: 80,
55
+ defaultAction: elbv2.ListenerAction.fixedResponse(404),
56
+ open: false,
57
+ });
58
+
59
+ const prodListenerRule = new elbv2.ApplicationListenerRule(stack, 'ALBProductionListenerRule', {
60
+ listener: listener,
61
+ priority: 1,
62
+ conditions: [
63
+ elbv2.ListenerCondition.pathPatterns(['/*']),
64
+ ],
65
+ action: elbv2.ListenerAction.weightedForward([
66
+ {
67
+ targetGroup: blueTargetGroup,
68
+ weight: 100,
69
+ },
70
+ {
71
+ targetGroup: greenTargetGroup,
72
+ weight: 0,
73
+ },
74
+ ]),
75
+ });
76
+
77
+ const taskDefinition = new ecs.FargateTaskDefinition(stack, 'TaskDef', {
78
+ memoryLimitMiB: 512,
79
+ cpu: 256,
80
+ });
81
+
82
+ taskDefinition.addContainer('container', {
83
+ containerName: 'nginx',
84
+ image: ecs.ContainerImage.fromRegistry('public.ecr.aws/nginx/nginx:latest'),
85
+ portMappings: [{
86
+ name: 'api',
87
+ containerPort: 80,
88
+ appProtocol: ecs.AppProtocol.http,
89
+ }],
90
+ });
91
+
92
+ const service = new ecs.FargateService(stack, 'Service', {
93
+ cluster,
94
+ taskDefinition,
95
+ securityGroups: [ecsSecurityGroup],
96
+ deploymentStrategy: ecs.DeploymentStrategy.CANARY,
97
+ canaryConfiguration: {
98
+ stepPercent: 5.0,
99
+ stepBakeTime: cdk.Duration.minutes(10),
100
+ },
101
+ });
102
+
103
+ const target = service.loadBalancerTarget({
104
+ containerName: 'nginx',
105
+ containerPort: 80,
106
+ protocol: ecs.Protocol.TCP,
107
+ alternateTarget: new ecs.AlternateTarget('LBAlternateOptions', {
108
+ alternateTargetGroup: greenTargetGroup,
109
+ productionListener: ecs.ListenerRuleConfiguration.applicationListenerRule(prodListenerRule),
110
+ }),
111
+ });
112
+
113
+ target.attachToApplicationTargetGroup(blueTargetGroup);
114
+
115
+ new integ.IntegTest(app, 'aws-ecs-canary', {
116
+ testCases: [stack],
117
+ });
@@ -0,0 +1,117 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
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
+ const stack = new cdk.Stack(app, 'aws-ecs-linear-deployment');
9
+
10
+ const vpc = new ec2.Vpc(stack, 'Vpc', { maxAzs: 2, restrictDefaultSecurityGroup: false });
11
+ const cluster = new ecs.Cluster(stack, 'FargateCluster', { vpc });
12
+
13
+ const blueTargetGroup = new elbv2.ApplicationTargetGroup(stack, 'BlueTG', {
14
+ vpc: cluster.vpc,
15
+ port: 80,
16
+ protocol: elbv2.ApplicationProtocol.HTTP,
17
+ targetType: elbv2.TargetType.IP,
18
+ healthCheck: {
19
+ path: '/',
20
+ healthyHttpCodes: '200',
21
+ },
22
+ });
23
+
24
+ const greenTargetGroup = new elbv2.ApplicationTargetGroup(stack, 'GreenTG', {
25
+ vpc: cluster.vpc,
26
+ port: 80,
27
+ protocol: elbv2.ApplicationProtocol.HTTP,
28
+ targetType: elbv2.TargetType.IP,
29
+ healthCheck: {
30
+ path: '/',
31
+ healthyHttpCodes: '200',
32
+ },
33
+ });
34
+
35
+ const lbSecurityGroup = new ec2.SecurityGroup(stack, 'LBSecurityGroup', {
36
+ vpc: cluster.vpc,
37
+ allowAllOutbound: true,
38
+ });
39
+
40
+ const ecsSecurityGroup = new ec2.SecurityGroup(stack, 'ECSSecurityGroup', {
41
+ vpc: cluster.vpc,
42
+ allowAllOutbound: true,
43
+ });
44
+ ecsSecurityGroup.addIngressRule(lbSecurityGroup, ec2.Port.tcp(80));
45
+
46
+ const alb = new elbv2.ApplicationLoadBalancer(stack, 'ALB', {
47
+ vpc: cluster.vpc,
48
+ internetFacing: true,
49
+ securityGroup: lbSecurityGroup,
50
+ idleTimeout: cdk.Duration.seconds(60),
51
+ });
52
+
53
+ const listener = alb.addListener('ALBListener', {
54
+ port: 80,
55
+ defaultAction: elbv2.ListenerAction.fixedResponse(404),
56
+ open: false,
57
+ });
58
+
59
+ const prodListenerRule = new elbv2.ApplicationListenerRule(stack, 'ALBProductionListenerRule', {
60
+ listener: listener,
61
+ priority: 1,
62
+ conditions: [
63
+ elbv2.ListenerCondition.pathPatterns(['/*']),
64
+ ],
65
+ action: elbv2.ListenerAction.weightedForward([
66
+ {
67
+ targetGroup: blueTargetGroup,
68
+ weight: 100,
69
+ },
70
+ {
71
+ targetGroup: greenTargetGroup,
72
+ weight: 0,
73
+ },
74
+ ]),
75
+ });
76
+
77
+ const taskDefinition = new ecs.FargateTaskDefinition(stack, 'TaskDef', {
78
+ memoryLimitMiB: 512,
79
+ cpu: 256,
80
+ });
81
+
82
+ taskDefinition.addContainer('container', {
83
+ containerName: 'nginx',
84
+ image: ecs.ContainerImage.fromRegistry('public.ecr.aws/nginx/nginx:latest'),
85
+ portMappings: [{
86
+ name: 'api',
87
+ containerPort: 80,
88
+ appProtocol: ecs.AppProtocol.http,
89
+ }],
90
+ });
91
+
92
+ const service = new ecs.FargateService(stack, 'Service', {
93
+ cluster,
94
+ taskDefinition,
95
+ securityGroups: [ecsSecurityGroup],
96
+ deploymentStrategy: ecs.DeploymentStrategy.LINEAR,
97
+ linearConfiguration: {
98
+ stepPercent: 10.0,
99
+ stepBakeTime: cdk.Duration.minutes(5),
100
+ },
101
+ });
102
+
103
+ const target = service.loadBalancerTarget({
104
+ containerName: 'nginx',
105
+ containerPort: 80,
106
+ protocol: ecs.Protocol.TCP,
107
+ alternateTarget: new ecs.AlternateTarget('LBAlternateOptions', {
108
+ alternateTargetGroup: greenTargetGroup,
109
+ productionListener: ecs.ListenerRuleConfiguration.applicationListenerRule(prodListenerRule),
110
+ }),
111
+ });
112
+
113
+ target.attachToApplicationTargetGroup(blueTargetGroup);
114
+
115
+ new integ.IntegTest(app, 'aws-ecs-linear', {
116
+ testCases: [stack],
117
+ });
@@ -49,6 +49,7 @@ const fmiSecurityGroup = new ec2.SecurityGroup(stack, 'ManagedInstancesSecurityG
49
49
  // Create MI Capacity Provider
50
50
  const miCapacityProvider = new ecs.ManagedInstancesCapacityProvider(stack, 'ManagedInstancesCapacityProvider', {
51
51
  infrastructureRole: infrastructureRole,
52
+ capacityOptionType: ecs.CapacityOptionType.SPOT,
52
53
  ec2InstanceProfile: instanceProfile,
53
54
  subnets: vpc.privateSubnets,
54
55
  securityGroups: [fmiSecurityGroup],
@@ -32,27 +32,29 @@ Managed policies can be attached using `xxx.addManagedPolicy(ManagedPolicy.fromA
32
32
 
33
33
  ## Granting permissions to resources
34
34
 
35
- Many of the AWS CDK resources have `grant*` methods that allow you to grant other resources access to that resource. As an example, the following code gives a Lambda function write permissions (Put, Update, Delete) to a DynamoDB table.
35
+ Many of the AWS CDK resources have grant methods (accessible via the `grants` attribute) that allow you to grant other
36
+ resources access to that resource. As an example, the following code gives a Lambda function write permissions
37
+ (Put, Update, Delete) to a DynamoDB table.
36
38
 
37
39
  ```ts
38
40
  declare const fn: lambda.Function;
39
41
  declare const table: dynamodb.Table;
40
42
 
41
- table.grantWriteData(fn);
43
+ table.grants.writeData(fn);
42
44
  ```
43
45
 
44
- The more generic `grant` method allows you to give specific permissions to a resource:
46
+ The more generic `actions` method allows you to give specific permissions to a resource:
45
47
 
46
48
  ```ts
47
49
  declare const fn: lambda.Function;
48
50
  declare const table: dynamodb.Table;
49
51
 
50
- table.grant(fn, 'dynamodb:PutItem');
52
+ table.grants.actions(fn, 'dynamodb:PutItem');
51
53
  ```
52
54
 
53
- The `grant*` methods accept an `IGrantable` object. This interface is implemented by IAM principal resources (groups, users and roles), policies, managed policies and resources that assume a role such as a Lambda function, EC2 instance or a Codebuild project.
55
+ The grant methods accept an `IGrantable` object. This interface is implemented by IAM principal resources (groups, users and roles), policies, managed policies and resources that assume a role such as a Lambda function, EC2 instance or a Codebuild project.
54
56
 
55
- You can find which `grant*` methods exist for a resource in the [AWS CDK API Reference](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html).
57
+ You can find which grant methods exist for a resource in the [AWS CDK API Reference](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html).
56
58
 
57
59
  ## Roles
58
60
 
@@ -70,8 +72,8 @@ automatically if you associate the construct with other constructs from the
70
72
  AWS Construct Library (for example, if you tell an *AWS CodePipeline* to trigger
71
73
  an *AWS Lambda Function*, the Pipeline's Role will automatically get
72
74
  `lambda:InvokeFunction` permissions on that particular Lambda Function),
73
- or if you explicitly grant permissions using `grant` functions (see the
74
- previous section).
75
+ or if you explicitly grant permissions using the public methods in the
76
+ `RoleGrants` class (see the previous section).
75
77
 
76
78
  ### Opting out of automatic permissions management
77
79
 
@@ -186,7 +188,7 @@ const fn = new lambda.Function(this, 'MyLambda', {
186
188
  });
187
189
 
188
190
  const bucket = new s3.Bucket(this, 'Bucket');
189
- bucket.grantRead(fn);
191
+ bucket.grants.read(fn);
190
192
  ```
191
193
 
192
194
  The following report will be generated.
@@ -445,7 +447,8 @@ new iam.Role(this, 'Role', {
445
447
 
446
448
  ### Granting a principal permission to assume a role
447
449
 
448
- A principal can be granted permission to assume a role using `grantAssumeRole`.
450
+ A principal can be granted permission to assume a role using `assumeRole` from the `RoleGrants` class.
451
+ For convenience, an instance of this class is available via the `grants` attribute on the `Role` class.
449
452
 
450
453
  Note that this does not apply to service principals or account principals as they must be added to the role trust policy via `assumeRolePolicy`.
451
454
 
@@ -455,7 +458,7 @@ const role = new iam.Role(this, 'role', {
455
458
  assumedBy: new iam.AccountPrincipal(this.account)
456
459
  });
457
460
 
458
- role.grantAssumeRole(user);
461
+ role.grants.assumeRole(user);
459
462
  ```
460
463
 
461
464
  ### Granting service and account principals permission to assume a role
@@ -68,14 +68,14 @@ Or more conveniently, write permissions to the log group can be granted as follo
68
68
 
69
69
  ```ts
70
70
  const logGroup = new logs.LogGroup(this, 'LogGroup');
71
- logGroup.grantWrite(new iam.ServicePrincipal('es.amazonaws.com'));
71
+ logGroup.grants.write(new iam.ServicePrincipal('es.amazonaws.com'));
72
72
  ```
73
73
 
74
74
  Similarly, read permissions can be granted to the log group as follows.
75
75
 
76
76
  ```ts
77
77
  const logGroup = new logs.LogGroup(this, 'LogGroup');
78
- logGroup.grantRead(new iam.ServicePrincipal('es.amazonaws.com'));
78
+ logGroup.grants.read(new iam.ServicePrincipal('es.amazonaws.com'));
79
79
  ```
80
80
 
81
81
  Be aware that any ARNs or tokenized values passed to the resource policy will be converted into AWS Account IDs.
@@ -462,6 +462,19 @@ new logs.LogGroup(this, 'LogGroupLambda', {
462
462
  });
463
463
  ```
464
464
 
465
+ ## Configure Deletion Protection
466
+
467
+ Indicates whether deletion protection is enabled for this log group. When enabled, deletion protection blocks all deletion operations until it is explicitly disabled.
468
+
469
+ For more information, see [Protecting log groups from deletion](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/protecting-log-groups-from-deletion.html).
470
+
471
+ ```ts
472
+ new logs.LogGroup(this, 'LogGroup', {
473
+ deletionProtectionEnabled: true,
474
+ });
475
+ ```
476
+
477
+
465
478
  ## Field Index Policies
466
479
 
467
480
  Creates or updates a field index policy for the specified log group. You can use field index policies to create field indexes on fields found in log events in the log group. Creating field indexes lowers the costs for CloudWatch Logs Insights queries that reference those field indexes, because these queries attempt to skip the processing of log events that are known to not match the indexed field. Good fields to index are fields that you often need to query for and fields that have high cardinality of values.
@@ -0,0 +1,14 @@
1
+ import { App, Stack } from 'aws-cdk-lib';
2
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
3
+ import { LogGroup } from 'aws-cdk-lib/aws-logs';
4
+
5
+ const app = new App();
6
+ const stack = new Stack(app, 'aws-cdk-loggroup-grantreads-integ');
7
+
8
+ new LogGroup(stack, 'LogGroup', {
9
+ deletionProtectionEnabled: true,
10
+ });
11
+
12
+ new IntegTest(app, 'loggroup-grantreads', {
13
+ testCases: [stack],
14
+ });
@@ -61,14 +61,14 @@ myTopic.addSubscription(new subscriptions.SqsSubscription(queue));
61
61
  Note that subscriptions of queues in different accounts need to be manually confirmed by
62
62
  reading the initial message from the queue and visiting the link found in it.
63
63
 
64
- The `grantSubscribe` method adds a policy statement to the topic's resource policy, allowing the specified principal to perform the `sns:Subscribe` action.
64
+ The `topic.grants.subscribe` method adds a policy statement to the topic's resource policy, allowing the specified principal to perform the `sns:Subscribe` action.
65
65
  It's useful when you want to allow entities, such as another AWS account or resources created later, to subscribe to the topic at their own pace, separating permission granting from the actual subscription process.
66
66
 
67
67
  ```ts
68
68
  declare const accountPrincipal: iam.AccountPrincipal;
69
69
  const myTopic = new sns.Topic(this, 'MyTopic');
70
70
 
71
- myTopic.grantSubscribe(accountPrincipal);
71
+ myTopic.grants.subscribe(accountPrincipal);
72
72
  ```
73
73
 
74
74
  ### Filter policy
@@ -628,7 +628,7 @@ The Action can also be used as a Grantable after having been added to a Pipeline
628
628
  const action = new pipelines.ShellScriptAction({ /* ... */ });
629
629
  pipeline.addStage('Test').addActions(action);
630
630
 
631
- bucket.grantRead(action);
631
+ bucket.grants.read(action);
632
632
  ```
633
633
 
634
634
  #### Additional files from the source repository
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: konokenj.cdk-api-mcp-server
3
- Version: 0.69.0
3
+ Version: 0.71.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.234.1-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.235.1-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=1AdyPVvBDr8uMLAbq5RBTIbB9eTGSvNMg8Ofpr_fdpo,129
1
+ cdk_api_mcp_server/__about__.py,sha256=ELmDLx0jcVxvUyMP4Isrouontr0IHXk9V4M1xQJuxV0,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
@@ -9,7 +9,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/app-staging-synthesizer
9
9
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-amplify-alpha/README.md,sha256=OIdszebPa0EqMIaHhqWgH6A64AcwQioIKC-NHDyZKrI,12636
10
10
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-applicationsignals-alpha/README.md,sha256=6nqc-WbHB1iFE3vXDr6hyQs8tYS6wwnWutXePY4EF4w,10873
11
11
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-apprunner-alpha/README.md,sha256=Jtm3RbnP4jQy8BYXwHvaRbMKizUjr4SqvimVMYhu6WQ,11982
12
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-agentcore-alpha/README.md,sha256=tpJeJiIOCr4QM7iFE5p_fiqZRuzmTlrSO8l0de1MNcA,98682
12
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-agentcore-alpha/README.md,sha256=neg1NHrIY4VKi9XAIx-q7aKoeHKQvG2FckZsStXkOQg,104221
13
13
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-alpha/README.md,sha256=ZFThRraeK0rx1CF2foaEDzKsWxL1Qb9yqpCFM8eKvIo,65269
14
14
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-cloud9-alpha/README.md,sha256=0N8kldvHAKsNQHKtsj8PaQywiDUVrd6rEwVNQV0equY,7718
15
15
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-codestar-alpha/README.md,sha256=J-c-thqWwZFQT3Exjr_AY95BBgTA14Wb9aJ32gmEizQ,1509
@@ -17,7 +17,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-custom-resource-sdk
17
17
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-ec2-alpha/README.md,sha256=ZySzpPJ4eUj3ZJ_jWF6YFOX4J9a7F-GU3o6QT_zJggQ,36094
18
18
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-eks-v2-alpha/MANUAL_TEST.md,sha256=uObwqDllAUYBGkoNEAQGioL6JuKqh5ScVbq9KC3x89Q,1862
19
19
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-eks-v2-alpha/README.md,sha256=QaTmJ96HpXe5Iu32NOzqzHWi85jD73aCfo9Rks9za28,46202
20
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-elasticache-alpha/README.md,sha256=0Bss9XRUlJf4GBHCplxeliqotFICiL2yEPq7bI1H7rY,15213
20
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-elasticache-alpha/README.md,sha256=V2xDEBsWH7oxb4mO9I8Wfs74jzYqeUwxFpHp_N6NMtg,15215
21
21
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-gamelift-alpha/README.md,sha256=pZqlGXpIekT05CmRYo99QPI-7S1iGtKoNESGryLQFxQ,28324
22
22
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-glue-alpha/README.md,sha256=0DUUl5AU9qy-x3P4cCIStFMcav2hSQMwZuI3aTq9Q2Q,32235
23
23
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-imagebuilder-alpha/README.md,sha256=9Kc8-eJ5wjZBMZuXAvKbTn6gEHjEwT4AKJvknmxWtJU,56869
@@ -40,13 +40,13 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-redshift-alpha/READ
40
40
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-route53resolver-alpha/README.md,sha256=ceGv5PyLGU4OqdgW09YJtg_TQvjGbB31bV3z2JX1BoA,4086
41
41
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-s3objectlambda-alpha/README.md,sha256=GKYukniYNvgF14rUBtsKKsdzoJKi7uEhzZxw40YZRWA,3653
42
42
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-s3tables-alpha/README.md,sha256=F1LqyqAGnsf3dRt7fzOGKExMr3fmNVMeK3RpFvR9HIs,6280
43
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-sagemaker-alpha/README.md,sha256=UPoA10l8f_GepCwZf4SjysrVCifiWoBYXrb7i1Dp1Wg,11510
43
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-sagemaker-alpha/README.md,sha256=uiIOgibWBFKCX2VLUSoeGMGMnrMk3FwQue34ThlDSv8,12351
44
44
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-servicecatalogappregistry-alpha/README.md,sha256=HmOM14_-P6x_e0UoI1HQ1IbY375T1Pj-xS4rEL1zmdg,13655
45
45
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/cfnspec/README.md,sha256=nnoF99zdHuBLVTMCVB9k3-eLiqjS6XTETxnIi5hW0Y8,164
46
46
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/custom-resource-handlers/README.md,sha256=QctOoyGt6AqVWeFhRwpkCSxHZ1XFWj_nCKlkJHDFock,965
47
47
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/example-construct-library/README.md,sha256=vnVXyvtN9ICph68sw2y6gkdD_gmas0PiUa9TkwNckWQ,4501
48
48
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/integ-tests-alpha/README.md,sha256=VifKLrR404_yLVT0E3ai8f3R5K0h22VNwQplpSUSZqc,17489
49
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/mixins-preview/README.md,sha256=8mVA_3LB6T8h3abhZQNhbWteqk_ZcjWXvX2C5X_eOTg,9712
49
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/mixins-preview/README.md,sha256=EXijwUEfn9GyyBrfvxrRmovdNifT828FihwO1tanPdA,10182
50
50
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/README.md/README.md,sha256=fDaQqPonfLmfQpukU4aAJcjQI5xHI40D3Li0I056Q7s,76468
51
51
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/assertions/MIGRATING.md,sha256=SYGX8QNB1Pm_rVYDBp4QRWkqwnxOb3CHzeFglUy_53k,3347
52
52
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/assertions/README.md,sha256=3yo3D05n5explTIgnuF-vkk01MTYeAYe7_3rcsD2baE,18299
@@ -207,7 +207,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-autoscaling-hook
207
207
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-backup/README.md,sha256=fQ0VqirtiyA1y2P_jXCTojMGQyxO1r6S9WYk-ge29Zo,9640
208
208
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-backup/integ.backup-selection.ts,sha256=kaNB9DQen9nrE5Gj5XZkuP2LaAd53gndrPJGjjYwnaU,2160
209
209
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-backup/integ.backup.ts,sha256=amNqCqf3dCzUrxLBBKm0zSEbsS--h7BMSNQZ_b7sQ68,2473
210
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-batch/README.md,sha256=UTaFfYfuwOv1H1Xk1JyYHOKqU-N3qihxjmBtw0hKG_8,31289
210
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-batch/README.md,sha256=Ol-eiW74jmh0NLbUR1fQobAof4_Nr16ztbODlYAaaWY,32427
211
211
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-batch/integ.batch-unique-name.ts,sha256=3tirUUq3KUiJVTnz7dhtEYSmDlUoLb3azlP9wzFZR2k,1171
212
212
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-batch/integ.ecs-exec-batch-job.ts,sha256=srHnG37mt_2ePCp0xjle83_q2f8zIz81h8b6hlgjS1o,4984
213
213
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-batch/integ.ecs-job-definition.ts,sha256=KW_7UN8nM62AJ_GKM6CnsqTp5ONuBaxRs9MGEk7B6ho,3894
@@ -516,7 +516,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.t
516
516
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.table-v2-replica.ts,sha256=ZmN5tCVGuefUKdewkwcMC_vd1t8mYj0xowKTaAFq3P4,1613
517
517
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.table-v2.compound.ts,sha256=02z8ojStwkR4JEYiMHDD4VprWGuQQ2pKQMgq5_0rRmQ,1729
518
518
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.table-with-customized-role.ts,sha256=CDb1V4J2dg5-JCkFHBtF8wmMOoLaQ-6RDpZT9HnnTBg,2048
519
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/README.md,sha256=jANhDBCatQGIdQ2kpH9OJyCuWoFFkKj1XdrDqqsHxK8,103790
519
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/README.md,sha256=MCtJ9Y9RChPkFDoSaAw9xXfIHOMwOiNnBdC9Ju3WEB8,103792
520
520
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.bastion-host-arm-support.ts,sha256=zgJ4WxeOAsMmxDW_kgxCUw9-i-hGFeBRX3Xd0-EMuFI,786
521
521
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.bastion-host-disable-al2023-feature-flag.ts,sha256=9gX9xZZuubyUZxCAXqctMSymojJoh893yTgqD-Dfo-k,954
522
522
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.bastion-host-userdatacausesreplacement.ts,sha256=5Vv0q_dk3vtXkam1V9tvu6HcoIv-cUK9pwIHSZvX0ro,1377
@@ -602,7 +602,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr-assets/integ
602
602
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr-assets/integ.assets-tarball.ts,sha256=pSbNMWSorKT7lUTXxnzkxpcRumKPYWUmcbqRSwwWOgI,937
603
603
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecr-assets/integ.nested-stacks-docker.ts,sha256=4hDobse34oIG2r0mjbYXzsEXXLEqv077jUh3pjoYmcc,981
604
604
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/CONTRIBUTING.md,sha256=TlNwpeYemLdYq4jdo24v7nwDIj3RmZ7u2j_LCQiQR74,2634
605
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md,sha256=eNxPUEw6sENWR3HFnLgNAJ6w0xOKZNOE1tkcPavVMUA,84559
605
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md,sha256=YPVRivKcYqakbYLT5umv9BpbLI-4UL7HnJ8obDpmC8E,87794
606
606
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.add-docker-label.ts,sha256=avHktilCBVPuVelquVaY2ylRkSLraWn7vUIIIFPsbyI,1375
607
607
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.add-environment-variable.ts,sha256=sIdwJl7LYh5wlv_EDLPSGCavC2OF6W8IBwZ_hMOnCfw,1143
608
608
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.app-mesh-proxy-config.ts,sha256=qhtztZPppP98wdEneOEDI3p0P608q0DtS_Nv-6grLHM,1596
@@ -610,6 +610,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.availa
610
610
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.awslogs-driver.ts,sha256=js3ZnGoPKDVQl5NhZqF-acS5BTNeRkKWBjHUYVJkV0Q,1322
611
611
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.blue-green-deployment-strategy.ts,sha256=Rh8t4oub7rWxHATyTpwIbSjQwRAR8R8bpUXgAckK_mE,4222
612
612
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.bottlerocket.ts,sha256=pio8vLSNlFeokyocKepVUq1ZJXhhrC7iH2ZVJiJxatg,728
613
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.canary-deployment-strategy.ts,sha256=M05Nst_ZXx4KQQMcoI3lo5DIAMTd3LU87v4taHxJplI,3175
613
614
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.capacity-provider-managed-draining.ts,sha256=K_eRJ9thQNqqo1TrA_dOzgieYkuJnhGEbZQcR0hyBzo,1907
614
615
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.capacity-provider.ts,sha256=i4ybZBXakmn9EOHwGKidhqPDOZlkWQcRxVOt4QoOA_k,1514
615
616
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.capacity-providers.ts,sha256=1JfeuquUWRLNw-FThuQac5sePyc_j4Gjx5iNjV9cbZM,892
@@ -644,8 +645,9 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.gravit
644
645
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.graviton.ts,sha256=-L0L2_uXEpuszWK0FNPNErOVzYj6jLz_GN__t3-IUJo,719
645
646
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.lb-awsvpc-nw.ts,sha256=VGnwETVmq2owapn3crFeJ187sqNYjb1afkBcNZaRNzs,1813
646
647
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.lb-bridge-nw.ts,sha256=0nlq9ShB7EeFK-6OE6-id-5PCfhGaDf5snnzYNUnHCQ,1822
648
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.linear-deployment-strategy.ts,sha256=CjogKM6GaQu-5pqM-D2jTAd4FCJ_xS6MRTpqX24ma28,3175
647
649
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-capacity-provider-default-roles.ts,sha256=CuvR4P7pA9IYH_7SPDMMwXOeMyWlCkaaL4JBuuRLf0Y,2824
648
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-capacity-provider.ts,sha256=v15lSJEI71zG-MPupT3UeWM0bgvI-TWjwaX7dDvLNO0,3631
650
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-capacity-provider.ts,sha256=jTg1AnixydDXHiDyb28UIx0vhTcIvkCtE0jzvLiI1Wo,3682
649
651
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-no-default-capacity-provider.ts,sha256=2Fc943-G8gfENka_oSUmasxiA-qrTuget9URJhnSFa8,3330
650
652
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.nlb-awsvpc-nw.ts,sha256=vXdMwV8Ythm3Qa4cHX_mg0WjRESCMYe0GgA3tX_uqTk,1474
651
653
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.none-log-driver.ts,sha256=R_rAbncMvE7_vP397EaDSb0-e9C7_SXtGktw1l8i0lM,635
@@ -853,7 +855,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-globalaccelerato
853
855
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-globalaccelerator/integ.globalaccelerator-unique-name.ts,sha256=LO9qlrFoOyrqUbi1H_eufzIccMZntbEKPI_p3ODrK1Y,383
854
856
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-globalaccelerator-endpoints/README.md,sha256=ldPU_ydEQx_MPMu_3hTa9hc7JHLtjbnTIWGTvVOpUZA,407
855
857
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-globalaccelerator-endpoints/integ.globalaccelerator.ts,sha256=uk9vhUCdpJUJjWHwURRrPD7PexkbQJ8vBiVgK8PZBEw,2416
856
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-iam/README.md,sha256=mJ_z-HxZ9x2BOM3vgwKXHebIAz99Ov9flrO5-GdWwpU,33158
858
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-iam/README.md,sha256=9RqavBvcHfeQNv5_mlmchYMZvSTSL4BPowF6eTZ91Cg,33363
857
859
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-iam/integ.access-key.ts,sha256=22q0DLYwDlurvFK4sErOqJgVliGyz28Xa0TKqGXHrmI,508
858
860
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-iam/integ.composite-principal.ts,sha256=geaeoyLvnbbSc6qtwGbVur9frN_Ff4fgHNZG7Yah0Rk,624
859
861
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-iam/integ.condition-with-ref.ts,sha256=yqu0BUZ2WDmMnwO2XKaFhsji4Cp_sqCDolDnDCfcHWw,925
@@ -991,13 +993,14 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/in
991
993
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/integ.modules.ts,sha256=etsjdg80JJb_gag1tC0I2DgOcARVOCrRZsQYr46sQv0,2323
992
994
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/integ.nodejs.build.images.ts,sha256=6gF-Mb9LgF8E5PpGwkBmaWqepqEqzbTuSpnnqKZ1_sU,1721
993
995
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda-nodejs/integ.specifycode.ts,sha256=JdlBTKpPf5xlQlfTYlXUMbMVwGD0a-heEYPx0ZNFO9U,1938
994
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/README.md,sha256=_JHu8-Ff-ib19WShFFPnEBy-LDPsRq1aiixJEg37fIk,24587
996
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/README.md,sha256=BLjCjO2f3UOQdfF7uQdP-gv_lpBP2T_BZD0nYNxCjEE,25047
995
997
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.expose-metric.ts,sha256=nHHNSRyq2eGVZkZe1_UWwdr7vWnBDqdMWoiArzJleHI,1256
996
998
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-group-metrics.ts,sha256=3t37idu5s4B6dxhZWD_7pNeue7eJCume6MdEgtc1TTs,707
997
999
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-group.ts,sha256=ffml_7GAfXAFSr_qqzrBZ08eG_ZhLS1T-8d-hdsxNf4,1312
998
1000
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-resource-policy-any-principal.ts,sha256=koq7lWWdsPm9OJjkE6EWIiKZaEEuUhvQckp-7yIaqEo,829
999
1001
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-retention-retries.ts,sha256=b3uLWuEZZeOOkwno6y3yBFVT6AbcX9z1VITcyupKnfQ,1336
1000
1002
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.log-retention.ts,sha256=KPWCfAezyRQ9KZR88gbnsIb9TUrjjUYLDMDjFc54XvU,900
1003
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroup-deletionprotection.ts,sha256=Dm6vqjQDHA6P6cCWFsxpv3Dm8ML58FGrX34BdnFWrfI,383
1001
1004
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroup-grantread.ts,sha256=3Gjcq80bm6qeqjTmq_rbVVYvbWDTLkGWFclh3_XLY2Q,491
1002
1005
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroup-transformer.ts,sha256=2DmUNPzqW5FOnYRckyW74XKJwbubhc2gdIT2YhUoi9E,1271
1003
1006
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/integ.loggroupclass.ts,sha256=ZiJznICcvepDPf97FzReAD5l9FTnWtL6RsNw1cQABgg,2001
@@ -1256,7 +1259,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ses-actions/READ
1256
1259
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ses-actions/integ.actions.ts,sha256=9SId0tGcEo_AP0hXSzfzFNKkl0uBBrSMjc63U4mmCy8,3454
1257
1260
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-signer/README.md,sha256=NuFag3Zu8HNFn_RMoyzge9Lykhs7RE_dYEdwNWe9oL0,1833
1258
1261
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-signer/integ.signing-profile.ts,sha256=xDR4nUdfDs-rUfOr_IHsHKwxWPVCYY99ZEgxj4bsrs8,790
1259
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-sns/README.md,sha256=NfbaWP-hP8Htr4JeIHjNsv3JKHPfC6AsX4KNvXPfasA,11103
1262
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-sns/README.md,sha256=BYeHqkFabyDI4FxlJtivVhCVq7jfn693NPkiEo3S47Y,11113
1260
1263
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-sns/integ.sns-fifo-archive-policy.ts,sha256=GyvuMcAc7bJSwBNEOrT6Qlkp63wT9pLsiNE2gKU99ZE,579
1261
1264
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-sns/integ.sns-fifo-throughput-scope.ts,sha256=mRUcBRdBXyaTAsMnMm3OUNQRbNzkcHIOFQ4csRF_FLc,732
1262
1265
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-sns/integ.sns-fifo.no-name.ts,sha256=AgewawtcfBcxfwZG3O_Aix3FWHIB1szO5u9oIl4l8aQ,352
@@ -1463,7 +1466,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-awscli/
1463
1466
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-kubectl/integ.kubectl-layer.ts,sha256=lp8Jv0sePcfotHCAspdtoqZVgAWhha9hciDVI5w6Ps4,1513
1464
1467
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-node-proxy-agent/README.md,sha256=eWYOUl_BRExsSMY1mzF5V1oGsCuxVR-6MSIuapbOS4Y,632
1465
1468
  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
1466
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/ORIGINAL_API.md,sha256=JUo88_SWhqnKC3ObhkMwGTNOma-BniqBMhoBnxpifE4,26756
1469
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/ORIGINAL_API.md,sha256=McSbYx7QKEfhdahTRYvWBbnHHsGmLO7glGtaKYHPX9w,26758
1467
1470
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/README.md,sha256=UEyWH7ey2xFDUNla-gNh7-zm081fRRJhkTw9pnK6Ozc,71588
1468
1471
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.cross-account-pipeline-action.ts,sha256=A18UXJLsi5tyYfCp4Dw6SxI1Vk5JikNX1F0NbfEnICw,4804
1469
1472
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.newpipeline-reduce-stagerole-scope.ts,sha256=YTTB_Vo8WqHM9Q12ARHyeLQfIyrvE8qGJ-c8Ac8Rx2c,2637
@@ -1486,8 +1489,8 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.pipe
1486
1489
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/region-info/README.md,sha256=vewWkV3ds9o9iyyYaJBNTkaKJ2XA6K2yF17tAxUnujg,2718
1487
1490
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/README.md,sha256=hYIx7DbG_7p4LYLUfxDwgIQjw9UNdz1GLrqDe8_Dbko,4132
1488
1491
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/integ.triggers.ts,sha256=LfeVru_CggiFXKPVa8vwt6Uv43SV3oAioDGmd8PyMHc,2859
1489
- konokenj_cdk_api_mcp_server-0.69.0.dist-info/METADATA,sha256=UfU33RGhkSEmPfxWJfxGZz-_kG-D4jd9PJ1ItHiHQck,2646
1490
- konokenj_cdk_api_mcp_server-0.69.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
1491
- konokenj_cdk_api_mcp_server-0.69.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1492
- konokenj_cdk_api_mcp_server-0.69.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1493
- konokenj_cdk_api_mcp_server-0.69.0.dist-info/RECORD,,
1492
+ konokenj_cdk_api_mcp_server-0.71.0.dist-info/METADATA,sha256=db6fYQgN-LZstHtQQSfe_ZVp6UVHFX4-G48bfMlnsEs,2646
1493
+ konokenj_cdk_api_mcp_server-0.71.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
1494
+ konokenj_cdk_api_mcp_server-0.71.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1495
+ konokenj_cdk_api_mcp_server-0.71.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1496
+ konokenj_cdk_api_mcp_server-0.71.0.dist-info/RECORD,,