AWS Elastic Beanstalk每次部署是否更新.ebextensions与.platform配置?
问题1:.ebextensions与.platform配置的生效时机
- 两个文件夹下的配置每次向EB推送新版本部署时都会重新执行、生效,并非仅首次部署处理。
- 细分逻辑:
.ebextensions下的YAML配置(包安装、系统文件写入、commands/container_commands命令、服务配置等),每次部署都会按官方定义的优先级顺序执行:如果是安装类操作(比如yum装包),已存在的资源会跳过执行但逻辑仍会校验;如果是配置写入、命令执行类操作,会完全按照当前版本包里的配置重新运行。.platform下的配置(反向代理配置、平台运行时参数、各阶段部署钩子脚本等),每次部署都会覆盖EB平台的默认对应配置,钩子脚本也会按阶段依次触发。
- 注意事项:如果你在后续版本中删除了某条配置,已经通过该配置生成的操作系统层面资源(比如已安装的软件包、已写入的系统文件)不会被自动清理,需要额外编写清理逻辑处理。
问题2:AWS Elastic Beanstalk 部署底层运行逻辑
全局调度层逻辑
- 你上传的应用版本包(不管是CodePipeline推送还是手动上传)会被存储到EB关联的专属S3存储桶,控制平面先校验包结构、配置文件语法合法性,校验失败直接标记部署失败。
- 控制平面根据你选定的部署策略(全量部署、滚动部署、蓝绿部署、不可变部署)调度实例组,确定需要执行部署的实例范围。
单EC2实例内部部署流程(核心)
- 预部署准备:实例上运行的EB Agent进程拉取新版本包到本地临时目录,停止当前应用服务,备份上一版本的应用文件与运行配置,用于部署失败时回滚。
- .ebextensions 配置执行:按顺序执行
.ebextensions下的配置逻辑:- 执行
packages段安装系统/软件依赖 - 执行
files段写入自定义系统配置文件 - 执行
commands段命令(应用代码解压前运行,无法访问应用代码内容) - 解压新版本应用代码到实例的应用根目录
- 执行
container_commands段命令(应用代码解压后、启动前运行,可以访问当前版本的应用代码)
- 执行
- .platform 配置应用:
- 用
.platform下的反向代理、运行时配置覆盖EB平台的默认配置 - 按顺序执行
prebuild、build、predeploy三个阶段的自定义钩子脚本
- 用
- 应用启动与校验:启动应用服务,执行内置健康检查与用户自定义健康检查,确认服务正常运行、端口可访问。
- 部署收尾:校验通过后,执行
postdeploy阶段钩子脚本,清理临时文件,上报部署成功状态到EB控制平面;如果是滚动/蓝绿部署策略,控制平面会将流量逐步切到新版本实例。
- 任何阶段出现错误,EB都会根据你配置的回滚策略,自动恢复到上一个可用的版本。
内容的提问来源于stack exchange,提问作者saa
相关产品推荐
相关产品推荐

