Skip to content

ec2: aws go cdk omits Throughput parameter for EBS block devices #34033

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
1 task
binglius opened this issue Apr 3, 2025 · 10 comments · Fixed by #34571
Closed
1 task

ec2: aws go cdk omits Throughput parameter for EBS block devices #34033

binglius opened this issue Apr 3, 2025 · 10 comments · Fixed by #34571
Assignees
Labels
@aws-cdk/aws-ec2 Related to Amazon Elastic Compute Cloud bug This issue is a bug. p1

Comments

@binglius
Copy link

binglius commented Apr 3, 2025

Describe the bug

I encounter an issue, When running cdk synth, the generated CloudFormation template lacks the Throughput parameter for EBS block devices, even though it is explicitly configured in the code. For example, the template should include:

      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            Iops: 10000
            Throughput: 500 -->>> is missing. 
            VolumeSize: 500
            VolumeType: gp3
      EbsOptimized: false

Here, my code.

    ebsOptions := &awsec2.EbsDeviceOptions{
        VolumeType: ebsVolumeType,
        Throughput: jsii.Number(throughput),
        Iops:      jsii.Number(iops),
    }

The source file indicates it's supported.
https://github.com/aws/aws-cdk-go/blob/awscdk/v2.187.0/awscdk/awsec2/EbsDeviceOptions.go#L33

Regression Issue

  • Select this option if this issue appears to be a regression.

Last Known Working CDK Version

No response

Expected Behavior

Create EC2 with specified EBS throughput.

Current Behavior

The EBS Size/IOPS are correct, but the throughput stays at 125M/s, the default value.

Reproduction Steps

Create ec2 with blockdevices and ebsOptions below.

    ebsOptions := &awsec2.EbsDeviceOptions{
        VolumeType: ebsVolumeType,
        Throughput: jsii.Number(throughput),
        Iops:      jsii.Number(iops),
    }

....

