konokenj.cdk-api-mcp-server 0.65.0__py3-none-any.whl → 0.67.0__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (68) hide show
  1. cdk_api_mcp_server/__about__.py +1 -1
  2. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-imagebuilder-alpha/README.md +20 -20
  3. cdk_api_mcp_server/resources/aws-cdk/constructs/@aws-cdk/aws-msk-alpha/README.md +1 -1
  4. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-codepipeline-actions/integ.pipeline-elastic-beanstalk-deploy.ts +2 -2
  5. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ec2/integ.vpc-endpoint-eusc.ts +42 -0
  6. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/README.md +75 -13
  7. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.app-mesh-proxy-config.ts +0 -2
  8. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.capacity-provider-managed-draining.ts +0 -2
  9. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.capacity-provider.ts +0 -2
  10. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.clb-host-nw.ts +9 -2
  11. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cloudmap-container-port.ts +9 -2
  12. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-amazonlinux2-neuron-ami.ts +0 -2
  13. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-imported.ts +0 -2
  14. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster-windows-server-ami.ts +0 -2
  15. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.cluster.amazonlinux2023-ami.ts +0 -2
  16. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.default-capacity-provider.ts +0 -2
  17. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.deployment-alarms.ts +0 -2
  18. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.enable-execute-command.ts +0 -2
  19. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.environment-file.ts +0 -2
  20. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.exec-command.ts +0 -2
  21. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.firelens-s3-config.ts +8 -2
  22. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.graviton.ts +0 -2
  23. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.lb-awsvpc-nw.ts +9 -2
  24. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.lb-bridge-nw.ts +9 -2
  25. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-capacity-provider-default-roles.ts +93 -0
  26. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-capacity-provider.ts +0 -2
  27. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.managedinstances-no-default-capacity-provider.ts +0 -2
  28. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.placement-constraint-default-empty.ts +0 -2
  29. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.placement-strategies.ts +0 -2
  30. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.pseudo-terminal.ts +0 -2
  31. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.sd-awsvpc-nw.ts +0 -2
  32. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.sd-bridge-nw.ts +0 -2
  33. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.spot-drain.ts +0 -2
  34. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.swap-parameters.ts +0 -2
  35. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs/integ.task-definition-placement-constraints.ts +0 -2
  36. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.alb-ecs-service-command-entry-point.ts +12 -2
  37. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.application-load-balanced-ecs-service.ts +13 -3
  38. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.healthchecks-multiple-application-load-balanced-ecs-service.ts +15 -3
  39. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.healthchecks-multiple-network-load-balanced-ecs-service.ts +8 -3
  40. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.multiple-application-load-balanced-ecs-service-idle-timeout.ts +12 -4
  41. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.multiple-application-load-balanced-ecs-service.ts +10 -4
  42. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.network-load-balanced-ecs-service.ts +7 -3
  43. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.scheduled-ecs-task.ts +0 -2
  44. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-ecs-patterns/integ.tls-network-load-balanced-ecs-service.ts +0 -2
  45. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-eks/README.md +1 -1
  46. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/README.md +46 -0
  47. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.event-ec2-task.ts +0 -2
  48. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-events-targets/integ.sqs-event-rule-target.ts +37 -2
  49. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-lambda/integ.runtimes.ts +8 -0
  50. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-logs/README.md +4 -3
  51. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/README.md +1 -0
  52. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-rds/integ.option-group.ts +40 -0
  53. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53-targets/integ.elastic-beanstalk-environment-target.ts +2 -1
  54. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53-targets/integ.elastic-beanstalk-hostedzoneid.ts +2 -1
  55. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-route53-targets/integ.elastic-beanstalk-token-endpoint.ts +2 -1
  56. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/README.md +47 -0
  57. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.ec2-run-task-capacity-provider.ts +145 -0
  58. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.ec2-run-task-ref-definition.ts +0 -2
  59. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.ec2-run-task.ts +0 -2
  60. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.ec2-task.ts +0 -2
  61. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/aws-stepfunctions-tasks/integ.fargate-run-task-capacity-provider.ts +125 -0
  62. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/FEATURE_FLAGS.md +2 -49
  63. cdk_api_mcp_server/resources/aws-cdk/constructs/aws-cdk-lib/cx-api/README.md +0 -42
  64. {konokenj_cdk_api_mcp_server-0.65.0.dist-info → konokenj_cdk_api_mcp_server-0.67.0.dist-info}/METADATA +2 -2
  65. {konokenj_cdk_api_mcp_server-0.65.0.dist-info → konokenj_cdk_api_mcp_server-0.67.0.dist-info}/RECORD +68 -63
  66. {konokenj_cdk_api_mcp_server-0.65.0.dist-info → konokenj_cdk_api_mcp_server-0.67.0.dist-info}/WHEEL +0 -0
  67. {konokenj_cdk_api_mcp_server-0.65.0.dist-info → konokenj_cdk_api_mcp_server-0.67.0.dist-info}/entry_points.txt +0 -0
  68. {konokenj_cdk_api_mcp_server-0.65.0.dist-info → konokenj_cdk_api_mcp_server-0.67.0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,93 @@
1
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
+ import * as cdk from 'aws-cdk-lib';
3
+ import * as ecs from 'aws-cdk-lib/aws-ecs';
4
+ import * as integ from '@aws-cdk/integ-tests-alpha';
5
+
6
+ const app = new cdk.App({
7
+ postCliContext: {
8
+ '@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm': true,
9
+ '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
10
+ '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
11
+ },
12
+ });
13
+ const stack = new cdk.Stack(app, 'integ-managedinstances-capacity-provider-default-roles');
14
+
15
+ const vpc = new ec2.Vpc(stack, 'Vpc', { maxAzs: 2, restrictDefaultSecurityGroup: true });
16
+ const cluster = new ecs.Cluster(stack, 'ManagedInstancesCluster', {
17
+ vpc,
18
+ enableFargateCapacityProviders: true,
19
+ });
20
+
21
+ // Create a security group for FMI instances
22
+ const fmiSecurityGroup = new ec2.SecurityGroup(stack, 'ManagedInstancesSecurityGroup', {
23
+ vpc,
24
+ description: 'Security group for ManagedInstances capacity provider instances',
25
+ allowAllOutbound: false,
26
+ });
27
+
28
+ // Add specific outbound rule for HTTPS
29
+ fmiSecurityGroup.addEgressRule(
30
+ ec2.Peer.anyIpv4(),
31
+ ec2.Port.tcp(443),
32
+ 'Allow HTTPS outbound',
33
+ );
34
+
35
+ // Create MI Capacity Provider without specifying infrastructureRole or ec2InstanceProfile
36
+ // This will test the default roles
37
+ const miCapacityProvider = new ecs.ManagedInstancesCapacityProvider(stack, 'ManagedInstancesCapacityProvider', {
38
+ subnets: vpc.privateSubnets,
39
+ securityGroups: [fmiSecurityGroup],
40
+ propagateTags: ecs.PropagateManagedInstancesTags.CAPACITY_PROVIDER,
41
+ instanceRequirements: {
42
+ vCpuCountMin: 1,
43
+ memoryMin: cdk.Size.gibibytes(2),
44
+ cpuManufacturers: [ec2.CpuManufacturer.INTEL],
45
+ },
46
+ });
47
+
48
+ // Add FMI capacity provider to cluster
49
+ cluster.addManagedInstancesCapacityProvider(miCapacityProvider);
50
+ cluster.addDefaultCapacityProviderStrategy([
51
+ {
52
+ capacityProvider: miCapacityProvider.capacityProviderName,
53
+ weight: 1,
54
+ },
55
+ ]);
56
+
57
+ // Create a task definition compatible with Managed Instances and Fargate
58
+ const taskDefinition = new ecs.TaskDefinition(stack, 'TaskDef', {
59
+ compatibility: ecs.Compatibility.FARGATE_AND_MANAGED_INSTANCES,
60
+ cpu: '256',
61
+ memoryMiB: '512',
62
+ networkMode: ecs.NetworkMode.AWS_VPC,
63
+ });
64
+
65
+ taskDefinition.addContainer('web', {
66
+ image: ecs.ContainerImage.fromRegistry('public.ecr.aws/docker/library/httpd:2.4'),
67
+ memoryLimitMiB: 512,
68
+ portMappings: [
69
+ {
70
+ containerPort: 80,
71
+ protocol: ecs.Protocol.TCP,
72
+ },
73
+ ],
74
+ });
75
+
76
+ // Create a service using the MI capacity provider
77
+ new ecs.FargateService(stack, 'ManagedInstancesService', {
78
+ cluster,
79
+ taskDefinition,
80
+ capacityProviderStrategies: [
81
+ {
82
+ capacityProvider: miCapacityProvider.capacityProviderName,
83
+ weight: 1,
84
+ },
85
+ ],
86
+ desiredCount: 1,
87
+ });
88
+
89
+ new integ.IntegTest(app, 'ManagedInstancesCapacityProvidersDefaultRoles', {
90
+ testCases: [stack],
91
+ });
92
+
93
+ app.synth();
@@ -7,8 +7,6 @@ import * as integ from '@aws-cdk/integ-tests-alpha';
7
7
  const app = new cdk.App({
8
8
  postCliContext: {
9
9
  '@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm': true,
10
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
11
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
12
10
  },
13
11
  });
14
12
  const stack = new cdk.Stack(app, 'integ-managedinstances-capacity-provider');
@@ -7,8 +7,6 @@ import * as integ from '@aws-cdk/integ-tests-alpha';
7
7
  const app = new cdk.App({
8
8
  postCliContext: {
9
9
  '@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm': true,
10
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
11
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
12
10
  },
13
11
  });
14
12
  const stack = new cdk.Stack(app, 'integ-managedinstances-no-default-capacity-provider');
@@ -7,8 +7,6 @@ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
7
7
  const app = new cdk.App({
8
8
  postCliContext: {
9
9
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
10
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
11
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
12
10
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
13
11
  },
14
12
  });
@@ -7,8 +7,6 @@ import * as integ from '@aws-cdk/integ-tests-alpha';
7
7
  const app = new cdk.App({
8
8
  postCliContext: {
9
9
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
10
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
11
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
12
10
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
13
11
  },
14
12
  });
@@ -6,8 +6,6 @@ import * as ecs from 'aws-cdk-lib/aws-ecs';
6
6
  const app = new cdk.App({
7
7
  postCliContext: {
8
8
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
9
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
10
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
11
9
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
12
10
  },
13
11
  });
@@ -5,8 +5,6 @@ import * as ecs from 'aws-cdk-lib/aws-ecs';
5
5
  const app = new cdk.App({
6
6
  postCliContext: {
7
7
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
8
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
9
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
10
8
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
11
9
  },
12
10
  });
@@ -5,8 +5,6 @@ import * as ecs from 'aws-cdk-lib/aws-ecs';
5
5
  const app = new cdk.App({
6
6
  postCliContext: {
7
7
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
8
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
9
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
10
8
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
11
9
  },
12
10
  });
@@ -5,8 +5,6 @@ import * as ecs from 'aws-cdk-lib/aws-ecs';
5
5
  const app = new cdk.App({
6
6
  postCliContext: {
7
7
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
8
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
9
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
10
8
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
11
9
  },
12
10
  });
@@ -7,8 +7,6 @@ import { LinuxParameters } from 'aws-cdk-lib/aws-ecs';
7
7
  const app = new cdk.App({
8
8
  postCliContext: {
9
9
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
10
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
11
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
12
10
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
13
11
  },
14
12
  });
@@ -6,8 +6,6 @@ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
6
6
  const app = new cdk.App({
7
7
  postCliContext: {
8
8
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
9
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
10
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
11
9
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
12
10
  },
13
11
  });
@@ -8,8 +8,6 @@ import * as ecsPatterns from 'aws-cdk-lib/aws-ecs-patterns';
8
8
  const app = new cdk.App({
9
9
  postCliContext: {
10
10
  '@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm': true,
11
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
12
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
13
11
  },
14
12
  });
15
13
  const stack = new cdk.Stack(app, 'aws-ecs-integ-alb-ec2-cmd-entrypoint');
@@ -22,6 +20,11 @@ const securityGroup = new ec2.SecurityGroup(stack, 'SecurityGroup', {
22
20
  allowAllOutbound: true,
23
21
  });
24
22
  securityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcpRange(32768, 65535));
