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.
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
@@ -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.65.0"
4
+ __version__ = "0.67.0"
@@ -199,8 +199,8 @@ Use AWS-managed workflows for common pipeline phases:
199
199
  const workflowPipeline = new imagebuilder.ImagePipeline(this, 'WorkflowPipeline', {
200
200
  recipe: exampleImageRecipe,
201
201
  workflows: [
202
- { workflow: imagebuilder.AwsManagedWorkflow.buildImage(this, 'BuildWorkflow') },
203
- { workflow: imagebuilder.AwsManagedWorkflow.testImage(this, 'TestWorkflow') }
202
+ { workflow: imagebuilder.AmazonManagedWorkflow.buildImage(this, 'BuildWorkflow') },
203
+ { workflow: imagebuilder.AmazonManagedWorkflow.testImage(this, 'TestWorkflow') }
204
204
  ]
205
205
  });
206
206
  ```
@@ -211,9 +211,9 @@ For container pipelines, use container-specific workflows:
211
211
  const containerWorkflowPipeline = new imagebuilder.ImagePipeline(this, 'ContainerWorkflowPipeline', {
212
212
  recipe: exampleContainerRecipe,
213
213
  workflows: [
214
- { workflow: imagebuilder.AwsManagedWorkflow.buildContainer(this, 'BuildContainer') },
215
- { workflow: imagebuilder.AwsManagedWorkflow.testContainer(this, 'TestContainer') },
216
- { workflow: imagebuilder.AwsManagedWorkflow.distributeContainer(this, 'DistributeContainer') }
214
+ { workflow: imagebuilder.AmazonManagedWorkflow.buildContainer(this, 'BuildContainer') },
215
+ { workflow: imagebuilder.AmazonManagedWorkflow.testContainer(this, 'TestContainer') },
216
+ { workflow: imagebuilder.AmazonManagedWorkflow.distributeContainer(this, 'DistributeContainer') }
217
217
  ]
218
218
  });
219
219
  ```
@@ -430,8 +430,8 @@ Use workflows for custom build, test, and distribution processes:
430
430
  const imageWithWorkflows = new imagebuilder.Image(this, 'ImageWithWorkflows', {
431
431
  recipe: exampleImageRecipe,
432
432
  workflows: [
433
- { workflow: imagebuilder.AwsManagedWorkflow.buildImage(this, 'BuildWorkflow') },
434
- { workflow: imagebuilder.AwsManagedWorkflow.testImage(this, 'TestWorkflow') }
433
+ { workflow: imagebuilder.AmazonManagedWorkflow.buildImage(this, 'BuildWorkflow') },
434
+ { workflow: imagebuilder.AmazonManagedWorkflow.testImage(this, 'TestWorkflow') }
435
435
  ]
436
436
  });
437
437
  ```
@@ -603,12 +603,12 @@ const imageRecipe = new imagebuilder.ImageRecipe(this, 'AmazonManagedImageRecipe
603
603
  ),
604
604
  components: [
605
605
  {
606
- component: imagebuilder.AwsManagedComponent.updateOS(this, 'UpdateOS', {
606
+ component: imagebuilder.AmazonManagedComponent.updateOs(this, 'UpdateOS', {
607
607
  platform: imagebuilder.Platform.LINUX
608
608
  })
609
609
  },
610
610
  {
611
- component: imagebuilder.AwsManagedComponent.awsCliV2(this, 'AwsCli', {
611
+ component: imagebuilder.AmazonManagedComponent.awsCliV2(this, 'AwsCli', {
612
612
  platform: imagebuilder.Platform.LINUX
613
613
  })
614
614
  }
@@ -790,19 +790,19 @@ const containerRecipe = new imagebuilder.ContainerRecipe(this, 'ComponentContain
790
790
  Use pre-built AWS components:
791
791
 
792
792
  ```ts
