konokenj.cdk-api-mcp-server 0.50.0__py3-none-any.whl → 0.51.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 (19) 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 +2 -2
  3. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-msk-alpha/README.md +30 -0
  4. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-elastic-beanstalk-deploy.ts +4 -1
  5. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/README.md +53 -0
  6. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.add-to-resource-policy.ts +80 -0
  7. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.policy.ts +21 -1
  8. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-flow-logs.ts +4 -0
  9. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/README.md +34 -4
  10. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.nlb.security-group.ts +70 -0
  11. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/README.md +22 -0
  12. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.firehose-delivery-stream.ts +51 -0
  13. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +23 -4
  14. {konokenj_cdk_api_mcp_server-0.50.0.dist-info → konokenj_cdk_api_mcp_server-0.51.0.dist-info}/METADATA +2 -2
  15. {konokenj_cdk_api_mcp_server-0.50.0.dist-info → konokenj_cdk_api_mcp_server-0.51.0.dist-info}/RECORD +18 -16
  16. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.kinesis-firehose-stream.ts +0 -33
  17. {konokenj_cdk_api_mcp_server-0.50.0.dist-info → konokenj_cdk_api_mcp_server-0.51.0.dist-info}/WHEEL +0 -0
  18. {konokenj_cdk_api_mcp_server-0.50.0.dist-info → konokenj_cdk_api_mcp_server-0.51.0.dist-info}/entry_points.txt +0 -0
  19. {konokenj_cdk_api_mcp_server-0.50.0.dist-info → konokenj_cdk_api_mcp_server-0.51.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.50.0"
4
+ __version__ = "0.51.0"
@@ -115,9 +115,9 @@ const runtime = new agentcore.Runtime(this, "MyAgentRuntime", {
115
115
 
116
116
  To grant the runtime permission to invoke a Bedrock model or inference profile:
117
117
 
118
- ```text
118
+ ```typescript fixture=default
119
119
  // Note: This example uses @aws-cdk/aws-bedrock-alpha which must be installed separately
120
- import * as bedrock from '@aws-cdk/aws-bedrock-alpha';
120
+ declare const runtime: agentcore.Runtime;
121
121
 
122
122
  // Create a cross-region inference profile for Claude 3.7 Sonnet
123
123
  const inferenceProfile = bedrock.CrossRegionInferenceProfile.fromConfig({
@@ -232,6 +232,36 @@ const cluster = new msk.Cluster(this, 'cluster', {
232
232
  });
233
233
  ```
234
234
 
235
+ ## MSK Express Brokers
236
+
237
+ You can create an MSK cluster with Express Brokers by setting the `brokerType` property to `BrokerType.EXPRESS`. Express Brokers are a low-cost option for development, testing, and workloads that don't require the high availability guarantees of standard MSK cluster.
238
+ For more information, see [Amazon MSK Express Brokers](https://docs.aws.amazon.com/msk/latest/developerguide/msk-broker-types-express.html).
239
+
240
+ **Note:** When using Express Brokers, the following constraints apply:
241
+
242
+ - Apache Kafka version must be 3.6.x or 3.8.x
243
+ - You must specify the `instanceType`
244
+ - The VPC must have at least 3 subnets (across 3 AZs)
245
+ - `ebsStorageInfo` is not supported
246
+ - `storageMode` is not supported
247
+ - `logging` is not supported
248
+ - Supported broker sizes: `m7g.xlarge`, `m7g.2xlarge`, `m7g.4xlarge`, `m7g.8xlarge`, `m7g.12xlarge`, `m7g.16xlarge`
249
+
250
+ ```ts
251
+ declare const vpc: ec2.Vpc;
252
+
253
+ const expressCluster = new msk.Cluster(this, 'ExpressCluster', {
254
+ clusterName: 'MyExpressCluster',
255
+ kafkaVersion: msk.KafkaVersion.V3_8_X,
256
+ vpc,
257
+ brokerType: msk.BrokerType.EXPRESS,
258
+ instanceType: ec2.InstanceType.of(
259
+ ec2.InstanceClass.M7G,
260
+ ec2.InstanceSize.XLARGE,
261
+ ),
262
+ });
263
+ ```
264
+
235
265
  ## MSK Serverless
236
266
 
237
267
  You can also use MSK Serverless by using `ServerlessCluster` class.
@@ -5,7 +5,7 @@ import * as iam from 'aws-cdk-lib/aws-iam';
5
5
  import { IManagedPolicy, ManagedPolicyReference } from 'aws-cdk-lib/aws-iam';
6
6
  import * as s3 from 'aws-cdk-lib/aws-s3';
7
7
  import * as deploy from 'aws-cdk-lib/aws-s3-deployment';
8
- import { App, Fn, RemovalPolicy, Stack, UnscopedValidationError } from 'aws-cdk-lib';
8
+ import { App, Fn, RemovalPolicy, ResourceEnvironment, Stack, UnscopedValidationError } from 'aws-cdk-lib';
9
9
  import * as integ from '@aws-cdk/integ-tests-alpha';
10
10
  import * as cpactions from 'aws-cdk-lib/aws-codepipeline-actions';
11
11
  import { Node } from 'constructs';
@@ -56,6 +56,9 @@ function makePolicy(arn: string): IManagedPolicy {
56
56
  get node(): Node {
57
57
  throw new UnscopedValidationError('The result of fromAwsManagedPolicyName can not be used in this API');
58
58
  },
59
+ get env(): ResourceEnvironment {
60
+ throw new UnscopedValidationError('The result of fromAwsManagedPolicyName can not be used in this API');
61
+ },
59
62
  };
60
63
  }
61
64
 
@@ -816,6 +816,59 @@ Using `resourcePolicy` you can add a [resource policy](https://docs.aws.amazon.c
816
816
  });
817
817
  ```
818
818
 
819
+ ### Adding Resource Policy Statements Dynamically
820
+
821
+ You can also add resource policy statements to a table after it's created using the `addToResourcePolicy` method. Following the same pattern as KMS, resource policies use wildcard resources to avoid circular dependencies:
822
+
823
+ ```ts
824
+ const table = new dynamodb.TableV2(this, 'Table', {
825
+ partitionKey: { name: 'pk', type: dynamodb.AttributeType.STRING },
826
+ });
827
+
828
+ // Standard resource policy (recommended approach)
829
+ table.addToResourcePolicy(new iam.PolicyStatement({
830
+ actions: ['dynamodb:GetItem', 'dynamodb:PutItem', 'dynamodb:Query'],
831
+ principals: [new iam.AccountRootPrincipal()],
832
+ resources: ['*'], // Wildcard avoids circular dependency - same pattern as KMS
833
+ }));
834
+
835
+ // Allow specific service access
836
+ table.addToResourcePolicy(new iam.PolicyStatement({
837
+ actions: ['dynamodb:Query'],
838
+ principals: [new iam.ServicePrincipal('lambda.amazonaws.com')],
839
+ resources: ['*'],
840
+ }));
841
+ ```
842
+
843
+ #### Scoped Resource Policies (Advanced)
844
+
845
+ For scoped resource policies that reference specific table ARNs, you must specify an explicit table name:
846
+
847
+ ```ts
848
+ import { Fn } from 'aws-cdk-lib';
849
+
850
+ // Table with explicit name enables scoped resource policies
851
+ const table = new dynamodb.TableV2(this, 'Table', {
852
+ tableName: 'my-explicit-table-name', // Required for scoped resources
853
+ partitionKey: { name: 'pk', type: dynamodb.AttributeType.STRING },
854
+ });
855
+
856
+ // Now you can use scoped resources
857
+ table.addToResourcePolicy(new iam.PolicyStatement({
858
+ actions: ['dynamodb:GetItem'],
859
+ principals: [new iam.AccountRootPrincipal()],
860
+ resources: [
861
+ Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/my-explicit-table-name'),
862
+ Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/my-explicit-table-name/index/*'),
863
+ ],
864
+ }));
865
+ ```
866
+
867
+ **Important Limitations:**
868
+ - **Auto-generated table names**: Must use `resources: ['*']` to avoid circular dependencies
869
+ - **Explicit table names**: Enable scoped resources but lose CDK's automatic naming benefits
870
+ - **CloudFormation constraint**: Resource policies cannot reference the resource they're attached to during creation
871
+
819
872
  TableV2 doesn’t support creating a replica and adding a resource-based policy to that replica in the same stack update in Regions other than the Region where you deploy the stack update.
820
873
  To incorporate a resource-based policy into a replica, you'll need to initially deploy the replica without the policy, followed by a subsequent update to include the desired policy.
821
874
 
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Integration test for DynamoDB Table.addToResourcePolicy() method
3
+ *
4
+ * This test validates the fix for issue #35062: "(aws-dynamodb): `addToResourcePolicy` has no effect"
5
+ *
6
+ * WHAT WE'RE TESTING:
7
+ * - The addToResourcePolicy() method was broken - it had "no effect" when called
8
+ * - Resource policies weren't being added to the CloudFormation template
9
+ * - This created a security gap where developers thought they were securing tables but policies weren't applied
10
+ *
11
+ * TEST VALIDATION:
12
+ * 1. Creates DynamoDB tables with different resource policy configurations
13
+ * 2. Tests both wildcard resources (for auto-generated names) and scoped resources (for explicit names)
14
+ * 3. Verifies policies get added to CloudFormation templates with correct structure
15
+ * 4. Ensures both patterns work without circular dependencies
16
+ *
17
+ * @see https://github.com/aws/aws-cdk/issues/35062
18
+ */
19
+
20
+ import { App, Fn, RemovalPolicy, Stack, StackProps } from 'aws-cdk-lib';
21
+ import { Construct } from 'constructs';
22
+ import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
23
+ import * as iam from 'aws-cdk-lib/aws-iam';
24
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
25
+
26
+ export class TestStack extends Stack {
27
+ public readonly wildcardTable: dynamodb.Table;
28
+ public readonly scopedTable: dynamodb.Table;
29
+
30
+ constructor(scope: Construct, id: string, props?: StackProps) {
31
+ super(scope, id, props);
32
+
33
+ // TEST 1: Table with wildcard resource policy (auto-generated name)
34
+ // This is the standard pattern to avoid circular dependencies
35
+ this.wildcardTable = new dynamodb.Table(this, 'WildcardTable', {
36
+ partitionKey: {
37
+ name: 'id',
38
+ type: dynamodb.AttributeType.STRING,
39
+ },
40
+ removalPolicy: RemovalPolicy.DESTROY,
41
+ });
42
+
43
+ // Add resource policy with wildcard resources
44
+ this.wildcardTable.addToResourcePolicy(new iam.PolicyStatement({
45
+ actions: ['dynamodb:GetItem', 'dynamodb:PutItem', 'dynamodb:Query'],
46
+ principals: [new iam.AccountRootPrincipal()],
47
+ resources: ['*'], // Use wildcard to avoid circular dependency - standard pattern for resource policies
48
+ }));
49
+
50
+ // TEST 2: Table with scoped resource policy (explicit table name)
51
+ // This demonstrates how to use scoped resources when table name is known at synthesis time
52
+ this.scopedTable = new dynamodb.Table(this, 'ScopedTable', {
53
+ tableName: 'my-explicit-scoped-table', // Explicit name enables scoped ARN construction
54
+ partitionKey: {
55
+ name: 'id',
56
+ type: dynamodb.AttributeType.STRING,
57
+ },
58
+ removalPolicy: RemovalPolicy.DESTROY,
59
+ });
60
+
61
+ // Add resource policy with properly scoped resource using explicit table name
62
+ // This works because table name is known at synthesis time (no circular dependency)
63
+ this.scopedTable.addToResourcePolicy(new iam.PolicyStatement({
64
+ actions: ['dynamodb:GetItem', 'dynamodb:Query'],
65
+ principals: [new iam.AccountRootPrincipal()],
66
+ // Use CloudFormation intrinsic function to construct table ARN with known table name
67
+ resources: [Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/my-explicit-scoped-table')],
68
+ }));
69
+ }
70
+ }
71
+
72
+ // Test Setup
73
+ const app = new App();
74
+ const stack = new TestStack(app, 'add-to-resource-policy-test-stack');
75
+
76
+ // Integration Test Configuration
77
+ new IntegTest(app, 'add-to-resource-policy-integ-test', {
78
+ testCases: [stack],
79
+ });
80
+
@@ -38,7 +38,27 @@ export class TestStack extends Stack {
38
38
  removalPolicy: RemovalPolicy.DESTROY,
39
39
  });
40
40
 
41
- this.tableTwo.grantReadData(new iam.AccountPrincipal('123456789012'));
41
+ // IMPORTANT: Cross-account grants with auto-generated table names create circular dependencies
42
+ //
43
+ // WHY NOT this.tableTwo.grantReadData(new iam.AccountPrincipal('123456789012'))?
44
+ // - Cross-account principals cannot have policies attached to them
45
+ // - Grant falls back to adding a resource policy to the table
46
+ // - Resource policy tries to reference this.tableArn (the table's own ARN)
47
+ // - This creates a circular dependency: Table → ResourcePolicy → Table ARN → Table
48
+ // - CloudFormation fails with "Circular dependency between resources"
49
+ //
50
+ // SOLUTIONS:
51
+ // 1. Use addToResourcePolicy with wildcard resources (this approach)
52
+ // 2. Use explicit table names: tableName: 'my-table-name' (enables scoped resources)
53
+ // 3. Use same-account principals (grants go to principal policy, not resource policy)
54
+ //
55
+ this.tableTwo.addToResourcePolicy(new iam.PolicyStatement({
56
+ actions: ['dynamodb:*'],
57
+ // we need a valid account for cross-account principal otherwise it won't deploy
58
+ // this account is from fact-table.ts
59
+ principals: [new iam.AccountPrincipal('127311923021')],
60
+ resources: ['*'], // Wildcard avoids circular dependency - same pattern as KMS
61
+ }));
42
62
  }
43
63
  }
44
64
 
@@ -72,6 +72,10 @@ class TestStack extends Stack {
72
72
  destination: FlowLogDestination.toS3(),
73
73
  });
74
74
 
75
+ vpc.addFlowLog('FlowLogsCloudwatch', {
76
+ destination: FlowLogDestination.toCloudWatchLogs(),
77
+ });
78
+
75
79
  const bucket = new s3.Bucket(this, 'Bucket', {
76
80
  removalPolicy: RemovalPolicy.DESTROY,
77
81
  autoDeleteObjects: true,
@@ -338,17 +338,13 @@ Balancers:
338
338
  ```ts
339
339
  declare const vpc: ec2.Vpc;
340
340
  declare const asg: autoscaling.AutoScalingGroup;
341
- declare const sg1: ec2.ISecurityGroup;
342
- declare const sg2: ec2.ISecurityGroup;
343
341
 
344
342
  // Create the load balancer in a VPC. 'internetFacing' is 'false'
345
343
  // by default, which creates an internal load balancer.
346
344
  const lb = new elbv2.NetworkLoadBalancer(this, 'LB', {
347
345
  vpc,
348
346
  internetFacing: true,
349
- securityGroups: [sg1],
350
347
  });
351
- lb.addSecurityGroup(sg2);
352
348
 
353
349
  // Add a listener on a particular port.
354
350
  const listener = lb.addListener('Listener', {
@@ -362,6 +358,40 @@ listener.addTargets('AppFleet', {
362
358
  });
363
359
  ```
364
360
 
361
+ ### Security Groups for Network Load Balancer
362
+
363
+ By default, Network Load Balancers (NLB) have a security group associated with them.
364
+ This is controlled by the feature flag `@aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault`.
365
+ When this flag is enabled (the default for new projects), a security group will be automatically created and attached to the NLB unless you explicitly provide your own security groups via the `securityGroups` property.
366
+
367
+ If you wish to create an NLB without any security groups, you can set the `disableSecurityGroups` property to `true`. When this property is set, no security group will be associated with the NLB, regardless of the feature flag.
368
+
369
+ ```ts
370
+ declare const vpc: ec2.IVpc;
371
+
372
+ const nlb = new elbv2.NetworkLoadBalancer(this, 'LB', {
373
+ vpc,
374
+ // To disable security groups for this NLB
375
+ disableSecurityGroups: true,
376
+ });
377
+ ```
378
+
379
+ If you want to use your own security groups, provide them via the `securityGroups` property:
380
+
381
+ ```ts
382
+ declare const vpc: ec2.IVpc;
383
+ declare const sg1: ec2.ISecurityGroup;
384
+ declare const sg2: ec2.ISecurityGroup;
385
+
386
+ const nlb = new elbv2.NetworkLoadBalancer(this, 'LB', {
387
+ vpc,
388
+ // Provide your own security groups
389
+ securityGroups: [sg1],
390
+ });
391
+ // Add another security group to the NLB
392
+ nlb.addSecurityGroup(sg2);
393
+ ```
394
+
365
395
  ### Enforce security group inbound rules on PrivateLink traffic for a Network Load Balancer
366
396
 
367
397
  You can indicate whether to evaluate inbound security group rules for traffic
@@ -0,0 +1,70 @@
1
+ import { ExpectedResult, IntegTest, Match } from '@aws-cdk/integ-tests-alpha';
2
+ import { Stack, aws_ec2 as ec2, aws_elasticloadbalancingv2 as elbv2, App } from 'aws-cdk-lib';
3
+ import { Construct } from 'constructs';
4
+
5
+ class TestStack extends Stack {
6
+ public readonly lbWithSg: elbv2.NetworkLoadBalancer;
7
+ public readonly lbWithSg2: elbv2.NetworkLoadBalancer;
8
+ public readonly lbWithoutSg: elbv2.NetworkLoadBalancer;
9
+
10
+ constructor(scope: Construct, id: string) {
11
+ super(scope, id);
12
+
13
+ const vpc = new ec2.Vpc(this, 'Stack', {
14
+ maxAzs: 1,
15
+ natGateways: 0,
16
+ });
17
+
18
+ this.lbWithSg = new elbv2.NetworkLoadBalancer(this, 'NlbWithSecurityGroup', {
19
+ vpc,
20
+ });
21
+ this.lbWithSg2 = new elbv2.NetworkLoadBalancer(this, 'NlbWithSecurityGroup2', {
22
+ vpc,
23
+ securityGroups: [new ec2.SecurityGroup(this, 'SecurityGroup', {
24
+ vpc,
25
+ allowAllOutbound: true,
26
+ })],
27
+ });
28
+ this.lbWithSg.connections.allowTo(this.lbWithSg2, ec2.Port.tcp(1229));
29
+ this.lbWithoutSg = new elbv2.NetworkLoadBalancer(this, 'NlbWithoutSecurityGroup', {
30
+ vpc,
31
+ disableSecurityGroups: true,
32
+ });
33
+ }
34
+ }
35
+
36
+ const app = new App({
37
+ postCliContext: {
38
+ '@aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault': true,
39
+ },
40
+ });
41
+ const stack = new TestStack(app, 'NlbSecurityGroupStack');
42
+ const integ = new IntegTest(app, 'NlbSecurityGroupInteg', {
43
+ testCases: [stack],
44
+ });
45
+ integ.assertions.awsApiCall('elastic-load-balancing-v2', 'describeLoadBalancers', {
46
+ LoadBalancerArns: [
47
+ stack.lbWithSg.loadBalancerArn,
48
+ stack.lbWithSg2.loadBalancerArn,
49
+ stack.lbWithoutSg.loadBalancerArn,
50
+ ],
51
+ }).expect(ExpectedResult.objectLike({
52
+ LoadBalancers: [
53
+ Match.objectLike({
54
+ LoadBalancerArn: stack.lbWithSg.loadBalancerArn,
55
+ SecurityGroups: Match.arrayWith([
56
+ Match.stringLikeRegexp('sg-[0-9a-f]{8,17}'),
57
+ ]),
58
+ }),
59
+ Match.objectLike({
60
+ LoadBalancerArn: stack.lbWithSg2.loadBalancerArn,
61
+ SecurityGroups: Match.arrayWith([
62
+ Match.stringLikeRegexp('sg-[0-9a-f]{8,17}'),
63
+ ]),
64
+ }),
65
+ Match.objectLike({
66
+ LoadBalancerArn: stack.lbWithoutSg.loadBalancerArn,
67
+ SecurityGroups: undefined,
68
+ }),
69
+ ],
70
+ }));
@@ -19,6 +19,7 @@ Currently supported are:
19
19
  - [Invoke an API Destination](#invoke-an-api-destination)
20
20
  - [Invoke an AppSync GraphQL API](#invoke-an-appsync-graphql-api)
21
21
  - [Put an event on an EventBridge bus](#put-an-event-on-an-eventbridge-bus)
22
+ - [Put an event on a Firehose delivery stream](#put-an-event-on-a-firehose-delivery-stream)
22
23
  - [Run an ECS Task](#run-an-ecs-task)
23
24
  - [Tagging Tasks](#tagging-tasks)
24
25
  - [Launch type for ECS Task](#launch-type-for-ecs-task)
@@ -528,6 +529,27 @@ rule.addTarget(new targets.EventBus(
528
529
  ));
529
530
  ```
530
531
 
532
+ ## Put an event on a Firehose delivery stream
533
+
534
+ Use the `FirehoseDeliveryStream` target to put event to an Amazon Data Firehose delivery stream.
535
+
536
+ The code snippet below creates the scheduled event rule that put events to an Amazon Data Firehose delivery stream.
537
+
538
+ ```ts
539
+ import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
540
+ import * as s3 from 'aws-cdk-lib/aws-s3';
541
+
542
+ declare const bucket: s3.Bucket;
543
+ const stream = new firehose.DeliveryStream(this, 'DeliveryStream', {
544
+ destination: new firehose.S3Bucket(bucket),
545
+ });
546
+
547
+ const rule = new events.Rule(this, 'Rule', {
548
+ schedule: events.Schedule.expression('rate(1 minute)'),
549
+ });
550
+ rule.addTarget(new targets.FirehoseDeliveryStream(stream));
551
+ ```
552
+
531
553
  ## Run an ECS Task
532
554
 
533
555
  Use the `EcsTask` target to run an ECS Task.
@@ -0,0 +1,51 @@
1
+ import * as events from 'aws-cdk-lib/aws-events';
2
+ import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
3
+ import * as s3 from 'aws-cdk-lib/aws-s3';
4
+ import * as cdk from 'aws-cdk-lib';
5
+ import * as targets from 'aws-cdk-lib/aws-events-targets';
6
+ import { IntegTest, ExpectedResult, AwsApiCall } from '@aws-cdk/integ-tests-alpha';
7
+
8
+ // ---------------------------------
9
+ // Define a rule that triggers a put to a Firehose delivery stream every 1min.
10
+
11
+ const app = new cdk.App();
12
+
13
+ const stack = new cdk.Stack(app, 'aws-cdk-firehose-event-target');
14
+
15
+ const bucket = new s3.Bucket(stack, 'firehose-bucket', {
16
+ autoDeleteObjects: true,
17
+ removalPolicy: cdk.RemovalPolicy.DESTROY,
18
+ });
19
+ const deliveryStream = new firehose.DeliveryStream(stack, 'MyDeliveryStream', {
20
+ destination: new firehose.S3Bucket(bucket, {
21
+ bufferingInterval: cdk.Duration.seconds(30),
22
+ }),
23
+ });
24
+
25
+ const event = new events.Rule(stack, 'EveryMinute', {
26
+ schedule: events.Schedule.rate(cdk.Duration.minutes(1)),
27
+ });
28
+
29
+ event.addTarget(new targets.FirehoseDeliveryStream(deliveryStream));
30
+
31
+ const testCase = new IntegTest(app, 'firehose-event-target-integ', {
32
+ testCases: [stack],
33
+ });
34
+
35
+ const s3ApiCall = testCase.assertions.awsApiCall('S3', 'listObjectsV2', {
36
+ Bucket: bucket.bucketName,
37
+ MaxKeys: 1,
38
+ }).expect(ExpectedResult.objectLike({
39
+ KeyCount: 1,
40
+ })).waitForAssertions({
41
+ interval: cdk.Duration.seconds(30),
42
+ totalTimeout: cdk.Duration.minutes(10),
43
+ });
44
+
45
+ if (s3ApiCall instanceof AwsApiCall) {
46
+ s3ApiCall.waiterProvider?.addToRolePolicy({
47
+ Effect: 'Allow',
48
+ Action: ['s3:GetObject', 's3:ListBucket'],
49
+ Resource: ['*'],
50
+ });
51
+ }
@@ -107,8 +107,9 @@ Flags come in three types:
107
107
  | [@aws-cdk/core:explicitStackTags](#aws-cdkcoreexplicitstacktags) | When enabled, stack tags need to be assigned explicitly on a Stack. | 2.205.0 | new default |
108
108
  | [@aws-cdk/aws-signer:signingProfileNamePassedToCfn](#aws-cdkaws-signersigningprofilenamepassedtocfn) | Pass signingProfileName to CfnSigningProfile | 2.212.0 | fix |
109
109
  | [@aws-cdk/aws-ecs-patterns:secGroupsDisablesImplicitOpenListener](#aws-cdkaws-ecs-patternssecgroupsdisablesimplicitopenlistener) | Disable implicit openListener when custom security groups are provided | 2.214.0 | new default |
110
- | [@aws-cdk/aws-ecs-patterns:uniqueTargetGroupId](#aws-cdkaws-ecs-patternsuniquetargetgroupid) | When enabled, ECS patterns will generate unique target group IDs to prevent conflicts during load balancer replacement | V2NEXT | fix |
111
- | [@aws-cdk/aws-stepfunctions-tasks:httpInvokeDynamicJsonPathEndpoint](#aws-cdkaws-stepfunctions-taskshttpinvokedynamicjsonpathendpoint) | When enabled, allows using a dynamic apiEndpoint with JSONPath format in HttpInvoke tasks. | V2NEXT | fix |
110
+ | [@aws-cdk/aws-ecs-patterns:uniqueTargetGroupId](#aws-cdkaws-ecs-patternsuniquetargetgroupid) | When enabled, ECS patterns will generate unique target group IDs to prevent conflicts during load balancer replacement | 2.221.0 | fix |
111
+ | [@aws-cdk/aws-stepfunctions-tasks:httpInvokeDynamicJsonPathEndpoint](#aws-cdkaws-stepfunctions-taskshttpinvokedynamicjsonpathendpoint) | When enabled, allows using a dynamic apiEndpoint with JSONPath format in HttpInvoke tasks. | 2.221.0 | fix |
112
+ | [@aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault](#aws-cdkaws-elasticloadbalancingv2networkloadbalancerwithsecuritygroupbydefault) | When enabled, Network Load Balancer will be created with a security group by default. | V2NEXT | new default |
112
113
 
113
114
  <!-- END table -->
114
115
 
@@ -200,6 +201,7 @@ The following json shows the current recommended set of flags, as `cdk init` wou
200
201
  "@aws-cdk/aws-ec2:requirePrivateSubnetsForEgressOnlyInternetGateway": true,
201
202
  "@aws-cdk/aws-s3:publicAccessBlockedByDefault": true,
202
203
  "@aws-cdk/aws-lambda:useCdkManagedLogGroup": true,
204
+ "@aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault": true,
203
205
  "@aws-cdk/aws-ecs-patterns:uniqueTargetGroupId": true
204
206
  }
205
207
  }
@@ -2300,7 +2302,7 @@ This is a breaking change as it will cause target group replacement when the fla
2300
2302
  | Since | Unset behaves like | Recommended value |
2301
2303
  | ----- | ----- | ----- |
2302
2304
  | (not in v1) | | |
2303
- | V2NEXT | `false` | `true` |
2305
+ | 2.221.0 | `false` | `true` |
2304
2306
 
2305
2307
 
2306
2308
  ### @aws-cdk/aws-stepfunctions-tasks:httpInvokeDynamicJsonPathEndpoint
@@ -2316,7 +2318,24 @@ When disabled, the JSONPath apiEndpoint property will only support a static stri
2316
2318
  | Since | Unset behaves like | Recommended value |
2317
2319
  | ----- | ----- | ----- |
2318
2320
  | (not in v1) | | |
2319
- | V2NEXT | `true` | `true` |
2321
+ | 2.221.0 | `true` | `true` |
2322
+
2323
+
2324
+ ### @aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault
2325
+
2326
+ *When enabled, Network Load Balancer will be created with a security group by default.*
2327
+
2328
+ Flag type: New default behavior
2329
+
2330
+ When this feature flag is enabled, Network Load Balancer will be created with a security group by default.
2331
+
2332
+
2333
+ | Since | Unset behaves like | Recommended value |
2334
+ | ----- | ----- | ----- |
2335
+ | (not in v1) | | |
2336
+ | V2NEXT | `false` | `true` |
2337
+
2338
+ **Compatibility with old behavior:** Disable the feature flag to create Network Load Balancer without a security group by default.
2320
2339
 
2321
2340
 
2322
2341
  <!-- END details -->
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: konokenj.cdk-api-mcp-server
3
- Version: 0.50.0
3
+ Version: 0.51.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.220.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.221.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=t11IWtHrtb-1KhMdtdDZ6Lu0xd4hd618C1K5exky0hc,129
1
+ cdk_api_mcp_server/__about__.py,sha256=wlgAQ3B3wATW8z6aaZQmTw1D4VHqQBjNiASXyYu9Qdg,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=Xoj4BNQ3IpD4iWGTGaosCCP2HZrYDiDwcyh5_zxwm9E,35618
12
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-agentcore-alpha/README.md,sha256=Guco4NsWQmSm05TrYD55t6BnL1dugOUwH_ZHmt6b14o,35627
13
13
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-bedrock-alpha/README.md,sha256=o4IpchOHFzGdZdeX9WPIfFyHAs98uLKIkfSlBOgygB0,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
@@ -29,7 +29,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-kinesisanalytics-fl
29
29
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-lambda-go-alpha/README.md,sha256=4coywZWLJnuLG5dfL7KeDKYnen8lnuBuCVh3i-sPO80,10644
30
30
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-lambda-python-alpha/README.md,sha256=xG6KK3MhND12qlwfM6N0NIs1h75mlBxpC-Jx0xdyNzI,11776
31
31
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-location-alpha/README.md,sha256=rqUOPlv75EaHggDbeRCRhIXIo-rN9elMpeUApG_7Oaw,8041
32
- cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-msk-alpha/README.md,sha256=HxqC_UXgMbi82l_B5h7yP8yXq3586kM1boakyHxsNOc,8101
32
+ cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-msk-alpha/README.md,sha256=AsSJkhmIOowiqTw3DJRPmw2vd1LlhVDrohaDjHvxx3o,9288
33
33
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-neptune-alpha/README.md,sha256=nshlXtSi7Q-R5ZF9b2GPuIJk8lSqpglafhKYXdlX3w0,9077
34
34
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-pipes-alpha/README.md,sha256=xbuQ4lkJLCThuzdgT87RQd-9BMJhPuSejHY90D5thq8,15012
35
35
  cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-pipes-enrichments-alpha/README.md,sha256=xAEKkm8n4OdcuEXJ7PwQGZh65hL2zTJxNo46-3WdYOM,3142
@@ -412,7 +412,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-act
412
412
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-ecr-source.ts,sha256=iL19rhSPBw3a74vVKNnbyFZqHSsGPNmbtkl9W7BpiFU,3117
413
413
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-ecs-deploy.ts,sha256=S0sQQE01EtB9eGRdh0CMjKMq9y1iA2_JZMgoAJ9KJpc,3296
414
414
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-ecs-separate-source.lit.ts,sha256=4gzbdTFIVxqlvl4VJPxJ-5mg3tXdvu9jCAiMzMxlzyg,8314
415
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-elastic-beanstalk-deploy.ts,sha256=AmGcJlGuIo9dx38c4wLPvPlJPO-kVYrQVhdgNbxy1FM,5470
415
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-elastic-beanstalk-deploy.ts,sha256=AKulRWu2nFdyTrL9olTlI5R_C0Elk3OrBS87mFHnrn8,5646
416
416
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-events.ts,sha256=GlIigr-IQ80xWtanSq06gRxPvNVtRbh7kR0X09b8YBA,2224
417
417
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-invoke-action.ts,sha256=mLIohxRn-3Lx1HUTvQTjsoLnWu63kucyvpqqQwAvgQo,3486
418
418
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-jenkins.ts,sha256=OIG2DO7Nc8mVT9wfFaZqgWjOHKkc_SJAHwfGXohT_bw,1827
@@ -476,7 +476,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.clus
476
476
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster-serverless.ts,sha256=fVUwucggIFd_bkV6cMKFoO6UE8l_yImtyGyMupGc_Qw,971
477
477
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster-storage-type.ts,sha256=lY6eDVhKPOLF06uUT_jl-ao-mwllhXiJalS1GRqGEHY,888
478
478
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-docdb/integ.cluster.ts,sha256=9CI-3GXkVKVedg642mBMv5fBrqeSXRLfsvoftA1OM7s,1683
479
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/README.md,sha256=RegSheolCw5G878J1icibTPPfrDig67gXrYAZbGNouY,39383
479
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/README.md,sha256=By2EBHauldDFOe-zwjaN59Tml5f4x4Dv4WH3pdJR5cs,41485
480
480
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/TABLE_V1_API.md,sha256=dmKwhQAS6tPwAeL4_8zeI8T51JfMOKmgjEq8Wa560Eg,11568
481
481
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/index.md,sha256=8s_S7B1K2Gwh3DlcQ96Sfa1_ttS_OsuIC2F2CR35-kA,2292
482
482
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.autoscaling.lit.ts,sha256=bWjJR6OD8ieTIU0KJt2okeX_D2DmXzLwl-j2HEf09KE,891
@@ -487,6 +487,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.d
487
487
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb-v2.policy-ff.ts,sha256=-JKTlVKwPcY0tUgTubiDv4c8uhgPU62JaC4QPEoQ0MM,1257
488
488
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb-v2.policy.ts,sha256=5fevoFd7tTTqIGliE_p3Q1BDpQqsGHAWgkSNNsWYaQI,1197
489
489
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb-v2.warm-throughput.ts,sha256=ehV4hj424r-8qGLZDubScpXvR8XVUcm_2Qjicez-mlE,1402
490
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.add-to-resource-policy.ts,sha256=-DxXCeqry-ityog_PayNf7E2xx15JTSvqG7i1Cnw_bI,3378
490
491
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.alarm-metrics.ts,sha256=4hq2piVo7Kl_GdSfhQE7R48uLFXEqfsQN2wNJlODUa8,1321
491
492
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.cci.ts,sha256=yID9gb2U338VoUPVnJ2Ji7CiXMsgwCVZDWI8IZCZazg,878
492
493
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.contirubtor-insights-for-gsi.ts,sha256=WE7pU__78GArHQTeJpxCeb2A-bfHvLtLLZspyhCK08o,1313
@@ -495,7 +496,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.d
495
496
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.mixed-key-gsi.ts,sha256=QawM6PMNVb3x21XAlopgdA-6rF6-0GhCWf6rYzVUXDk,1014
496
497
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.ondemand.ts,sha256=a3HjfcmFcnCS_AG4WctfRNv-27yrCcLks2_O3pe6eKw,4889
497
498
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.pitr.ts,sha256=2KMxFcbPQ6nSrTmGZISPvLGtgFTrya9XTJExKMpP-mo,847
498
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.policy.ts,sha256=l6NOv93zQX2L6o9bXA9SrYVKdWGBPjWq3Cn196s8IlQ,1405
499
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.policy.ts,sha256=p43hUlWISLo5slIxfAfH17n77bKiuxkjbcJYyC-yUqM,2580
499
500
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.sse.ts,sha256=yhj0Uv2zqqRGo7YoQgAeYb2pdXOOgD9RQ7Li2M4IqqE,5086
500
501
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.ts,sha256=k0OPrden3gGG4rTT6YmI8l16tiNsilhiMT6zdvx7Sdw,5330
501
502
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-dynamodb/integ.dynamodb.warm-throughput.ts,sha256=BvuRnpHDCTS5xJEPuN-7Ns18sLsDLyuaT8l1w04W4s4,1129
@@ -565,7 +566,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-fl
565
566
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-flow-logs-from-transit-gateway.ts,sha256=pI_dHdAMrN6RZJkG2xy2Bzmh6pdUNbNPxJRsIyOA2uM,1052
566
567
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-flow-logs-interval.ts,sha256=FIKnyNDtCikGWNfTqCCuh4kQ-7SFONaXyc9FM7zrRM8,2511
567
568
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-flow-logs-kinesis.ts,sha256=gezuL7HbIoLXslpaCxpKYH0_y4OBcwcLPHyZ0t30me0,1866
568
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-flow-logs.ts,sha256=6F10I_32HCGROxxSjwJH3HCdaaaMrwxsEwhny3PVkY4,4738
569
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-flow-logs.ts,sha256=Jk7NZZWqAnC6tM8duqDFZKY_iaW5ktLxtmK02QgFSPA,4848
569
570
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-gateway.ts,sha256=3FWBiViVwfNTQVawlavaJgyCjAkLmSPD8TT3glVjgxc,756
570
571
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-global-endpoint.ts,sha256=Agfu0a9f4DTGrDeTn-vxAxSRyScyHj03xBuPpTNoYQg,2004
571
572
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-ipam.ts,sha256=qCgXOaoWO-eAEtE-BtZXTDKJGA3SUIpE86MvwRFSw1Q,2183
@@ -742,7 +743,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/integ.nodegr
742
743
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancing/README.md,sha256=TvRV54AcSiSZ3uOENOGmzkiBBRuHSG3DeEqgW_8FkZs,1795
743
744
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancing/integ.elb.ts,sha256=6qAybkYElxtfNefo1IpFo8MgrCubixLs2hTUUPeZoRg,555
744
745
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancing/integ.instanceTarget.elb.ts,sha256=aSGKHAGZrvvVdE_IVZ2M6TZdKer0j5qO6LWbjPdrdc0,1696
745
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/README.md,sha256=32ej7fkz6bLr9U-1VVTH8pdDHJf3wXmfUTtimxA-Hfc,41395
746
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/README.md,sha256=sU_TyYZlaA_EglNu0N-syg-64d5as25HGHXP2EdeibY,42566
746
747
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.alb-lambda-multi-value-headers.ts,sha256=4lGGHP1caV-HslGzLijjSQLd46Ha40rbrFnqW_t0ovk,2631
747
748
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.alb-mtls.ts,sha256=MLqCLJKd4FOCLcHkqZHoJghi2tYMmqpRoDzQHDNvnHQ,5635
748
749
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.alb-target-group-attributes.ts,sha256=I1YcQmzoqEx_H9mPq1smfyhScse2QSzBXf9XDdCsDhk,1370
@@ -774,6 +775,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalan
774
775
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.nlb.dualstack.internet-facing.ts,sha256=Oq0g49WEpoBwqxnEpOspNBulRf2AwTPyaSZWMLQngac,2911
775
776
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.nlb.enforce-sg-inbound-rules.ts,sha256=lp2AWSShgI7_ygh5Knk2z2pimqAmU83Cjk8xuwsntHY,683
776
777
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.nlb.minimum-capacity-unit.ts,sha256=IgdpjpSoghFYXj6hLnjJO48YNjMUz-kQPlKjjGgD7xw,1002
778
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.nlb.security-group.ts,sha256=tNLpJZucnYJNt59WiQfLDTO8bDHZOqY1XBtGi36xUiE,2215
777
779
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.nlb.ts,sha256=GQbiAqYnvHwivh8EU24FSWoCw7fBAaty2viAAxe-l1U,2044
778
780
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2/integ.vpc-endpoint-service.ts,sha256=RIjjljBxQ0H92qte2h-_So_STAeKc4Whaditx5vet-s,1884
779
781
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-elasticloadbalancingv2-actions/README.md,sha256=osC-44TUVnjDBmtQi7L-8ZPZk6Fx2Z_p2hjmIBMa7FA,1975
@@ -800,7 +802,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events/integ.eve
800
802
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events/integ.eventbus-grants.ts,sha256=c3Ffvk_79M7n4ILdM8mODvrXasTxavCa5yaqqkrmdlY,6768
801
803
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events/integ.eventbus.ts,sha256=zj7YkMTjU-Ga3jgbxqgYBkDlTFa5fMW4ANO1O69uHWI,1226
802
804
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events/integ.rule.ts,sha256=nGg_Pob8FdnvTvrdU2q844-oj80KP0j8NVKRhLS-feU,2503
803
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/README.md,sha256=B1jKg4KD1tVVBbl_aUw6CS9J-rTwIQ3HwpalX-qP52E,22066
805
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/README.md,sha256=24lsnZU79VNiJHvwZCDNHCobR2q8FFlGW2bpTnvirBc,22857
804
806
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.api-destination.ts,sha256=Oa05ARryXd4Zpd9mRsylvwWddReX1BrqAcoLhZ3595o,2545
805
807
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.api-gateway.ts,sha256=uMEfzDgrNkLx7MKIlyBzbELD6EHkK9mQhV6A4DltkeE,1976
806
808
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.api-gatewayv2.ts,sha256=FhorcKnCbnN4Si2Vx8AfWINKZ4av_7TS8Icru4CFfUw,919
@@ -811,9 +813,9 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/i
811
813
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.event-ec2-task.ts,sha256=oQNO0_vNLwMDWLNVfVyoAR_nsgkJkEiPJJza2PweTP0,2127
812
814
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.event-fargate-task.ts,sha256=uK-b1S5bSrVqltbGsd8EUwu37LczNYqrZxDcgFkXnbI,2735
813
815
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.events.ts,sha256=s5N9AyCD7mWoxuwpIADVDUj-3mSB8lpyOdvhNwa4SzI,1464
816
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.firehose-delivery-stream.ts,sha256=8JcDPEHhKqPpWh6bdlhLtok_WLDZ0GHsdJtqeBnHGD8,1610
814
817
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.job-definition-events.d.ts,sha256=jmCbtxwguFjHfw6fkLsTGduEd7E_n5ZfGh4YUkv1CIE,11
815
818
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.job-definition-events.ts,sha256=L5KiOtOHUkWLZt-uBPNvXQg-TDDIhASsXvk6eRAFRFc,1381
816
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.kinesis-firehose-stream.ts,sha256=6z6UpemJ1vDxqGCvcu64zTvSwSOHeaa1tVQiDskU1os,1099
817
819
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.kinesis-stream-customer-key.ts,sha256=LqPBpY1lV06cF--K3qSXfUR8dtqbNb6ZCcLsGZDpUrg,883
818
820
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.kinesis-stream-dead-letter-queue.ts,sha256=5i_MgLDvb7m405ji-JY2uzjqSJGMRFZNWHr2JQGd4KU,865
819
821
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.kinesis-stream.ts,sha256=8Vmd-jqRrVJhHAxgy0elQunIoKs2UANvSbW1O6nnsas,690
@@ -1402,7 +1404,7 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/int
1402
1404
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.provider-with-waiter-state-machine-custom-role.ts,sha256=60mjzf_2NI9zO30B2Guye5sA7kxIl4yrLMXUEWIDO9I,2401
1403
1405
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.provider-with-waiter-state-machine.ts,sha256=6Ci2_ABcu5azSj1f0EzY1VD4lQUg9KI5l1Q7ieejI-0,2058
1404
1406
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/custom-resources/integ.provider.ts,sha256=u_YVV0YZk6hyIxo5JOOSwwUORbqS3BVbJU6DIAwxuk0,1814
1405
- cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/FEATURE_FLAGS.md,sha256=YZnihkvPMrPVzZdFOTipeVHT1VfZXB8aOlIXPR_Pw_Y,110573
1407
+ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/FEATURE_FLAGS.md,sha256=dHJMOjPOzD5lNAQjTiy4fTv0vG3XmzSPL9dVyo-MwC0,111533
1406
1408
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/NESTED_ASSEMBLIES.md,sha256=P8PNyr4hIC_i-9aUxa301-5-N4tLcoHYnELBp3C6SQQ,4949
1407
1409
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/README.md,sha256=4Gvb735iDvpcWvocmAezGrwcia_LIhv4j6rS6_nFKeE,27422
1408
1410
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/lambda-layer-awscli/README.md,sha256=kMrrptXZcAiK_TXRQD4XcaNRa3RXaIoIUQRZYi29b30,681
@@ -1433,8 +1435,8 @@ cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/pipelines/integ.pipe
1433
1435
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/region-info/README.md,sha256=vewWkV3ds9o9iyyYaJBNTkaKJ2XA6K2yF17tAxUnujg,2718
1434
1436
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/README.md,sha256=hYIx7DbG_7p4LYLUfxDwgIQjw9UNdz1GLrqDe8_Dbko,4132
1435
1437
  cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/triggers/integ.triggers.ts,sha256=4OHplMoBOgHGkktAzoU-TuNmJQS5wGAUvBfj5bGSe_Y,2807
1436
- konokenj_cdk_api_mcp_server-0.50.0.dist-info/METADATA,sha256=2FXW6Vg2pVx9Bws01H3t0v7gJ7n4QCIpZTKS6wmrLlI,2646
1437
- konokenj_cdk_api_mcp_server-0.50.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1438
- konokenj_cdk_api_mcp_server-0.50.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1439
- konokenj_cdk_api_mcp_server-0.50.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1440
- konokenj_cdk_api_mcp_server-0.50.0.dist-info/RECORD,,
1438
+ konokenj_cdk_api_mcp_server-0.51.0.dist-info/METADATA,sha256=fsIE1V36P5u1agmMVTotX_jp5_Bq19lOxNu7w2URyak,2646
1439
+ konokenj_cdk_api_mcp_server-0.51.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1440
+ konokenj_cdk_api_mcp_server-0.51.0.dist-info/entry_points.txt,sha256=bVDhMdyCC1WNMPOMbmB82jvWII2CIrwTZDygdCf0cYQ,79
1441
+ konokenj_cdk_api_mcp_server-0.51.0.dist-info/licenses/LICENSE.txt,sha256=5OIAASeg1HM22mVZ1enz9bgZ7TlsGfWXnj02P9OgFyk,1098
1442
+ konokenj_cdk_api_mcp_server-0.51.0.dist-info/RECORD,,
@@ -1,33 +0,0 @@
1
- import * as events from 'aws-cdk-lib/aws-events';
2
- import * as iam from 'aws-cdk-lib/aws-iam';
3
- import * as firehose from 'aws-cdk-lib/aws-kinesisfirehose';
4
- import * as s3 from 'aws-cdk-lib/aws-s3';
5
- import * as cdk from 'aws-cdk-lib';
6
- import * as targets from 'aws-cdk-lib/aws-events-targets';
7
-
8
- // ---------------------------------
9
- // Define a rule that triggers a put to a Kinesis stream every 1min.
10
-
11
- const app = new cdk.App();
12
-
13
- const stack = new cdk.Stack(app, 'aws-cdk-firehose-event-target');
14
-
15
- const bucket = new s3.Bucket(stack, 'firehose-bucket');
16
- const firehoseRole = new iam.Role(stack, 'firehose-role', {
17
- assumedBy: new iam.ServicePrincipal('firehose.amazonaws.com'),
18
- });
19
- const stream = new firehose.CfnDeliveryStream(stack, 'MyStream', {
20
- extendedS3DestinationConfiguration: {
21
- bucketArn: bucket.bucketArn,
22
- roleArn: firehoseRole.roleArn,
23
- },
24
- });
25
- bucket.grantReadWrite(firehoseRole);
26
-
27
- const event = new events.Rule(stack, 'EveryMinute', {
28
- schedule: events.Schedule.rate(cdk.Duration.minutes(1)),
29
- });
30
-
31
- event.addTarget(new targets.KinesisFirehoseStream(stream, {}));
32
-
33
- app.synth();