多AWS EC2 Linux实例Web应用批量更新及部署方案咨询
批量更新EC2实例应用的方案
通用批量更新方法(排除指定文件)
Ansible 批量部署
这是运维圈常用的配置管理工具,专门解决批量服务器操作的问题:- 可以用动态inventory自动拉取AWS各可用区的EC2实例清单,不用手动维护服务器列表
- 写Playbook定义部署逻辑,用
synchronize模块同步代码时直接排除配置文件,示例:- name: 同步最新应用代码 synchronize: src: ./local-app-build/ dest: /var/www/app/ exclude: config.ini delete: yes - 执行Playbook就能一次性完成所有实例的代码更新,还能顺便加重启服务、校验状态的步骤。
Shell脚本 + AWS SSM Run Command
不用额外装工具,靠AWS自带功能就能搞定:- 确保所有EC2实例都装了SSM Agent(AWS默认给大部分AMI预装了)
- 写个简单的Shell脚本,拉取最新代码后用
rsync排除配置文件:#!/bin/bash cd /tmp git clone your-repo-address.git rsync -av --exclude='config.ini' /tmp/your-repo/* /var/www/app/ systemctl restart your-web-service - 通过AWS控制台或者CLI调用SSM Run Command,按标签、可用区筛选目标实例,把脚本发过去批量执行就行。
GitHub 是否适用于生产环境?
完全可以,但要注意几个关键细节:
- 用私有仓库存生产代码,别把敏感信息暴露出去
- 搞清楚分支策略:比如
main分支只放经过测试的生产代码,开发在dev分支做,合并到main必须走Pull Request做代码审查 - 用**标签(Tag)**标记生产版本,比如
v1.2.0,部署时拉取指定标签的代码,别直接拉最新HEAD,避免意外引入未测试的改动 - 绝对别把数据库密码、API密钥这类敏感配置存仓库里,用环境变量或者AWS Secrets Manager来管理
AWS 原生解决方案
AWS CodeDeploy
专门做自动化部署的服务,和EC2完美适配:- 把应用打包传到S3,或者直接关联你的GitHub仓库
- 写
appspec.yml配置部署规则,明确排除不需要更新的文件:version: 0.0 os: linux files: - source: / destination: /var/www/app/ exclude: - config.ini hooks: AfterInstall: - location: scripts/restart-service.sh timeout: 300 runas: root - 创建部署组,按标签、可用区选要更新的EC2实例,触发部署后CodeDeploy会自动批量更新,还支持滚动部署、蓝绿部署,能减少服务中断时间。
AWS Elastic Beanstalk
如果你的应用适合PaaS模式,直接丢到Elastic Beanstalk就行,它会自动管EC2、负载均衡这些基础设施。更新的时候只需要上传新版本代码,平台会自动批量更所有实例,你可以配置忽略指定文件,或者用环境变量管理配置信息。
内容的提问来源于stack exchange,提问作者Roel
相关产品推荐
相关产品推荐