793
- const containerRecipe = new imagebuilder.ContainerRecipe(this, 'AwsManagedContainerRecipe', {
793
+ const containerRecipe = new imagebuilder.ContainerRecipe(this, 'AmazonManagedContainerRecipe', {
794
794
  baseImage: imagebuilder.BaseContainerImage.fromDockerHub('amazonlinux', 'latest'),
795
795
  targetRepository: imagebuilder.Repository.fromEcr(
796
796
  ecr.Repository.fromRepositoryName(this, 'Repository', 'my-container-repo')
797
797
  ),
798
798
  components: [
799
799
  {
800
- component: imagebuilder.AwsManagedComponent.updateOS(this, 'UpdateOS', {
800
+ component: imagebuilder.AmazonManagedComponent.updateOs(this, 'UpdateOS', {
801
801
  platform: imagebuilder.Platform.LINUX
802
802
  })
803
803
  },
804
804
  {
805
- component: imagebuilder.AwsManagedComponent.awsCliV2(this, 'AwsCli', {
805
+ component: imagebuilder.AmazonManagedComponent.awsCliV2(this, 'AwsCli', {
806
806
  platform: imagebuilder.Platform.LINUX
807
807
  })
808
808
  }
@@ -1070,17 +1070,17 @@ AWS provides a collection of managed components for common tasks:
1070
1070
 
1071
1071
  ```ts
1072
1072
  // Install AWS CLI v2
1073
- const awsCliComponent = imagebuilder.AwsManagedComponent.awsCliV2(this, 'AwsCli', {
1073
+ const awsCliComponent = imagebuilder.AmazonManagedComponent.awsCliV2(this, 'AwsCli', {
1074
1074
  platform: imagebuilder.Platform.LINUX
1075
1075
  });
1076
1076
 
1077
1077
  // Update the operating system
1078
- const updateComponent = imagebuilder.AwsManagedComponent.updateOS(this, 'UpdateOS', {
1078
+ const updateComponent = imagebuilder.AmazonManagedComponent.updateOs(this, 'UpdateOS', {
1079
1079
  platform: imagebuilder.Platform.LINUX
1080
1080
  });
1081
1081
 
1082
1082
  // Reference any AWS-managed component by name
1083
- const customAwsComponent = imagebuilder.AwsManagedComponent.fromAwsManagedComponentName(
1083
+ const customAwsComponent = imagebuilder.AmazonManagedComponent.fromAmazonManagedComponentName(
1084
1084
  this,
1085
1085
  'CloudWatchAgent',
1086
1086
  'amazon-cloudwatch-agent-linux'
@@ -1517,15 +1517,15 @@ AWS provides a collection of workflows for common scenarios:
1517
1517
 
1518
1518
  ```ts
1519
1519
  // Build workflows
1520
- const buildImageWorkflow = imagebuilder.AwsManagedWorkflow.buildImage(this, 'BuildImage');
1521
- const buildContainerWorkflow = imagebuilder.AwsManagedWorkflow.buildContainer(this, 'BuildContainer');
1520
+ const buildImageWorkflow = imagebuilder.AmazonManagedWorkflow.buildImage(this, 'BuildImage');
1521
+ const buildContainerWorkflow = imagebuilder.AmazonManagedWorkflow.buildContainer(this, 'BuildContainer');
1522
1522
 
1523
1523
  // Test workflows
1524
- const testImageWorkflow = imagebuilder.AwsManagedWorkflow.testImage(this, 'TestImage');
1525
- const testContainerWorkflow = imagebuilder.AwsManagedWorkflow.testContainer(this, 'TestContainer');
1524
+ const testImageWorkflow = imagebuilder.AmazonManagedWorkflow.testImage(this, 'TestImage');
1525
+ const testContainerWorkflow = imagebuilder.AmazonManagedWorkflow.testContainer(this, 'TestContainer');
1526
1526
 
1527
1527
  // Distribution workflows
1528
- const distributeContainerWorkflow = imagebuilder.AwsManagedWorkflow.distributeContainer(this, 'DistributeContainer');
1528
+ const distributeContainerWorkflow = imagebuilder.AmazonManagedWorkflow.distributeContainer(this, 'DistributeContainer');
1529
1529
  ```
1530
1530
 
1531
1531
  ### Lifecycle Policy
@@ -239,7 +239,7 @@ For more information, see [Amazon MSK Express Brokers](https://docs.aws.amazon.c
239
239
 
240
240
  **Note:** When using Express Brokers, the following constraints apply:
241
241
 
242
- - Apache Kafka version must be 3.6.x or 3.8.x
242
+ - Apache Kafka version must be 3.6.x, 3.8.x, or 3.9.x
243
243
  - You must specify the `instanceType`
244
244
  - The VPC must have at least 3 subnets (across 3 AZs)
245
245
  - `ebsStorageInfo` is not supported
@@ -9,6 +9,7 @@ import { App, Fn, RemovalPolicy, ResourceEnvironment, Stack, UnscopedValidationE
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';
12
+ import { SOLUTION_STACK_NAME } from '../../utils/aws-elasticbeanstalk';
12
13
 
13
14
  /**
14
15
  * To validate that the deployment actually succeeds, perform the following actions:
@@ -93,8 +94,7 @@ const beanstalkApp = new elasticbeanstalk.CfnApplication(stack, 'beastalk-app',
93
94
  const beanstalkEnv = new elasticbeanstalk.CfnEnvironment(stack, 'beanstlk-env', {
94
95
  applicationName: beanstalkApp.applicationName!,
95
96
  environmentName: 'codepipeline-test-env',
96
- // see https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs
97
- solutionStackName: '64bit Amazon Linux 2023 v6.6.2 running Node.js 20',
97
+ solutionStackName: SOLUTION_STACK_NAME.NODEJS_20,
98
98
  optionSettings: [
99
99
  {
100
100
  namespace: 'aws:autoscaling:launchconfiguration',
@@ -0,0 +1,42 @@
1
+ import * as cdk from 'aws-cdk-lib';
2
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
3
+ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
4
+ import { EC2_RESTRICT_DEFAULT_SECURITY_GROUP } from 'aws-cdk-lib/cx-api';
5
+
6
+ class EuscVpcEndpointStack extends cdk.Stack {
7
+ constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
8
+ super(scope, id, props);
9
+ this.node.setContext(EC2_RESTRICT_DEFAULT_SECURITY_GROUP, false);
10
+
11
+ const vpc = new ec2.Vpc(this, 'EuscVpc');
12
+
13
+ // Test VPC endpoints for eusc-de-east-1 region services
14
+ vpc.addInterfaceEndpoint('EcrDkrEndpoint', {
15
+ service: ec2.InterfaceVpcEndpointAwsService.ECR_DOCKER,
16
+ });
17
+
18
+ vpc.addInterfaceEndpoint('EcrApiEndpoint', {
19
+ service: ec2.InterfaceVpcEndpointAwsService.ECR,
20
+ });
21
+
22
+ vpc.addInterfaceEndpoint('ApiGatewayEndpoint', {
23
+ service: ec2.InterfaceVpcEndpointAwsService.APIGATEWAY,
24
+ });
25
+
26
+ vpc.addInterfaceEndpoint('SecurityHubEndpoint', {
27
+ service: ec2.InterfaceVpcEndpointAwsService.SECURITYHUB,
28
+ });
29
+ }
30
+ }
31
+
32
+ const app = new cdk.App();
33
+
34
+ const testCase = new EuscVpcEndpointStack(app, 'aws-cdk-ec2-vpc-endpoint-eusc', {
35
+ env: { region: 'eusc-de-east-1' },
36
+ });
37
+
38
+ new IntegTest(app, 'vpc-endpoint-eusc', {
39
+ testCases: [testCase],
40
+ });
41
+
42
+ app.synth();
@@ -1665,26 +1665,21 @@ Managed Instances Capacity Providers allow you to use AWS-managed EC2 instances
1665
1665
 
1666
1666
  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.
1667
1667
 
1668
+ #### IAM Roles Setup
1669
+ Managed instances require an infrastructure and an EC2 instance profile. You can either provide your own infrastructure role and/or instance profile, or let the construct create them automatically.
1670
+
1671
+ Option 1: Let CDK create the role and instance profile automatically
1668
1672
  ```ts
1669
1673
  declare const vpc: ec2.Vpc;
1670
- declare const infrastructureRole: iam.Role;
1671
- declare const instanceProfile: iam.InstanceProfile;
1672
1674
 
1673
1675
  const cluster = new ecs.Cluster(this, 'Cluster', { vpc });
1674
1676
 
1675
- // Create a Managed Instances Capacity Provider
1676
1677
  const miCapacityProvider = new ecs.ManagedInstancesCapacityProvider(this, 'MICapacityProvider', {
1677
- infrastructureRole,
1678
- ec2InstanceProfile: instanceProfile,
1679
1678
  subnets: vpc.privateSubnets,
1680
- securityGroups: [new ec2.SecurityGroup(this, 'MISecurityGroup', { vpc })],
1681
1679
  instanceRequirements: {
1682
1680
  vCpuCountMin: 1,
1683
1681
  memoryMin: Size.gibibytes(2),
1684
- cpuManufacturers: [ec2.CpuManufacturer.INTEL],
1685
- acceleratorManufacturers: [ec2.AcceleratorManufacturer.NVIDIA],
1686
1682
  },
1687
- propagateTags: ecs.PropagateManagedInstancesTags.CAPACITY_PROVIDER,
1688
1683
  });
1689
1684
 
1690
1685
  // Optionally configure security group rules using IConnectable interface
@@ -1718,16 +1713,83 @@ new ecs.FargateService(this, 'FargateService', {
1718
1713
  });
1719
1714
  ```
1720
1715
 
1716
+ Option 2: If you don't want to use the `AmazonECSInfrastructureRolePolicyForManagedInstances` managed policy for the ECS infrastructure role, you can create a custom infrastructure role with the required permissions. See [documentation](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/infrastructure_IAM_role.html) for what permissions are needed for the ECS infrastructure role.
1717
+
1718
+ You can also choose not to use the automatically created ec2InstanceProfile. See [ECS documentation](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-instance-profile.html) for what permissions are required for the profile's role.
1719
+
1720
+ ```ts
1721
+ declare const vpc: ec2.Vpc;
1722
+
1723
+ const cluster = new ecs.Cluster(this, 'Cluster', { vpc });
1724
+
1725
+ // Add your custom policies to the role.
1726
+ const customInstanceRole = new iam.Role(this, 'CustomInstanceRole', {
1727
+ assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
1728
+ });
1729
+
1730
+ const customInstanceProfile = new iam.InstanceProfile(this, 'CustomInstanceProfile', {
1731
+ role: customInstanceRole,
1732
+ });
1733
+
1734
+ // Add your custom policies to the role.
1735
+ const customInfrastructureRole = new iam.Role(this, 'CustomInfrastructureRole', {
1736
+ assumedBy: new iam.ServicePrincipal('ecs.amazonaws.com'),
1737
+ });
1738
+
1739
+ // Add PassRole permission to allow ECS to pass the instance role to EC2.
1740
+ customInfrastructureRole.addToPolicy(new iam.PolicyStatement({
1741
+ effect: iam.Effect.ALLOW,
1742
+ actions: ['iam:PassRole'],
1743
+ resources: [customInstanceRole.roleArn],
1744
+ conditions: {
1745
+ StringEquals: {
1746
+ 'iam:PassedToService': 'ec2.amazonaws.com',
1747
+ },
1748
+ },
1749
+ }));
1750
+
1751
+ const miCapacityProviderCustom = new ecs.ManagedInstancesCapacityProvider(this, 'MICapacityProviderCustomRoles', {
1752
+ infrastructureRole: customInfrastructureRole,
1753
+ ec2InstanceProfile: customInstanceProfile,
1754
+ subnets: vpc.privateSubnets,
1755
+ });
1756
+
1757
+ // Add the capacity provider to the cluster
1758
+ cluster.addManagedInstancesCapacityProvider(miCapacityProviderCustom);
1759
+
1760
+ const taskDefinition = new ecs.TaskDefinition(this, 'TaskDef', {
1761
+ memoryMiB: '512',
1762
+ cpu: '256',
1763
+ networkMode: ecs.NetworkMode.AWS_VPC,
1764
+ compatibility: ecs.Compatibility.MANAGED_INSTANCES,
1765
+ });
1766
+
1767
+ taskDefinition.addContainer('web', {
1768
+ image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'),
1769
+ memoryReservationMiB: 256,
1770
+ });
1771
+
1772
+
1773
+ new ecs.FargateService(this, 'FargateService', {
1774
+
1775
+ cluster,
1776
+ taskDefinition,
1777
+ minHealthyPercent: 100,
1778
+ capacityProviderStrategies: [
1779
+ {
1780
+ capacityProvider: miCapacityProviderCustom.capacityProviderName,
1781
+ weight: 1,
1782
+ },
1783
+ ],
1784
+ });
1785
+ ```
1786
+
1721
1787
  You can specify detailed instance requirements to control which types of instances are used:
1722
1788
 
1723
1789
  ```ts
1724
- declare const infrastructureRole: iam.Role;
1725
- declare const instanceProfile: iam.InstanceProfile;
1726
1790
  declare const vpc: ec2.Vpc;
1727
1791
 
1728
1792
  const miCapacityProvider = new ecs.ManagedInstancesCapacityProvider(this, 'MICapacityProvider', {
1729
- infrastructureRole,
1730
- ec2InstanceProfile: instanceProfile,
1731
1793
  subnets: vpc.privateSubnets,
1732
1794
  instanceRequirements: {
1733
1795
  // Required: CPU and memory constraints
@@ -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 * 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-ec2-capacity-provider-managed-draining');
@@ -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
  });
@@ -2,12 +2,11 @@ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
2
  import * as elb from 'aws-cdk-lib/aws-elasticloadbalancing';
3
3
  import * as cdk from 'aws-cdk-lib';
4
4
  import * as ecs from 'aws-cdk-lib/aws-ecs';
5
+ import { CfnResource } from 'aws-cdk-lib';
5
6
 
6
7
  const app = new cdk.App({
7
8
  postCliContext: {
8
9
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
9
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
10
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
11
10
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
12
11
  },
13
12
  });
@@ -45,6 +44,14 @@ const lb = new elb.LoadBalancer(stack, 'LB', { vpc });
45
44
  lb.addListener({ externalPort: 80 });
46
45
  lb.addTarget(service);
47
46
 
47
+ // Suppress security guardian rule for CLB default behavior
48
+ lb.connections.securityGroups.forEach(sg => {
49
+ const cfnSg = sg.node.defaultChild as CfnResource;
50
+ cfnSg.addMetadata('guard', {
51
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
52
+ });
53
+ });
54
+
48
55
  new cdk.CfnOutput(stack, 'LoadBalancerDNS', { value: lb.loadBalancerDnsName });
49
56
 
50
57
  app.synth();
@@ -2,12 +2,11 @@ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
2
  import * as cloudmap from 'aws-cdk-lib/aws-servicediscovery';
3
3
  import * as cdk from 'aws-cdk-lib';
4
4
  import * as ecs from 'aws-cdk-lib/aws-ecs';
5
+ import { CfnResource } from 'aws-cdk-lib';
5
6
 
6
7
  const app = new cdk.App({
7
8
  postCliContext: {
8
9
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
9
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
10
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
11
10
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
12
11
  },
13
12
  });
@@ -33,6 +32,14 @@ const capacity = cluster.addCapacity('capacity', {
33
32
  });
34
33
  capacity.connections.allowFromAnyIpv4(ec2.Port.tcpRange(32768, 61000));
35
34
 
35
+ // Suppress security guardian rule for intentional test setup
36
+ capacity.connections.securityGroups.forEach(sg => {
37
+ const cfnSg = sg.node.defaultChild as CfnResource;
38
+ cfnSg.addMetadata('guard', {
39
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
40
+ });
41
+ });
42
+
36
43
  cluster.addDefaultCloudMapNamespace({ name: 'aws-ecs-integ' });
37
44
 
38
45
  const taskDefinition = new ecs.Ec2TaskDefinition(stack, 'TaskDef', {});
@@ -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
  });
@@ -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
  });
@@ -8,8 +8,6 @@ import * as integ from '@aws-cdk/integ-tests-alpha';
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
  });
@@ -8,8 +8,6 @@ import * as iam from 'aws-cdk-lib/aws-iam';
8
8
  const app = new cdk.App({
9
9
  postCliContext: {
10
10
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
11
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': true,
12
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
13
11
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
14
12
  },
15
13
  });
@@ -7,8 +7,6 @@ import * as ecs 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
  });
@@ -8,8 +8,6 @@ import * as ecs from 'aws-cdk-lib/aws-ecs';
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
  });
