Elastic Beanstalk .ebextensions配置:基于环境选择安全组
实现Elastic Beanstalk按环境自动选择负载均衡器安全组
核心思路是利用Elastic Beanstalk内置的AWSEBEnvironmentName环境变量,在.ebextensions配置文件中通过container_commands执行Shell条件判断,动态配置负载均衡器的安全组。
具体配置步骤
- 在应用代码根目录下创建(或修改)
.ebextensions/lb-security-group.config文件,内容如下:
option_settings: # 先设置默认的非生产环境安全组 aws:elbv2:loadbalancer: SecurityGroups: 'sg-nonPRODXXX' container_commands: 01_switch_prod_lb_security_group: command: | # 判断当前环境名是否符合生产环境规则,这里用前缀匹配,可改成精确匹配 if [[ "$AWSEBEnvironmentName" == PROD_* ]]; then # 替换EB内部配置中的安全组ID为生产环境值 sed -i "s/sg-nonPRODXXX/sg_Prodxxx/g" /opt/elasticbeanstalk/config/private/option_settings fi # 仅当环境名匹配生产规则时执行该命令(可选优化) test: "[[ \"$AWSEBEnvironmentName\" == PROD_* ]]"
- 配置细节说明:
option_settings中先定义默认的非生产安全组,确保非生产环境直接生效- 若你的生产环境名是精确的
PROD_namexxxx,可把判断逻辑改成[ "$AWSEBEnvironmentName" = "PROD_namexxxx" ] sed命令修改EB内部配置文件,EB会在后续部署流程中自动应用这个修改test字段用于提前过滤执行条件,避免不必要的命令运行
关键注意事项
AWSEBEnvironmentName是EB自动注入的环境变量,无需额外配置- 务必替换配置中的安全组ID为你实际的生产/非生产安全组ID
- 如果是VPC环境,要确保负载均衡器安全组和EC2实例安全组的规则匹配,避免流量阻断
- 部署前建议先在非生产环境测试配置,确认安全组切换逻辑正常
内容的提问来源于stack exchange,提问作者Andy P
相关产品推荐
相关产品推荐

