如何通过GitHub Actions连接AWS实例执行.sh脚本实现DB同步
实现GitHub Actions触发AWS实例执行同步脚本的方案
前置准备
- EC2 SSH密钥配置:
- 生成EC2 SSH密钥对(或使用现有密钥),将私钥内容存入GitHub仓库的Secrets(路径:仓库Settings → Secrets and variables → Actions → New repository secret),命名为
AWS_EC2_SSH_KEY - 将公钥添加到AWS EC2实例的
~/.ssh/authorized_keys文件中,确保能通过SSH无密码登录
- 生成EC2 SSH密钥对(或使用现有密钥),将私钥内容存入GitHub仓库的Secrets(路径:仓库Settings → Secrets and variables → Actions → New repository secret),命名为
- EC2安全组配置:
- 开放22端口(SSH),允许GitHub Actions的IP段访问;测试阶段可临时允许0.0.0.0/0,生产环境需严格限制IP范围
- 脚本权限确认:
- 在AWS EC2实例上,给目标.sh文件添加执行权限:
chmod +x /path/to/your/sync_script.sh
- 在AWS EC2实例上,给目标.sh文件添加执行权限:
编写GitHub Actions工作流文件
在你的GitHub仓库根目录创建.github/workflows/database_sync.yml文件,内容如下:
name: 数据库同步触发 on: # 触发条件:当向指定分支推送资源时触发,可根据实际需求修改分支名或路径 push: branches: - main # 若资源存放在特定路径下,可添加路径过滤,仅当推送db1资源时触发 # paths: # - 'db1-resources/**' jobs: sync-database: runs-on: ubuntu-latest steps: # 可选步骤:若工作流需要用到仓库代码,添加此步骤检出代码 # - name: 检出代码 # uses: actions/checkout@v4 - name: 连接AWS EC2并执行同步脚本 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.AWS_EC2_HOST }} # EC2公网IP或域名,需预先存入Secrets username: ${{ secrets.AWS_EC2_USER }} # EC2登录用户(如ubuntu/ec2-user),存入Secrets key: ${{ secrets.AWS_EC2_SSH_KEY }} # 预先存入的SSH私钥 # 执行命令:进入目标文件夹并运行脚本 script: | cd /path/to/target/folder # 替换为你的.sh文件所在的目标文件夹路径 ./sync_script.sh # 替换为你的.sh文件名
关键说明
- 触发条件调整:根据实际业务需求修改
on.push.branches或paths,确保只有当开发者推送指定数据库资源时才触发同步流程 - 敏感信息保护:所有敏感信息(EC2地址、用户名、SSH密钥)必须存入GitHub Secrets,禁止硬编码在工作流文件中
- 脚本预验证:先手动通过SSH登录EC2,执行
cd /path/to/target/folder && ./sync_script.sh,确认脚本能正常运行后再配置Actions
内容的提问来源于stack exchange,提问作者User1515
相关产品推荐
相关产品推荐