@@ -10,8 +10,6 @@ const app = new cdk.App({
10
10
  postCliContext: {
11
11
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
12
12
  '@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions': true,
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
  });
@@ -10,8 +10,6 @@ import { IntegTest } from '@aws-cdk/integ-tests-alpha';
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
  });
@@ -8,8 +8,6 @@ import * as ecs from 'aws-cdk-lib/aws-ecs';
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
  });
@@ -3,12 +3,11 @@ import * as ec2 from 'aws-cdk-lib/aws-ec2';
3
3
  import * as s3_assets from 'aws-cdk-lib/aws-s3-assets';
4
4
  import * as cdk from 'aws-cdk-lib';
5
5
  import * as ecs from 'aws-cdk-lib/aws-ecs';
6
+ import { CfnResource } from 'aws-cdk-lib';
6
7
 
7
8
  const app = new cdk.App({
8
9
  postCliContext: {
9
10
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
10
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
11
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
12
11
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
13
12
  },
14
13
  });
@@ -69,6 +68,13 @@ container.addPortMappings({
69
68
  // Create a security group that allows tcp @ port 80
70
69
  const securityGroup = new ec2.SecurityGroup(stack, 'websvc-sg', { vpc });
71
70
  securityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(80));
71
+
72
+ // Suppress security guardian rule for intentional test setup
73
+ const cfnSecurityGroup = securityGroup.node.defaultChild as CfnResource;
74
+ cfnSecurityGroup.addMetadata('guard', {
75
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
76
+ });
77
+
72
78
  new ecs.Ec2Service(stack, 'Service', {
73
79
  cluster,
74
80
  taskDefinition,
@@ -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
  });
@@ -2,12 +2,11 @@ import * as ec2 from 'aws-cdk-lib/aws-ec2';
2
2
  import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
3
3
  import * as cdk from 'aws-cdk-lib';
4
4
  import * as ecs from 'aws-cdk-lib/aws-ecs';
5
+ import { CfnResource } from 'aws-cdk-lib';
5
6
 
6
7
  const app = new cdk.App({
7
8
  postCliContext: {
8
9
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
9
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
10
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
11
10
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
12
11
  },
13
12
  });
@@ -49,6 +48,14 @@ listener.addTargets('ECS', {
49
48
  targets: [service],
50
49
  });
51
50
 
51
+ // Suppress security guardian rule for ALB default behavior (open: true)
52
+ lb.connections.securityGroups.forEach(sg => {
53
+ const cfnSg = sg.node.defaultChild as CfnResource;
54
+ cfnSg.addMetadata('guard', {
55
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
56
+ });
57
+ });
58
+
52
59
  new cdk.CfnOutput(stack, 'LoadBalancerDNS', { value: lb.loadBalancerDnsName });
53
60
 
54
61
  app.synth();
@@ -3,12 +3,11 @@ import * as ec2 from 'aws-cdk-lib/aws-ec2';
3
3
  import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
4
4
  import * as cdk from 'aws-cdk-lib';
5
5
  import * as ecs from 'aws-cdk-lib/aws-ecs';
6
+ import { CfnResource } from 'aws-cdk-lib';
6
7
 
7
8
  const app = new cdk.App({
8
9
  postCliContext: {
9
10
  '@aws-cdk/aws-lambda:useCdkManagedLogGroup': false,
10
- '@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature': false,
11
- '@aws-cdk/aws-ecs:disableEcsImdsBlocking': false,
12
11
  '@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy': false,
13
12
  },
14
13
  });
@@ -49,6 +48,14 @@ listener.addTargets('ECS', {
49
48
  targets: [service],
50
49
  });
51
50
 
51
+ // Suppress security guardian rule for ALB default behavior (open: true)
52
+ lb.connections.securityGroups.forEach(sg => {
53
+ const cfnSg = sg.node.defaultChild as CfnResource;
54
+ cfnSg.addMetadata('guard', {
55
+ SuppressedRules: ['EC2_NO_OPEN_SECURITY_GROUPS'],
56
+ });
57
+ });
58
+
52
59
  new cdk.CfnOutput(stack, 'LoadBalancerDNS', { value: lb.loadBalancerDnsName });
53
60
 
54
61
  app.synth();