You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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应用源码包根目录创建.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:54:31