CloudFormation创建EC2时报groupName与subnet参数不兼容错误如何解决
CloudFormation模板报错修复及优化方案
核心报错解决
你收到的The parameter groupName cannot be used with the parameter subnet报错,原因是在自定义VPC的子网中创建EC2实例时,错误使用了SecurityGroups属性:
SecurityGroups仅支持EC2经典网络、默认VPC下按安全组名称关联的场景- 当显式指定
SubnetId(属于自定义VPC)时,必须使用SecurityGroupIds属性传入安全组ID
你需要修改两个EC2实例的配置,将SecurityGroups替换为SecurityGroupIds,修改示例如下:
EC2InstanceMule1: Type: AWS::EC2::Instance Properties: InstanceType: t2.micro ImageId: Fn::FindInMap: - RegionMap - Ref: AWS::Region - AMI SubnetId: Ref: Subnet1 # 把原来的SecurityGroups改为SecurityGroupIds SecurityGroupIds: - !GetAtt EC2SecurityGroup.GroupId KeyName: !Ref KeyName
EC2InstanceMule2做完全相同的修改即可解决该报错。
其他需要调整的配置
- CLB(经典负载均衡)配置缺失:你当前的CLB资源没有指定部署子网和访问类型,需要补充两个配置:
- 在模板参数部分新增两个公有子网的参数,用于部署CLB
- 在
LoadBalancerforEC2的Properties下新增如下配置:
# 配置为公网可访问的负载均衡 Scheme: internet-facing # 指定部署CLB的公有子网 Subnets: [!Ref 你新增的公有子网参数1, !Ref 你新增的公有子网参数2] - 安全规则风险:EC2安全组放开了0.0.0.0/0的22端口访问权限,你的EC2部署在私有子网本来无法直接公网SSH,这条规则没有实际意义还存在安全风险,建议直接删除,如需SSH访问建议通过公有子网的堡垒机跳转。
- RegionMap适配性差:当前的区域映射仅配置了us-west-2的AMI ID,如需在其他区域部署模板,需要补充对应区域的AMI,也可以直接使用SSM公共参数动态获取对应区域的官方AMI,避免硬编码。
- 私有子网路由检查:如果你的EC2需要访问公网拉取Docker镜像、更新软件,需要确保私有子网关联的路由表配置了指向公有子网NAT网关的路由规则。
内容的提问来源于stack exchange,提问作者SkyH0rn
相关产品推荐
相关产品推荐

