AWS CloudFormation配置EC2静态公网IP问题求助
解决CloudFormation中EC2静态公网IP与栈输出同步问题
要解决EC2启停后公网IP变更、栈输出无法同步的问题,直接在CloudFormation模板中创建并绑定**弹性IP(EIP)**即可,以下是完整的YAML配置方案:
核心实现思路
通过CloudFormation同时定义弹性IP、EC2实例及两者的关联关系,栈输出直接指向弹性IP的公网地址(弹性IP是静态的,不受EC2启停影响)。
完整YAML模板示例
AWSTemplateFormatVersion: '2010-09-09' Description: 创建绑定弹性IP的EC2实例,并输出静态公网IP Resources: # 创建EC2实例(可根据需求调整实例类型、AMI等参数) MyEC2Instance: Type: AWS::EC2::Instance Properties: InstanceType: t2.micro ImageId: ami-0c55b159cbfafe1f0 # 替换为你所在区域的Amazon Linux 2 AMI ID SecurityGroups: [!Ref MySecurityGroup] # 关联安全组(需提前创建或在模板中定义) # 注意:无需开启自动分配公网IP,绑定EIP后会自动覆盖 # 创建弹性IP MyElasticIP: Type: AWS::EC2::EIP Properties: Domain: vpc # VPC环境下必须指定,EC2-Classic可省略 # 绑定弹性IP到EC2实例 EIPAssociation: Type: AWS::EC2::EIPAssociation Properties: InstanceId: !Ref MyEC2Instance EIP: !Ref MyElasticIP # 可选:模板内定义安全组(允许必要的访问,比如SSH、HTTP) MySecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow SSH and HTTP access 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 Outputs: # 输出弹性IP的静态公网地址 StaticPublicIP: Description: EC2实例的静态公网IP Value: !GetAtt MyElasticIP.PublicIp
关键配置说明
- 弹性IP创建:使用
AWS::EC2::EIP资源,VPC环境下必须指定Domain: vpc - EIP与EC2关联:通过
AWS::EC2::EIPAssociation资源绑定,确保EC2启动时自动关联静态IP - 栈输出:用
!GetAtt MyElasticIP.PublicIp直接输出弹性IP的公网地址,该值永久固定(除非手动释放EIP)
若使用现有弹性IP
如果你已经有创建好的弹性IP,只需修改模板:
- 添加参数传入现有EIP的
AllocationId:
Parameters: ExistingEIPAllocationId: Type: String Description: 现有弹性IP的Allocation ID
- 修改
EIPAssociation资源:
EIPAssociation: Type: AWS::EC2::EIPAssociation Properties: InstanceId: !Ref MyEC2Instance AllocationId: !Ref ExistingEIPAllocationId
- 输出部分改为引用现有EIP的PublicIp(需确保现有EIP在同一区域)
内容的提问来源于stack exchange,提问作者Wilko
相关产品推荐
相关产品推荐

