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

如何从S3存储桶正确使用AWS EC2 CodeDeploy部署Python脚本

AWS CodeDeploy 部署Python脚本(S3源)必知要点

核心结论:必须使用AppSpec文件

不管部署源是GitHub还是S3,AWS CodeDeploy都强制要求部署包根目录包含appspec.yml文件——它是CodeDeploy的核心配置,用来定义部署时的文件分发规则、各阶段执行的操作,没有它部署一定会失败,这和你之前从GitHub部署失败的原因一致。

部署包结构与配置步骤

1. 整理部署包文件

在本地创建一个目录,放入以下文件(所有文件直接放在根目录,不要嵌套子文件夹):

  • appspec.yml:CodeDeploy配置文件
  • 你的Python脚本(比如my_script.py)
  • requirements.txt(如果脚本有第三方依赖)
  • 配套的shell脚本(用来处理依赖安装、脚本启动/定时设置)

2. 编写最简appspec.yml(以Linux实例为例)

version: 0.0
os: linux
files:
  # 定义要从S3复制到EC2实例的文件
  - source: /my_script.py
    destination: /home/ec2-user/scripts/
  - source: /requirements.txt
    destination: /home/ec2-user/scripts/
hooks:
  # 安装依赖阶段(部署后执行)
  AfterInstall:
    - location: install_deps.sh
      timeout: 300
      runas: ec2-user
  # 启动/配置定时任务阶段
  ApplicationStart:
    - location: setup_script.sh
      timeout: 300
      runas: ec2-user

3. 编写配套shell脚本

  • install_deps.sh(安装Python依赖):
#!/bin/bash
cd /home/ec2-user/scripts/
pip3 install -r requirements.txt
  • setup_script.sh(设置定时任务+可选立即运行):
#!/bin/bash
# 可选:部署完成后立即运行一次脚本
python3 /home/ec2-user/scripts/my_script.py

# 设置定时任务(示例:每3天凌晨0点运行,可根据需求调整)
# 先备份现有crontab
crontab -l > current_crontab 2>/dev/null
# 添加新任务(输出日志到指定文件)
echo "0 0 */3 * * python3 /home/ec2-user/scripts/my_script.py >> /home/ec2-user/scripts/script_logs.log 2>&1" >> current_crontab
# 应用新的crontab配置
crontab current_crontab
rm current_crontab

注意:给两个shell脚本添加可执行权限:chmod +x install_deps.sh setup_script.sh

4. 打包上传到S3

把目录里的所有文件打包成ZIP包(不要把目录本身打包进去,确保ZIP根目录直接是上述文件),然后上传到你的S3存储桶。

5. 启动CodeDeploy部署

在CodeDeploy控制台选择S3作为部署源,指定ZIP文件的S3路径,选择已配置好的部署组即可启动部署。

关键注意事项

  • EC2实例必须已安装CodeDeploy代理,否则无法接收部署指令
  • 确保CodeDeploy服务角色有读取目标S3存储桶的权限
  • 根据你的EC2实例操作系统(Linux/Windows)调整appspec.yml的os字段和脚本内容

内容的提问来源于stack exchange,提问作者Sami Souayah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:55:04