如何在AWS CDK中引用已购EC2/RDS预留实例及用于ASG?
AWS CDK中预留实例引用及Auto Scaling Group适配方案
一、引用已购买的EC2/RDS预留实例(RI)
AWS预留实例(RI)本质是计费优惠权益,而非可直接引用的资源实体,因此在CDK中无需显式引用RI的ID,只需确保后续创建的EC2/RDS实例与RI的属性完全匹配,AWS会自动将RI优惠应用到对应实例上:
- EC2 RI匹配条件:实例类型、区域/可用区、操作系统平台、租户属性(共享/专用)必须与RI一致
- RDS RI匹配条件:数据库引擎、实例类型、区域、多AZ配置必须与RI一致
注:你提供的文档链接对应的是容量预留(Capacity Reservation),这是一种预留计算容量的实体资源,和RI属于不同概念,需注意区分。
二、预留实例(RI)能否用于Auto Scaling Group
完全可以。只要ASG启动的EC2实例满足RI的匹配条件,AWS会自动将RI的计费优惠应用到ASG的实例上,无需额外绑定操作。ASG实例扩缩容时,AWS会自动匹配可用的RI权益。
三、在ASG中关联容量预留(非RI)的配置方法
若你需要指定ASG使用已创建的容量预留(而非RI计费优惠),可在ASG配置中添加capacityReservationSpecification属性,指定目标容量预留的ID。基于你提供的代码,修改后示例如下:
const asg = new autoscaling.AutoScalingGroup(this, `${props.project}-${props.environment}-ASG`, { vpc: this.vpc, instanceType: ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, props.environment == 'production' ? ec2.InstanceSize.SMALL : ec2.InstanceSize.MICRO), machineImage: new ec2.AmazonLinuxImage({ generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2 }), securityGroup: securityGroup, userData: ec2.UserData.custom(userData), minCapacity: 1, maxCapacity: 1, desiredCapacity: 1, role: role, // 配置使用指定的容量预留 capacityReservationSpecification: { capacityReservationTarget: { capacityReservationId: 'cr-xxxxxxxxx' // 替换为你的容量预留ID } } });
若你有多个容量预留并希望ASG自动选择可用的,也可通过capacityReservationResourceGroupArn指定容量预留资源组的ARN,而非单个ID。
内容的提问来源于stack exchange,提问作者golifeline
相关产品推荐
相关产品推荐

