基于AMI创建Windows EC2执行月度批处理任务的AWS架构咨询
AWS月度批处理任务架构方案
核心设计原则
- 按需使用资源,任务完成后自动销毁实例,无长期运行成本
- 全托管服务编排,减少手动运维操作
- 最小权限配置,避免凭证泄露风险
前置配置(一次性操作)
1. IAM角色配置
创建EC2实例用的IAM角色,附加以下权限:
- 允许
s3:PutObject操作,资源限定为arn:aws:s3:::my_s3_bucket/*(中国区替换为aws-cn) - 允许CloudWatch Logs的
CreateLogGroup、CreateLogStream、PutLogEvents操作 - 可选附加AWS托管策略
AmazonSSMManagedInstanceCore,用于后续远程排查问题
2. AMI预检查
确认你持有的Windows AMI已经预装AWS CLI v2,没有的话可以手动安装一次后重新生成AMI,避免每次任务启动都重复安装CLI。
核心流程配置
1. EventBridge定时触发器
创建EventBridge Scheduler规则:
- 定时表达式用cron格式,比如每月1日凌晨2点执行的表达式为
0 0 2 1 * ? *,可根据实际需求调整时间 - 触发目标选择「AWS API调用」->「RunInstances」,配置参数如下:
- 指定你的Windows AMI ID
- 选择符合my_software运行要求的实例规格
- 实例关闭行为设置为
终止(InstanceInitiatedShutdownBehavior=terminate) - 附加之前创建的IAM角色
- 安全组仅允许出站流量,无需开放任何入站端口,建议配置S3、CloudWatch的VPC端点,所有流量走内网更安全
- 填写如下用户数据(UserData),替换实际的文件路径和区域信息:
<powershell> # 执行内置业务脚本 C:\your\path\my_command.bat # 上传生成的报表到S3,按月份重命名避免覆盖 $month_suffix = Get-Date -Format "yyyyMM" aws s3 cp C:\your\path\report.csv s3://my_s3_bucket/report_$month_suffix.csv --region 你的AWS区域 # 同步日志到CloudWatch Logs $log_group = "/my_software/monthly_run_log" $log_stream = "run_$month_suffix" aws logs create-log-group --log-group-name $log_group --region 你的AWS区域 2>&1 | Out-Null aws logs create-log-stream --log-group-name $log_group --log-stream-name $log_stream --region 你的AWS区域 2>&1 | Out-Null $log_content = Get-Content C:\your\path\log.csv -Raw aws logs put-log-events --log-group-name $log_group --log-stream-name $log_stream --log-events timestamp=[Math]::Floor((Get-Date -UFormat %s)*1000),message="$log_content" --region 你的AWS区域 # 关机自动触发实例终止 Stop-Computer -Force </powershell>
可选优化配置
- 配置CloudWatch告警:设置规则如果EC2实例运行时长超过任务预期最大运行时长,就触发消息通知,避免异常情况实例未终止产生额外费用
- 配置EventBridge死信队列:如果触发RunInstances失败,事件会存入死信队列,可配置告警通知及时排查问题
- 开启S3桶的版本控制和服务器端加密,保障报表文件的安全性和可追溯性
内容的提问来源于stack exchange,提问作者Prem
相关产品推荐
相关产品推荐