awsec2.NewInstance(stack, jsii.String(xxxxxxxxx), &awsec2.InstanceProps {
       ...
       BlockDevices: &blockDevices,
       ...
    }


Possible Solution

No response

Additional Information/Context

No response

CDK CLI Version

2.1007.0

Framework Version

No response

Node.js Version

v22.14.0

OS

MacOS/Gentoo Linux/Amazon Linux

Language

Go

Language Version

No response

Other information

No response

@binglius binglius added bug This issue is a bug. needs-triage This issue or PR still needs to be triaged. labels Apr 3, 2025
@github-actions github-actions bot added the @aws-cdk/aws-ec2 Related to Amazon Elastic Compute Cloud label Apr 3, 2025
@binglius binglius changed the title ec2: aws go cdk ommit Throughput parameter for EBS block devices ec2: aws go cdk omits Throughput parameter for EBS block devices Apr 3, 2025
@binglius
Copy link
Author

binglius commented Apr 3, 2025

Here is demo to reproduce this issue:

package main

import (
	"github.com/aws/aws-cdk-go/awscdk/v2"
	"github.com/aws/aws-cdk-go/awscdk/v2/awsec2"
	"github.com/aws/constructs-go/constructs/v10"
	"github.com/aws/jsii-runtime-go"
)

type EC2StackProps struct {
	awscdk.StackProps
	// Custom properties for EBS configuration
	DiskSizeGb int
	Iops       int
	Throughput int
}

func NewEC2Stack(scope constructs.Construct, id string, props *EC2StackProps) awscdk.Stack {
	var sprops awscdk.StackProps
	if props != nil {
		sprops = props.StackProps
	}
	stack := awscdk.NewStack(scope, &id, &sprops)

	// Create VPC
	vpc := awsec2.NewVpc(stack, jsii.String("VPC"), &awsec2.VpcProps{
		MaxAzs: jsii.Number(2),
	})

	// Define EC2 instance parameters
	instanceType := awsec2.InstanceType_Of(awsec2.InstanceClass_COMPUTE5, awsec2.InstanceSize_LARGE)
	
	// Get the latest Amazon Linux AMI
	ami := awsec2.NewAmazonLinuxImage(&awsec2.AmazonLinuxImageProps{
		Generation: awsec2.AmazonLinuxGeneration_AMAZON_LINUX_2,
	})

	// Create block device with EBS configuration
	blockDevice := awsec2.BlockDevice{
		DeviceName: jsii.String("/dev/xvda"),
		Volume: awsec2.BlockDeviceVolume_Ebs(jsii.Number(float64(props.DiskSizeGb)), &awsec2.EbsDeviceOptions{
			VolumeType:          awsec2.EbsDeviceVolumeType_GP3,
			Iops:                jsii.Number(float64(props.Iops)),
			Throughput:          jsii.Number(float64(props.Throughput)),
			DeleteOnTermination: jsii.Bool(true),
		}),
	}

	// Create a slice of pointers to BlockDevice
	blockDevices := []*awsec2.BlockDevice{&blockDevice}

	// Create EC2 instance
	awsec2.NewInstance(stack, jsii.String("EC2Instance"), &awsec2.InstanceProps{
		Vpc:          vpc,
		InstanceType: instanceType,
		MachineImage: ami,
		BlockDevices: &blockDevices, // Pass pointer to the slice
	})

	return stack
}

func main() {
	app := awscdk.NewApp(nil)

	NewEC2Stack(app, "EC2WithConfigurableEBSStack", &EC2StackProps{
		// Configurable EBS parameters
		DiskSizeGb: 100,  // 100 GB disk size
		Iops:       6000, // 6000 IOPS
		Throughput: 300,  // 300 MB/s throughput
	})

	app.Synth(nil)
}

@ykethan
Copy link
Contributor

ykethan commented Apr 3, 2025

Hey @binglius, thank you for reaching out. I was able to reproduce the issue using the following reproduction steps.

Reproduction Steps

TypeScript Implementation:

blockDevices: [
  {
    deviceName: "/dev/xvda",
    volume: cdk.aws_ec2.BlockDeviceVolume.ebs(500, {
      volumeType: cdk.aws_ec2.EbsDeviceVolumeType.GP3,
      iops: 10000,
      throughput: 500  // property
    })
  }
]

Run cdk synth
Observe that the throughput parameter is missing in the generated CloudFormation template

Generated CloudFormation:

BlockDeviceMappings:
  - DeviceName: /dev/xvda
    Ebs:
      Iops: 10000
      VolumeSize: 500
      VolumeType: gp3
      # Throughput parameter is missing

Workaround

As a workaround, i was able to override the Throughput property

const cfnInstance = testInstance.node
      .defaultChild as cdk.aws_ec2.CfnInstance;
    cfnInstance.addOverride(
      "Properties.BlockDeviceMappings.0.Ebs.Throughput",
      500
    );

Generated CloudFormation:

   BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            Iops: 10000
            VolumeSize: 500
            VolumeType: gp3
            Throughput: 500

Marking this as bug.

@ykethan ykethan added p2 and removed needs-triage This issue or PR still needs to be triaged. labels Apr 3, 2025
@ykethan ykethan removed their assignment Apr 3, 2025
@pahud
Copy link
Contributor

pahud commented Apr 3, 2025

minimal reproducible code

import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

export class Issue34033ReproStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Create VPC
    const vpc = new ec2.Vpc(this, 'VPC', {
      maxAzs: 2, // Default is 3, match Go example
      subnetConfiguration: [
        {
          cidrMask: 24,
          name: 'Public',
          subnetType: ec2.SubnetType.PUBLIC,
        },
        {
          cidrMask: 24,
          name: 'Private',
          subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
        }
      ]
    });

    // Define EC2 instance type
    const instanceType = ec2.InstanceType.of(ec2.InstanceClass.C5, ec2.InstanceSize.LARGE);

    // Get the latest Amazon Linux 2 AMI
    const ami = new ec2.AmazonLinuxImage({
      generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2,
    });

    // Define the root block device with specific GP3 settings
    const rootBlockDevice: ec2.BlockDevice = {
      deviceName: '/dev/xvda', // Standard root device name for Linux AMIs
      volume: ec2.BlockDeviceVolume.ebs(100, { // 100 GB size
        volumeType: ec2.EbsDeviceVolumeType.GP3,
        iops: 6000, // Specific IOPS
        throughput: 300, // Specific Throughput (MiB/s)
        deleteOnTermination: true,
      }),
    };

    // Create EC2 instance
    new ec2.Instance(this, 'EC2Instance', {
      vpc: vpc,
      instanceType: instanceType,
      machineImage: ami,
      blockDevices: [rootBlockDevice], // Pass the configured block device
      vpcSubnets: {
        subnetType: ec2.SubnetType.PUBLIC, // Place instance in a public subnet for simplicity
      },
    });
  }
}

