如何自动化启停EC2实例并运行S3存储的Python脚本后自动关机
EC2 按需启停+启动自动执行S3脚本操作方案
前提:你已完成EC2 IAM角色配置,具备S3对象读取权限。
1. 按需自动化启停EC2实例实现
按需选择以下两种场景的方案:
1.1 固定时间定时启停
使用EventBridge配置调度规则即可:
- 进入EventBridge控制台,新建规则,选择调度类型,按需求配置cron表达式(比如每天9点启动、18点停止)
- 目标选择
AWS API 调用,分别创建启停两条规则,对应StartInstances和StopInstances接口,填入你的EC2实例ID后保存规则即可生效。
1.2 触发式按需启停(无固定时间,随业务需求触发)
通过Lambda函数封装启停逻辑,可对接任意业务触发源(API请求、S3事件、内部系统触发等):
- 新建Python运行环境的Lambda函数,核心代码参考:
import boto3 ec2 = boto3.resource('ec2') INSTANCE_ID = "替换为你的EC2实例ID" def lambda_handler(event, context): action = event.get("action", "start") if action == "start": ec2.Instance(INSTANCE_ID).start() return {"status": "instance started"} elif action == "stop": ec2.Instance(INSTANCE_ID).stop() return {"status": "instance stopped"}
- 为Lambda执行角色添加
ec2:StartInstances、ec2:StopInstances权限,即可通过调用Lambda函数触发EC2启停。
2. EC2启动自动拉取S3脚本执行,完成后自动停机
通过EC2原生的用户数据(User Data)功能实现,无需额外安装第三方工具:
- 停止目标EC2实例,进入实例设置页,选择编辑用户数据,填入以下脚本(替换占位符内容):
#!/bin/bash # 进入自定义工作目录 mkdir -p /opt/s3_script_runner cd /opt/s3_script_runner # 拉取S3中的Python脚本,替换为你的S3对象路径 aws s3 cp s3://<你的S3桶名>/<你的脚本路径>/task.py ./ # 执行Python脚本 python3 task.py # 脚本执行完成后自动关机,无论脚本执行成功/失败都会执行 shutdown -h now
提示:如果使用非Amazon Linux系统镜像,请提前在镜像中安装好aws cli、Python3及脚本依赖的第三方库,避免执行报错。
- 为EC2关联的IAM角色补充
ec2:StopInstances权限,保证实例有权限执行关机操作。 - 启动实例测试即可,实例启动后会自动执行用户数据逻辑,脚本运行完成后自动停止,不会产生冗余费用。
内容的提问来源于stack exchange,提问作者Sidh
相关产品推荐
相关产品推荐

