如何通过CloudFormation YAML模板在指定VPC或子网中启动Amazon EC2实例
使用CloudFormation YAML在指定VPC/子网启动EC2实例
嘿,我来一步步教你怎么用CloudFormation YAML模板精准控制EC2实例在指定的VPC和子网里启动,包括必要的配置细节,避免踩坑~
核心逻辑说明
要实现这个需求,关键是在模板里明确指定两个核心属性:
- 给EC2实例关联目标VPC的子网ID
- 确保配套的安全组属于同一个目标VPC(EC2实例必须绑定安全组,且安全组和实例必须在同一个VPC内)
完整示例模板
下面是一个可直接使用的模板,包含了参数化配置(方便你灵活修改目标VPC、子网、实例类型等):
AWSTemplateFormatVersion: '2010-09-09' Description: 启动EC2实例到指定VPC和子网的CloudFormation模板 Parameters: TargetVpcId: Type: AWS::EC2::VPC::Id Description: 选择要部署EC2实例的目标VPC ID TargetSubnetId: Type: AWS::EC2::Subnet::Id Description: 选择目标VPC下的子网ID(实例将部署在此子网) InstanceType: Type: String Default: t2.micro Description: EC2实例类型,默认t2.micro AmiId: Type: String Description: 部署区域对应的AMI ID(比如us-east-1的Amazon Linux 2是ami-0c55b159cbfafe1f0) Resources: # 创建属于目标VPC的安全组 InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: 允许SSH和HTTP访问的安全组 VpcId: !Ref TargetVpcId # 绑定到指定VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 # 注意:生产环境请限制为特定IP段 - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 SecurityGroupEgress: - IpProtocol: -1 FromPort: 0 ToPort: 0 CidrIp: 0.0.0.0/0 # 在指定子网启动EC2实例 TargetEC2Instance: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: !Ref AmiId SubnetId: !Ref TargetSubnetId # 指定目标子网 SecurityGroups: - !Ref InstanceSecurityGroup # 绑定上面创建的安全组 Tags: - Key: Name Value: VPC-Subnet-Specific-EC2
关键部分拆解
- 参数化配置:模板里的
TargetVpcId和TargetSubnetId用了AWS::EC2::VPC::Id和AWS::EC2::Subnet::Id类型,在CloudFormation控制台部署时,会自动列出当前区域的可用VPC和子网,不用你手动复制ID,非常方便。 - 安全组绑定VPC:
InstanceSecurityGroup的VpcId属性直接引用TargetVpcId,确保安全组和目标VPC属于同一环境,避免跨VPC绑定的错误。 - EC2实例指定子网:
TargetEC2Instance的SubnetId属性明确指向TargetSubnetId,这是让实例在指定子网启动的核心配置。
部署步骤
- 打开AWS控制台,进入CloudFormation服务
- 点击“创建堆栈”,选择“上传模板文件”,把上面的YAML文件上传
- 填写堆栈名称,然后依次选择目标VPC、子网,输入对应区域的AMI ID,选择实例类型
- 一路点击下一步,最后确认创建,等待堆栈部署完成(大概1-2分钟)
注意事项
- 确保你选择的子网确实属于指定的VPC,不然CloudFormation会抛出验证错误
- 安全组的入站规则请根据实际需求调整,示例里的
0.0.0.0/0是测试用的,生产环境一定要限制为可信IP段 - AMI ID是区域专属的,比如us-west-2的Amazon Linux 2 AMI和us-east-1的不一样,一定要选当前部署区域的有效AMI
内容的提问来源于stack exchange,提问作者Sourabh
相关产品推荐
相关产品推荐