on cdk synth

 EC2Instance770AAE32:
    Type: AWS::EC2::Instance
    Properties:
      # ... other properties ...
      BlockDeviceMappings:
        - DeviceName: /dev/xvda
          Ebs:
            DeleteOnTermination: true
            Iops: 6000             # Correctly set
            VolumeSize: 100          # Correctly set
            VolumeType: gp3          # Correctly set
            # Throughput: 300  <-- This property is MISSING
      # ... other properties ...
    Metadata:
      aws:cdk:path: Issue34033ReproStack/EC2Instance/Resource

Interesting I don't see Throughput in the AWS::EC2::Instance Ebs prop

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html

But CDK does have this prop in the interface.

export interface EbsDeviceOptionsBase {
/**
* Indicates whether to delete the volume when the instance is terminated.
*
* @default - true for Amazon EC2 Auto Scaling, false otherwise (e.g. EBS)
*/
readonly deleteOnTermination?: boolean;
/**
* The number of I/O operations per second (IOPS) to provision for the volume.
*
* Must only be set for `volumeType`: `EbsDeviceVolumeType.IO1`
*
* The maximum ratio of IOPS to volume size (in GiB) is 50:1, so for 5,000 provisioned IOPS,
* you need at least 100 GiB storage on the volume.
*
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html
*
* @default - none, required for `EbsDeviceVolumeType.IO1`
*/
readonly iops?: number;
/**
* The EBS volume type
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html
*
* @default `EbsDeviceVolumeType.GENERAL_PURPOSE_SSD` or `EbsDeviceVolumeType.GENERAL_PURPOSE_SSD_GP3` if
* `@aws-cdk/aws-ec2:ebsDefaultGp3Volume` is enabled.
*/
readonly volumeType?: EbsDeviceVolumeType;
/**
* The throughput to provision for a `gp3` volume.
*
* Valid Range: Minimum value of 125. Maximum value of 1000.
*
* `gp3` volumes deliver a consistent baseline throughput performance of 125 MiB/s.
* You can provision additional throughput for an additional cost at a ratio of 0.25 MiB/s per provisioned IOPS.
*
* @see https://docs.aws.amazon.com/ebs/latest/userguide/general-purpose.html#gp3-performance
*
* @default - 125 MiB/s.
*/
readonly throughput?: number;
}

Looks like L1 CfnInstance.EbsProperty actually does not support that thus being ignored. I can't find out the root cause for now. Requesting further input from the team.

@pahud pahud added p1 and removed p2 labels Apr 3, 2025
@scorbiere
Copy link
Contributor

In the PR which added the throughput property #30716 we can see that the impact on the integ test template was on the LaunchTemplateData block. I don't see this block in this example.

Is it a different use case?

@pahud
Copy link
Contributor

pahud commented Apr 3, 2025

AWS::EC2::LaunchTemplate Ebs DOES have Throughtput
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html

but AWS::EC2::Instance Ebs does NOT.
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html

And they are sharing the same BlockDeviceVolume.ebs using the same BlockDeviceVolume that extends EbsDeviceOptionsBase

