如何为Elastic Beanstalk的EC2实例持久绑定Elastic IP
Elastic Beanstalk 环境EC2实例持久绑定Elastic IP方案
你遇到的EIP自动解绑是Elastic Beanstalk(EB)搭配Application Load Balancer(ALB)架构下的正常行为:ALB绑定的Auto Scaling Group(ASG)会在健康检查失败、平台更新、扩缩容时自动替换实例,旧实例被销毁时关联的EIP会自动解绑,新启动的实例默认不会继承之前手动绑定的EIP。
以下是可落地的持久绑定方案,按对现有架构的侵入度从低到高排序:
方案1:通过EB扩展配置实现实例启动自动绑定EIP(推荐)
不需要改动现有ALB高可用架构,直接通过EB原生的.ebextensions配置机制实现,适配多实例生产环境:
- 提前准备工作:
- 按EB环境ASG配置的最大实例数申请对应数量的EIP(比如生产环境ASG最大实例数设为3,就申请3个EIP),记录所有EIP的分配ID(格式为
eipalloc-xxxxxx) - 给EB环境使用的EC2实例角色添加3个权限:
ec2:DescribeAddresses、ec2:AssociateAddress、ec2:DescribeInstances,保证实例上的脚本有权限调用EC2接口操作EIP
- 按EB环境ASG配置的最大实例数申请对应数量的EIP(比如生产环境ASG最大实例数设为3,就申请3个EIP),记录所有EIP的分配ID(格式为
- 配置步骤:
在你的EB应用源码包根目录创建.ebextensions/01-persist-eip.config文件,写入以下配置(记得替换成你自己的EIP分配ID):
files: "/opt/elasticbeanstalk/hooks/appdeploy/post/00_associate_eip.sh": mode: "000755" owner: root group: root content: | #!/bin/bash INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/region) # 替换为你自己预留的EIP分配ID列表,空格分隔 EIP_ALLOC_IDS=("eipalloc-0abc123" "eipalloc-0def456" "eipalloc-0ghi789") for ALLOC_ID in "${EIP_ALLOC_IDS[@]}"; do BIND_INS=$(aws ec2 describe-addresses --allocation-ids $ALLOC_ID --region $REGION --query 'Addresses[0].InstanceId' --output text) if [ "$BIND_INS" == "None" ] || [ "$BIND_INS" == "$INSTANCE_ID" ]; then aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOC_ID --region $REGION --allow-reassociation exit 0 fi done
把配置随应用版本发布到EB环境后,所有新启动的实例都会在启动后自动从预留EIP池中选取空闲EIP绑定,不会出现IP变动。
方案2:单实例环境直接切换EB环境类型
如果是开发环境这类只需要1台实例、不需要高可用的场景,可以直接把EB环境从「负载均衡型」切换为「单实例型」:
- 单实例环境不会触发ASG自动替换实例的逻辑,手动给实例绑定EIP后不会自动解绑
- 注意:该方案不适合生产环境,单实例没有故障自动迁移能力,实例宕机后服务会直接中断
方案3:事件驱动的无服务器绑定逻辑
如果不想把EIP绑定逻辑嵌到应用配置里,可以通过事件触发的方式实现:
- 配置EventBridge监听EC2实例启动成功事件、ASG实例生命周期的
EC2_INSTANCE_LAUNCH事件 - 事件触发Lambda函数执行和方案1中相同的逻辑:查询新启动的实例ID,从预留EIP池选取空闲EIP完成绑定
- 该方案适合多EB环境统一管理EIP绑定规则的场景,不需要每个应用单独写配置
避坑提醒
不要通过关闭ASG健康检查、禁用实例替换的方式保留手动绑定的EIP,实例自动替换是EB+ALB架构保障服务可用性的核心机制,禁用后实例故障、平台安全更新时服务会直接中断,风险极高。
内容的提问来源于stack exchange,提问作者Keval savani
相关产品推荐
相关产品推荐