23
+ // Suppress security guardian rule - intentionally allowing public access for load balancer testing
24
+ const cfnSecurityGroup = securityGroup.node.defaultChild as cdk.CfnResource;
25
+ cfnSecurityGroup.addMetadata('guard', {
26
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
27
+ });
25
28
 
26
29
  const provider = new ecs.AsgCapacityProvider(stack, 'CapacityProvier', {
27
30
  autoScalingGroup: new autoscaling.AutoScalingGroup(
@@ -61,6 +64,13 @@ const applicationLoadBalancedEc2Service = new ecsPatterns.ApplicationLoadBalance
61
64
  },
62
65
  );
63
66
  applicationLoadBalancedEc2Service.loadBalancer.connections.addSecurityGroup(securityGroup);
67
+ // Suppress security guardian rule - load balancer intentionally needs public access for testing
68
+ applicationLoadBalancedEc2Service.loadBalancer.connections.securityGroups.forEach(sg => {
69
+ const cfnSg = sg.node.defaultChild as cdk.CfnResource;
70
+ cfnSg.addMetadata('guard', {
71
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
72
+ });
73
+ });
64
74
 
65
75
  new integ.IntegTest(app, 'AlbEc2ServiceWithCommandAndEntryPoint', {
66
76
  testCases: [stack],
@@ -1,15 +1,13 @@
1
1
  import { AutoScalingGroup } from 'aws-cdk-lib/aws-autoscaling';
2
2
  import { InstanceType, Vpc, SecurityGroup, Peer, Port } from 'aws-cdk-lib/aws-ec2';
3
3
  import { Cluster, ContainerImage, AsgCapacityProvider, EcsOptimizedImage } from 'aws-cdk-lib/aws-ecs';
4
- import { App, Stack } from 'aws-cdk-lib';
4
+ import { App, Stack, CfnResource } from 'aws-cdk-lib';
5
5
  import * as integ from '@aws-cdk/integ-tests-alpha';
6
6
  import { ApplicationLoadBalancedEc2Service } from 'aws-cdk-lib/aws-ecs-patterns';
7
7
  import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
8
8
 
9
9
  const app = new App({
10
10
  postCliContext: {
11
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
12
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
13
11
  },
14
12
  });
15
13
  const stack = new Stack(app, 'aws-ecs-integ-alb');
@@ -20,6 +18,11 @@ const securityGroup = new SecurityGroup(stack, 'SecurityGroup', {
20
18
  allowAllOutbound: true,
21
19
  });
22
20
  securityGroup.addIngressRule(Peer.anyIpv4(), Port.tcpRange(32768, 65535));
21
+ // Suppress security guardian rule - intentionally allowing public access for load balancer testing
22
+ const cfnSecurityGroup = securityGroup.node.defaultChild as CfnResource;
23
+ cfnSecurityGroup.addMetadata('guard', {
24
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
25
+ });
23
26
 
24
27
  const provider1 = new AsgCapacityProvider(stack, 'FirstCapacityProvier', {
25
28
  autoScalingGroup: new AutoScalingGroup(stack, 'FirstAutoScalingGroup', {
@@ -65,6 +68,13 @@ const applicationLoadBalancedEc2Service = new ApplicationLoadBalancedEc2Service(
65
68
  ipAddressType: elbv2.IpAddressType.IPV4,
66
69
  });
67
70
  applicationLoadBalancedEc2Service.loadBalancer.connections.addSecurityGroup(securityGroup);
71
+ // Suppress security guardian rule - load balancer intentionally needs public access for testing
72
+ applicationLoadBalancedEc2Service.loadBalancer.connections.securityGroups.forEach(sg => {
73
+ const cfnSg = sg.node.defaultChild as CfnResource;
74
+ cfnSg.addMetadata('guard', {
75
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
76
+ });
77
+ });
68
78
 
69
79
  new integ.IntegTest(app, 'applicationLoadBalancedEc2ServiceTest', {
70
80
  testCases: [stack],
@@ -2,15 +2,13 @@ import { InstanceType, Vpc, SecurityGroup, Peer, Port } from 'aws-cdk-lib/aws-ec
2
2
  import { Cluster, ContainerImage, AsgCapacityProvider, EcsOptimizedImage } from 'aws-cdk-lib/aws-ecs';
3
3
  import { AutoScalingGroup } from 'aws-cdk-lib/aws-autoscaling';
4
4
  import { Protocol } from 'aws-cdk-lib/aws-elasticloadbalancingv2';
5
- import { App, Duration, Stack } from 'aws-cdk-lib';
5
+ import { App, Duration, Stack, CfnResource } from 'aws-cdk-lib';
6
6
  import { IntegTest } from '@aws-cdk/integ-tests-alpha';
7
7
 
8
8
  import { ApplicationMultipleTargetGroupsEc2Service } from 'aws-cdk-lib/aws-ecs-patterns';
9
9
 
10
10
  const app = new App({
11
11
  postCliContext: {
12
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
13
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
14
12
  },
15
13
  });
16
14
  const stack = new Stack(app, 'aws-ecs-integ-multiple-alb-healthchecks');
@@ -21,6 +19,11 @@ const securityGroup = new SecurityGroup(stack, 'MyAutoScalingGroupSG', {
21
19
  allowAllOutbound: true,
22
20
  });
23
21
  securityGroup.addIngressRule(Peer.anyIpv4(), Port.tcpRange(32768, 65535));
22
+ // Suppress security guardian rule - intentionally allowing public access for load balancer testing
23
+ const cfnSecurityGroup = securityGroup.node.defaultChild as CfnResource;
24
+ cfnSecurityGroup.addMetadata('guard', {
25
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
26
+ });
24
27
  const provider = new AsgCapacityProvider(stack, 'MyProvider', {
25
28
  autoScalingGroup: new AutoScalingGroup(stack, 'MyAutoScalingGroup', {
26
29
  vpc,
@@ -70,6 +73,15 @@ const applicationMultipleTargetGroupsFargateService = new ApplicationMultipleTar
70
73
  });
71
74
  applicationMultipleTargetGroupsFargateService.loadBalancers[0].connections.addSecurityGroup(securityGroup);
72
75
  applicationMultipleTargetGroupsFargateService.loadBalancers[1].connections.addSecurityGroup(securityGroup);
76
+ // Suppress security guardian rule - load balancers intentionally need public access for testing
77
+ applicationMultipleTargetGroupsFargateService.loadBalancers.forEach(lb => {
78
+ lb.connections.securityGroups.forEach(sg => {
79
+ const cfnSg = sg.node.defaultChild as CfnResource;
80
+ cfnSg.addMetadata('guard', {
81
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
82
+ });
83
+ });
84
+ });
73
85
 
74
86
  applicationMultipleTargetGroupsFargateService.targetGroups[0].configureHealthCheck({
75
87
  protocol: Protocol.HTTP,
@@ -1,14 +1,12 @@
1
1
  import { InstanceType, Vpc, Peer, Port, SecurityGroup } from 'aws-cdk-lib/aws-ec2';
2
2
  import { AsgCapacityProvider, Cluster, ContainerImage, EcsOptimizedImage } from 'aws-cdk-lib/aws-ecs';
3
3
  import { AutoScalingGroup } from 'aws-cdk-lib/aws-autoscaling';
4
- import { App, Stack } from 'aws-cdk-lib';
4
+ import { App, Stack, CfnResource } from 'aws-cdk-lib';
5
5
  import { IntegTest } from '@aws-cdk/integ-tests-alpha';
6
6
  import { NetworkMultipleTargetGroupsEc2Service } from 'aws-cdk-lib/aws-ecs-patterns';
7
7
 
8
8
  const app = new App({
9
9
  postCliContext: {
10
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
11
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
12
10
  },
13
11
  });
14
12
  const stack = new Stack(app, 'aws-ecs-integ-nlb-healthchecks');
@@ -19,6 +17,13 @@ const securityGroup = new SecurityGroup(stack, 'MyAutoScalingGroupSG', {
19
17
  allowAllOutbound: true,
20
18
  });
21
19
  securityGroup.addIngressRule(Peer.anyIpv4(), Port.tcpRange(32768, 65535));
20
+
21
+ // Suppress security guardian rule for intentional test setup
22
+ const cfnSecurityGroup = securityGroup.node.defaultChild as CfnResource;
23
+ cfnSecurityGroup.addMetadata('guard', {
24
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
25
+ });
26
+
22
27
  const provider = new AsgCapacityProvider(stack, 'MyProvider', {
23
28
  autoScalingGroup: new AutoScalingGroup(stack, 'MyAutoScalingGroup', {
24
29
  vpc,
@@ -3,7 +3,7 @@ import { InstanceType, Vpc } from 'aws-cdk-lib/aws-ec2';
3
3
  import { Cluster, ContainerImage } from 'aws-cdk-lib/aws-ecs';
4
4
  import { ApplicationProtocol, SslPolicy } from 'aws-cdk-lib/aws-elasticloadbalancingv2';
5
5
  import { PublicHostedZone } from 'aws-cdk-lib/aws-route53';
6
- import { App, Duration, Stack } from 'aws-cdk-lib';
6
+ import { App, Duration, Stack, CfnResource } from 'aws-cdk-lib';
7
7
  import * as integ from '@aws-cdk/integ-tests-alpha';
8
8
  import { ApplicationMultipleTargetGroupsEc2Service } from 'aws-cdk-lib/aws-ecs-patterns';
9
9
  import { AUTOSCALING_GENERATE_LAUNCH_TEMPLATE } from 'aws-cdk-lib/cx-api';
@@ -13,8 +13,6 @@ const app = new App({
13
13
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
14
14
  '@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm': false,
15
15
  '@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions': false,
16
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
17
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
18
16
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
19
17
  },
20
18
  });
@@ -26,7 +24,7 @@ const cluster = new Cluster(stack, 'Cluster', { vpc });
26
24
  cluster.addCapacity('DefaultAutoScalingGroup', { instanceType: new InstanceType('t2.micro') });
27
25
 
28
26
  // Two load balancers with different idle timeouts.
29
- new ApplicationMultipleTargetGroupsEc2Service(stack, 'myService', {
27
+ const service = new ApplicationMultipleTargetGroupsEc2Service(stack, 'myService', {
30
28
  cluster,
31
29
  memoryLimitMiB: 256,
32
30
  taskImageOptions: {
@@ -87,6 +85,16 @@ new ApplicationMultipleTargetGroupsEc2Service(stack, 'myService', {
87
85
  ],
88
86
  });
89
87
 
88
+ // Suppress security guardian rule for ALB default behavior (open: true)
89
+ service.loadBalancers.forEach(lb => {
90
+ lb.connections.securityGroups.forEach(sg => {
91
+ const cfnSg = sg.node.defaultChild as CfnResource;
92
+ cfnSg.addMetadata('guard', {
93
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
94
+ });
95
+ });
96
+ });
97
+
90
98
  new integ.IntegTest(app, 'multiAlbEcsEc2Test', {
91
99
  testCases: [stack],
92
100
  });
@@ -1,6 +1,6 @@
1
1
  import { InstanceType, Vpc } from 'aws-cdk-lib/aws-ec2';
2
2
  import { Cluster, ContainerImage, Ec2TaskDefinition } from 'aws-cdk-lib/aws-ecs';
3
- import { App, Stack } from 'aws-cdk-lib';
3
+ import { App, Stack, CfnResource } from 'aws-cdk-lib';
4
4
  import * as integ from '@aws-cdk/integ-tests-alpha';
5
5
  import { ApplicationMultipleTargetGroupsEc2Service } from 'aws-cdk-lib/aws-ecs-patterns';
6
6
  import { REDUCE_EC2_FARGATE_CLOUDWATCH_PERMISSIONS } from 'aws-cdk-lib/cx-api';
@@ -9,8 +9,6 @@ const app = new App({
9
9
  postCliContext: {
10
10
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
11
11
  [REDUCE_EC2_FARGATE_CLOUDWATCH_PERMISSIONS]: false,
12
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
13
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
14
12
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
15
13
  },
16
14
  });
@@ -32,7 +30,7 @@ taskDefinition.addContainer('web', {
32
30
  });
33
31
 
34
32
  // One load balancer with one listener and two target groups.
35
- new ApplicationMultipleTargetGroupsEc2Service(stack, 'myService', {
33
+ const service = new ApplicationMultipleTargetGroupsEc2Service(stack, 'myService', {
36
34
  cluster,
37
35
  taskDefinition,
38
36
  enableExecuteCommand: true,
@@ -48,6 +46,14 @@ new ApplicationMultipleTargetGroupsEc2Service(stack, 'myService', {
48
46
  ],
49
47
  });
50
48
 
49
+ // Suppress security guardian rule for ALB default behavior (open: true)
50
+ service.loadBalancer.connections.securityGroups.forEach(sg => {
51
+ const cfnSg = sg.node.defaultChild as CfnResource;
52
+ cfnSg.addMetadata('guard', {
53
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
54
+ });
55
+ });
56
+
51
57
  new integ.IntegTest(app, 'applicationMultipleTargetGroupsEc2ServiceTest', {
52
58
  testCases: [stack],
53
59
  });
@@ -1,15 +1,13 @@
1
1
  import { AutoScalingGroup } from 'aws-cdk-lib/aws-autoscaling';
2
2
  import { InstanceType, Vpc, SecurityGroup, Peer, Port } from 'aws-cdk-lib/aws-ec2';
3
3
  import { Cluster, ContainerImage, AsgCapacityProvider, EcsOptimizedImage } from 'aws-cdk-lib/aws-ecs';
4
- import { App, Stack } from 'aws-cdk-lib';
4
+ import { App, Stack, CfnResource } from 'aws-cdk-lib';
5
5
  import * as integ from '@aws-cdk/integ-tests-alpha';
6
6
  import { NetworkLoadBalancedEc2Service } from 'aws-cdk-lib/aws-ecs-patterns';
7
7
  import { IpAddressType } from 'aws-cdk-lib/aws-elasticloadbalancingv2';
8
8
 
9
9
  const app = new App({
10
10
  postCliContext: {
11
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
12
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
13
11
  },
14
12
  });
15
13
  const stack = new Stack(app, 'aws-ecs-integ-nlb');
@@ -21,6 +19,12 @@ const securityGroup = new SecurityGroup(stack, 'SecurityGroup', {
21
19
  });
22
20
  securityGroup.addIngressRule(Peer.anyIpv4(), Port.tcpRange(32768, 65535));
23
21
 
22
+ // Suppress security guardian rule for intentional test setup
23
+ const cfnSecurityGroup = securityGroup.node.defaultChild as CfnResource;
24
+ cfnSecurityGroup.addMetadata('guard', {
25
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
26
+ });
27
+
24
28
  const provider1 = new AsgCapacityProvider(stack, 'FirstCapacityProvider', {
25
29
  autoScalingGroup: new AutoScalingGroup(stack, 'FirstAutoScalingGroup', {
26
30
  vpc,
@@ -8,8 +8,6 @@ import { ScheduledEc2Task } from 'aws-cdk-lib/aws-ecs-patterns';
8
8
  const app = new cdk.App({
9
9
  postCliContext: {
10
10
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
11
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
12
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
13
11
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
14
12
  },
15
13
  });
@@ -14,8 +14,6 @@ if (!certArn) throw new Error('For this test you must provide your own Certifica
14
14
  const app = new App({
15
15
  postCliContext: {
16
16
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
17
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
18
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
19
17
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
20
18
  },
21
19
  });
@@ -282,7 +282,7 @@ cluster.addNodegroupCapacity('custom-node-group', {
282
282
  });
283
283
  ```
284
284
 
285
- > **NOTE:** If you add instances with the inferentia class (`inf1` or `inf2`) or trainium class (`trn1` or `trn1n`)
285
+ > **NOTE:** If you add instances with the inferentia class (`inf1` or `inf2`) or trainium class (`trn1`, `trn1n`, or `trn2`)
286
286
  > the [neuron plugin](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/containers/dlc-then-eks-devflow.html)
287
287
  > will be automatically installed in the kubernetes cluster.
288
288
 
@@ -718,6 +718,52 @@ rule.addTarget(new targets.RedshiftQuery(workgroup.attrWorkgroupWorkgroupArn, {
718
718
  }));
719
719
  ```
720
720
 
721
+ ## Send events to an SQS queue
722
+
723
+ Use the `SqsQueue` target to send events to an SQS queue.
724
+
725
+ The code snippet below creates an event rule that sends events to an SQS queue every hour:
726
+
727
+ ```ts
728
+ const queue = new sqs.Queue(this, 'MyQueue');
729
+
730
+ const rule = new events.Rule(this, 'Rule', {
731
+ schedule: events.Schedule.rate(cdk.Duration.hours(1)),
732
+ });
733
+
734
+ rule.addTarget(new targets.SqsQueue(queue));
735
+ ```
736
+
737
+ ### Using Message Group IDs
738
+
739
+ You can specify a `messageGroupId` to ensure messages are processed in order. This parameter is required for FIFO queues and optional for standard queues:
740
+
741
+ ```ts
742
+ // FIFO queue - messageGroupId required
743
+ const fifoQueue = new sqs.Queue(this, 'MyFifoQueue', {
744
+ fifo: true,
745
+ });
746
+
747
+ const fifoRule = new events.Rule(this, 'FifoRule', {
748
+ schedule: events.Schedule.rate(cdk.Duration.hours(1)),
749
+ });
750
+
751
+ fifoRule.addTarget(new targets.SqsQueue(fifoQueue, {
752
+ messageGroupId: 'MyMessageGroupId',
753
+ }));
754
+
755
+ // Standard queue - messageGroupId optional (SQS Fair queue feature)
756
+ const standardQueue = new sqs.Queue(this, 'MyStandardQueue');
757
+
758
+ const standardRule = new events.Rule(this, 'StandardRule', {
759
+ schedule: events.Schedule.rate(cdk.Duration.hours(1)),
760
+ });
761
+
762
+ standardRule.addTarget(new targets.SqsQueue(standardQueue, {
763
+ messageGroupId: 'MyMessageGroupId', // Optional for standard queues
764
+ }));
765
+ ```
766
+
721
767
  ## Publish to an SNS Topic
722
768
 
723
769
  Use the `SnsTopic` target to publish to an SNS Topic.
@@ -10,8 +10,6 @@ import * as targets from 'aws-cdk-lib/aws-events-targets';
10
10
  const app = new cdk.App({
11
11
  postCliContext: {
12
12
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
13
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
14
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
15
13
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
16
14
  },
17
15
  });
@@ -3,6 +3,7 @@ import * as kms from 'aws-cdk-lib/aws-kms';
3
3
  import * as sqs from 'aws-cdk-lib/aws-sqs';
4
4
  import * as cdk from 'aws-cdk-lib';
5
5
  import * as targets from 'aws-cdk-lib/aws-events-targets';
6
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
6
7
 
7
8
  // ---------------------------------
8
9
  // Define a rule that triggers an SNS topic every 1min.
@@ -23,11 +24,45 @@ const queue = new sqs.Queue(stack, 'MyQueue', {
23
24
  encryption: sqs.QueueEncryption.KMS,
24
25
  encryptionMasterKey: key,
25
26
  });
27
+ // Suppress false positive: queue uses separate QueuePolicy resource (not inline), which is the correct pattern
28
+ (queue.node.defaultChild as cdk.CfnResource).addMetadata('guard', {
29
+ SuppressedRules: ['SQS_NO_WORLD_ACCESSIBLE_INLINE'],
30
+ });
26
31
 
27
- const deadLetterQueue = new sqs.Queue(stack, 'MyDeadLetterQueue');
32
+ const deadLetterQueue = new sqs.Queue(stack, 'MyDeadLetterQueue', {
33
+ encryption: sqs.QueueEncryption.SQS_MANAGED,
34
+ });
35
+ // Suppress false positive: queue uses separate QueuePolicy resource (not inline), which is the correct pattern
36
+ (deadLetterQueue.node.defaultChild as cdk.CfnResource).addMetadata('guard', {
37
+ SuppressedRules: ['SQS_NO_WORLD_ACCESSIBLE_INLINE'],
38
+ });
28
39
 
29
40
  event.addTarget(new targets.SqsQueue(queue, {
30
41
  deadLetterQueue,
31
42
  }));
32
43
 
33
- app.synth();
44
+ // Test messageGroupId support for standard (non-FIFO) queues
45
+ const standardQueue = new sqs.Queue(stack, 'StandardQueue', {
46
+ encryption: sqs.QueueEncryption.SQS_MANAGED,
47
+ });
48
+ // Suppress false positive: queue uses separate QueuePolicy resource (not inline), which is the correct pattern
49
+ (standardQueue.node.defaultChild as cdk.CfnResource).addMetadata('guard', {
50
+ SuppressedRules: ['SQS_NO_WORLD_ACCESSIBLE_INLINE'],
51
+ });
52
+
53
+ const standardQueueEvent = new events.Rule(stack, 'StandardQueueRule', {
54
+ schedule: events.Schedule.rate(cdk.Duration.minutes(1)),
55
+ });
56
+
57
+ standardQueueEvent.addTarget(new targets.SqsQueue(standardQueue, {
58
+ messageGroupId: 'MyMessageGroupId',
59
+ }));
60
+
61
+ new IntegTest(app, 'integ.sqs-event-rule-target', {
62
+ testCases: [stack],
63
+ allowDestroy: [
64
+ 'AWS::SQS::Queue',
65
+ 'AWS::SQS::QueuePolicy',
66
+ 'AWS::Events::Rule',
67
+ ],
68
+ });
@@ -17,6 +17,14 @@ new Function(stack, 'Lambda', {
17
17
  runtime: Runtime.DOTNET_8,
18
18
  });
19
19
 
20
+ new Function(stack, 'DotNet10Lambda', {
21
+ code: Code.fromAsset(path.join(__dirname, 'dotnet-handler')),
22
+ handler: 'Handler',
23
+ runtime: Runtime.DOTNET_10,
24
+ });
25
+
20
26
  new integ.IntegTest(app, 'lambda-runtime-management', {
21
27
  testCases: [stack],
22
28
  });
29
+
30
+ app.synth();
@@ -109,9 +109,10 @@ Log events matching a particular filter can be sent to either a Lambda function
109
109
  or a Kinesis stream.
110
110
 
111
111
  If the Kinesis stream lives in a different account, a `CrossAccountDestination`
112
- object needs to be added in the destination account which will act as a proxy
113
- for the remote Kinesis stream. This object is automatically created for you
114
- if you use the CDK Kinesis library.
112
+ object must be explicitly created in the destination account which will act as a proxy
113
+ for the remote Kinesis stream.
114
+
115
+ Note: The aws-cdk-lib/aws-logs-destinations KinesisDestination construct does not automatically create a CrossAccountDestination for cross-account scenarios.
115
116
 
116
117
  Create a `SubscriptionFilter`, initialize it with an appropriate `Pattern` (see
117
118
  below) and supply the intended destination:
@@ -1253,6 +1253,7 @@ new rds.OptionGroup(this, 'Options', {
1253
1253
  securityGroups: [securityGroup], // Optional - a default group will be created if not provided.
1254
1254
  },
1255
1255
  ],
1256
+ optionGroupName: 'MyOptionGroup'
1256
1257
  });
1257
1258
  ```
1258
1259