export interface EbsDeviceOptionsBase {
/**
* Indicates whether to delete the volume when the instance is terminated.
*
* @default - true for Amazon EC2 Auto Scaling, false otherwise (e.g. EBS)
*/
readonly deleteOnTermination?: boolean;
/**
* The number of I/O operations per second (IOPS) to provision for the volume.
*
* Must only be set for `volumeType`: `EbsDeviceVolumeType.IO1`
*
* The maximum ratio of IOPS to volume size (in GiB) is 50:1, so for 5,000 provisioned IOPS,
* you need at least 100 GiB storage on the volume.
*
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html
*
* @default - none, required for `EbsDeviceVolumeType.IO1`
*/
readonly iops?: number;
/**
* The EBS volume type
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html
*
* @default `EbsDeviceVolumeType.GP2`
*/
readonly volumeType?: EbsDeviceVolumeType;
/**
* The throughput that the volume supports, in MiB/s
* Takes a minimum of 125 and maximum of 1000.
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html
* @default - 125 MiB/s. Only valid on gp3 volumes.
*/
readonly throughput?: number;
}

Image

@pahud
Copy link
Contributor

pahud commented Apr 4, 2025

To improve the developer experience directly within the CDK library and prevent this confusion, we could consider two potential approaches:

Option 1: Introduce Type-Specific Interfaces (Breaking Change)

  • How: Modify the CDK's type system. Remove throughput from the base EbsDeviceOptionsBase interface and create two new interfaces:
    • InstanceEbsDeviceOptions (extending the base, without throughput)
    • LaunchTemplateEbsDeviceOptions (extending the base, with throughput)
    • Update ec2.Instance and ec2.LaunchTemplate constructs to accept only their respective option types for blockDevices.
  • Pros:
    • Provides compile-time safety, preventing incorrect usage patterns.
    • Makes the CDK API accurately reflect underlying CloudFormation capabilities.
  • Cons:
    • This would be a breaking change, requiring users who might currently (even if incorrectly) specify throughput on ec2.Instance to update their code.

Option 2: Add Synthesis-Time Validation (Non-Breaking)

  • How: Modify the synthesis logic for the ec2.Instance construct. When processing the blockDevices property, detect if throughput is specified for an EBS volume. If it is, throw an explicit Error during cdk synth.
  • Pros:
    • Non-breaking change; existing code continues to compile.
    • Provides clear, immediate feedback during synthesis, guiding users to the correct pattern (Launch Templates).
    • Relatively simpler to implement within the existing structure.
  • Cons:
    • The error is caught later (at synthesis time) rather than compile time.
    • The API still allows writing the incorrect pattern, even though it fails during synth.

Both options aim to address the underlying issue and guide users correctly. Option 1 is stricter and safer from a type perspective but introduces a breaking change. Option 2 is less disruptive but relies on runtime (synthesis-time) validation.

@binglius
Copy link
Author

binglius commented Apr 4, 2025

Hi @ykethan,

I' building an automate benchmark solution, I'm afraid this workaround doesn't suite my use case. I'll wait for an official solution.

const cfnInstance = testInstance.node
      .defaultChild as cdk.aws_ec2.CfnInstance;
    cfnInstance.addOverride(
      "Properties.BlockDeviceMappings.0.Ebs.Throughput",
      500
    );

@ykethan
Copy link
Contributor

ykethan commented Apr 4, 2025

Hey @binglius, no worries. wanted to summarize the information and the potential workaround for this issue.
uUsing the Ec2 launch template to add the throughput does appear to mitigate the issue. On a quick test deploy using the following template i was able deploy a EBS volume with throughput as 800.

import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";

