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

AWS环境下EC2上ETL脚本自动化启停执行方案咨询

自动化EC2上ETL任务的最新AWS解决方案

核心组件

  • Amazon EventBridge:定时触发EC2启动流程
  • AWS Lambda:处理EC2启动、状态检查及相关指令触发
  • AWS Systems Manager (SSM) Run Command:远程执行EC2上的ETL脚本
  • IAM角色:为EC2、Lambda、SSM分配最小必要权限

步骤1:配置EC2实例的SSM访问权限

  • 给目标EC2实例附加AmazonEC2RoleforSSM IAM角色(该角色包含SSM管理EC2的基础权限)
  • 确认EC2实例已安装SSM Agent:Amazon Linux 2/2023、Ubuntu 18.04+等主流系统默认预装,其他系统可手动安装
  • 确保EC2能连接SSM服务:可配置VPC端点(SSM、EC2 Messages、SSM Messages),或允许EC2通过NAT网关/公网IP访问互联网

步骤2:修改ETL脚本的收尾逻辑

在Python ETL脚本末尾添加关机指令,确保脚本执行成功后自动关闭实例:

# ETL任务执行完成后添加以下代码
import subprocess
# 仅在脚本无异常时执行关机,可根据实际逻辑调整判断条件
try:
    subprocess.run(["sudo", "shutdown", "-h", "now"], check=True)
except Exception as e:
    print(f"脚本执行失败,不执行关机:{e}")

步骤3:创建Lambda函数(启动EC2并触发ETL)

  1. 在Lambda控制台创建Python运行时的函数
  2. 为Lambda附加自定义IAM角色,包含以下权限:
    • ec2:StartInstances:启动目标EC2
    • ssm:SendCommand:发送Run Command指令
    • iam:PassRole:传递SSM执行所需角色
  3. Lambda代码示例:
import boto3

ec2_client = boto3.client('ec2')
ssm_client = boto3.client('ssm')

TARGET_INSTANCE_ID = "你的EC2实例ID"
ETL_SCRIPT_PATH = "/path/to/your/etl/script.py"

def lambda_handler(event, context):
    # 启动EC2实例
    ec2_client.start_instances(InstanceIds=[TARGET_INSTANCE_ID])
    
    # 等待实例进入运行状态,确保SSM可连接
    waiter = ec2_client.get_waiter('instance_running')
    waiter.wait(InstanceIds=[TARGET_INSTANCE_ID])
    
    # 通过SSM触发ETL脚本执行
    ssm_client.send_command(
        InstanceIds=[TARGET_INSTANCE_ID],
        DocumentName='AWS-RunShellScript',
        Parameters={
            'commands': [f"cd $(dirname {ETL_SCRIPT_PATH}) && python3 {ETL_SCRIPT_PATH}"]
        }
    )
    return {"status": "ETL task triggered"}

步骤4:设置EventBridge定时触发

  1. 在EventBridge控制台创建规则,选择按计划触发
  2. 设置定时表达式(例如每天凌晨2点执行:cron(0 2 * * ? *))
  3. 将目标设置为上述Lambda函数,完成配置

简化备选方案:用EC2用户数据自动执行

如果不需要SSM的任务监控能力,可省略Lambda+SSM环节:

  1. 编辑EC2实例的用户数据,添加启动时执行的脚本:
#!/bin/bash
cd /path/to/your/etl/scripts
python3 your_etl_script.py
sudo shutdown -h now
  1. 修改EC2启动行为:实例→操作→实例设置→更改用户数据,勾选每次启动或重启时执行
  2. 用EventBridge定时触发Lambda启动EC2即可

关键注意事项

  • 权限最小化:为所有IAM角色仅分配必要权限,避免过度授权
  • 日志排查:在Lambda和ETL脚本中添加日志输出,通过CloudWatch Logs追踪执行状态
  • 异常处理:为ETL脚本添加错误捕获逻辑,避免意外中断导致实例无法自动关机

内容的提问来源于stack exchange,提问作者manja-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:01:05