export class MyProjectStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Create VPC
    const vpc = new cdk.aws_ec2.Vpc(this, "TestVpc", {
      maxAzs: 2,
      natGateways: 0,
    });

    // Create Launch Template with EBS volume configuration
    const launchTemplate = new cdk.aws_ec2.LaunchTemplate(
      this,
      "TestLaunchTemplate",
      {
        launchTemplateName: "test-launch-template",
        instanceType: cdk.aws_ec2.InstanceType.of(
          cdk.aws_ec2.InstanceClass.T3,
          cdk.aws_ec2.InstanceSize.LARGE
        ),
        machineImage: new cdk.aws_ec2.AmazonLinuxImage({
          generation: cdk.aws_ec2.AmazonLinuxGeneration.AMAZON_LINUX_2,
        }),
        blockDevices: [
          {
            deviceName: "/dev/xvda",
            volume: cdk.aws_ec2.BlockDeviceVolume.ebs(500, {
              volumeType: cdk.aws_ec2.EbsDeviceVolumeType.GP3,
              iops: 10000,
              throughput: 800, // This will work with Launch Template
            }),
          },
        ],
      }
    );

    // Create EC2 instance using Launch Template
    new cdk.aws_ec2.CfnInstance(this, "TestInstance", {
      launchTemplate: {
        launchTemplateId: launchTemplate.launchTemplateId,
        version: launchTemplate.latestVersionNumber,
      },
      subnetId: vpc.publicSubnets[0].subnetId,
    });
  }
}

Could you let us know if this could potentially fix the issue for your use case while the team streamlines this experience?

@binglius
Copy link
Author

binglius commented Apr 5, 2025

Hi @ykethan, Thank you for the information, yes the Launch Template works. I prefer awsec2.NewInstance() + Launch template solution(not awsec2.NewCfnInstance() + Launch template), because the awsec2.NewInstance() provides a higher level interface. I was able to do the same in go, but I had to forcibly delete the original network properties Otherwise it fails with following errors. Not sure if there is some better solutions.

Resource handler returned message: "Network interfaces and an instance-level security groups may not be specified on the same request (Service: Ec2, Status Code: 400, Request ID: 48298088-4e35-4b17-9731-6f48408c1977e48) (SDK Attempt Count: 1)" (RequestToken: 7414fa05-24a4-e50d-c2e1-59e6cbe1b9c5, HandlerErrorCode: InvalidRequest)
Resource handler returned message: "Network interfaces and an instance-level subnet ID may not be specified on the same request (Service: Ec2, Status Code: 400, Request ID: 20b81e19-19b5-4395-bf72-fca827f44eff) (SDK Attempt Count: 1)" (RequestToken: 89ee3bce-a6a4-d50e-08f6-07e1537737d9, HandlerErrorCode: InvalidRequest)

Workaround, forcibly delete the network properties.

                        // 删除原始网络属性
                        cfnInstance.AddDeletionOverride(jsii.String("Properties.SubnetId"))
                        cfnInstance.AddDeletionOverride(jsii.String("Properties.SecurityGroupIds"))

Here is my code by using Launch Template to support EFA/EnaExpress and EBS Throughput

        // 获取 EBS 设备属性
        ebsDeviceProps := ebsVolume.EbsDevice()

        throughput := *ebsDeviceProps.Throughput

        // 检查是否需要创建启动模板
        needsLaunchTemplate := ec2Instance.EnableEFA || ec2Instance.EnaSrdEnabled || throughput > 125

        if needsLaunchTemplate {
                // 获取原始EC2实例的L1构造
                cfnInstance := inst.Node().DefaultChild().(awsec2.CfnInstance)

                // 创建启动模板数据
                launchTemplateData := &awsec2.CfnLaunchTemplate_LaunchTemplateDataProperty{}

                // 如果需要配置网络接口(EFA或EnaSrd)
                if ec2Instance.EnableEFA || ec2Instance.EnaSrdEnabled {
                        // 获取子网ID和安全组IDs
                        subnetId := cfnInstance.SubnetId()
                        securityGroupIds := cfnInstance.SecurityGroupIds()

                        // 删除原始网络属性
                        cfnInstance.AddDeletionOverride(jsii.String("Properties.SubnetId"))
                        cfnInstance.AddDeletionOverride(jsii.String("Properties.SecurityGroupIds"))

                        // 准备网络接口配置
                        networkInterface := &awsec2.CfnLaunchTemplate_NetworkInterfaceProperty{
                                DeviceIndex: jsii.Number(0),
                                SubnetId: subnetId,
                                Groups: securityGroupIds,
                                DeleteOnTermination: jsii.Bool(true),
                        }

                        // 如果启用EFA,设置接口类型为efa
                        if ec2Instance.EnableEFA {
                                networkInterface.InterfaceType = jsii.String("efa")
                        }

                        // 如果启用EnaSrd,在网络接口中添加EnaSrdSpecification配置
                        if ec2Instance.EnaSrdEnabled {
                                networkInterface.EnaSrdSpecification = &awsec2.CfnLaunchTemplate_EnaSrdSpecificationProperty{
                                        EnaSrdEnabled: jsii.Bool(true),
                                        EnaSrdUdpSpecification: &awsec2.CfnLaunchTemplate_EnaSrdUdpSpecificationProperty{
                                                EnaSrdUdpEnabled: jsii.Bool(true),
                                        },
                                }
                        }

                        launchTemplateData.NetworkInterfaces = []interface{}{networkInterface}
                }

                // 如果需要配置高EBS吞吐量
                if throughput > 125 {
                        // 创建仅包含Throughput设置的EBS配置
                        ebsOverride := &awsec2.CfnLaunchTemplate_EbsProperty{
                                Throughput: jsii.Number(throughput),
                        }

                        // 创建块设备映射,只覆盖需要的属性
                        blockDeviceMapping := &awsec2.CfnLaunchTemplate_BlockDeviceMappingProperty{
                                DeviceName: jsii.String(deviceName),
                                Ebs: ebsOverride,
                        }

                        launchTemplateData.BlockDeviceMappings = []interface{}{blockDeviceMapping}
                }

                // 创建启动模板
                launchTemplate := awsec2.NewCfnLaunchTemplate(stack, jsii.String(ec2Instance.GetID()+"LaunchTemplate"), &awsec2.CfnLaunchTemplateProps{
                        LaunchTemplateName: jsii.String(ec2Instance.GetID() + "-launch-template"),
                        LaunchTemplateData: launchTemplateData,
                })

                // 使用AddPropertyOverride设置启动模板属性
                cfnInstance.AddPropertyOverride(jsii.String("LaunchTemplate"), map[string]interface{}{
                        "LaunchTemplateId": launchTemplate.Ref(),
                        "Version": launchTemplate.AttrLatestVersionNumber(), // 使用启动模板的最新版本号属性
                })
        }

@ozelalisen ozelalisen self-assigned this May 22, 2025
mergify bot pushed a commit that referenced this issue May 30, 2025
…34571)

### Issue # (if applicable)

Closes #34033.

### Reason for this change

The throughput property for GP3 volumes is not supported on EC2 instances and only works with Launch Templates. This causes confusion for users who try to set throughput on EC2 instance block devices, as the property is silently ignored.

### Description of changes

Added synthesis-time validation in the instanceBlockDeviceMappings function to detect when throughput is specified for an EBS volume on an EC2 instance. The validation throws a clear error message directing users to use Launch Templates instead.

### Describe any new or updated permissions being added

No new or updated IAM permissions are needed.

### Description of how you validated changes

Added a unit test that verifies the validation works correctly by attempting to create an EC2 instance with a GP3 volume that has throughput specified and confirming that the expected error message is thrown.

### Checklist
• [x] My code adheres to the [CONTRIBUTING GUIDE](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) and [DESIGN GUIDELINES](https://github.com/aws/aws-cdk/blob/main/docs/DESIGN_GUIDELINES.md)

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
@mergify mergify bot closed this as completed in #34571 May 30, 2025
Copy link
Contributor

Comments on closed issues and PRs are hard for our team to see.
If you need help, please open a new issue that references this one.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators May 30, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
@aws-cdk/aws-ec2 Related to Amazon Elastic Compute Cloud bug This issue is a bug. p1
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants