如何在Windows EC2实例上运行启动脚本?重启停止实例是否触发执行?
在Windows EC2实例上配置启动脚本 & 启动场景的疑问解答
嘿,刚好在Windows EC2上折腾过启动脚本的配置,结合你的需求(Lambda启动停止实例时脚本都能运行)给你唠唠清楚~
一、Windows EC2启动脚本的两种靠谱配置方式
和Linux的用户数据逻辑略有不同,Windows主要靠这两种方式实现启动时自动运行脚本:
1. 用EC2用户数据(UserData)配置
Windows实例默认用EC2Launch v2服务处理用户数据,你可以把PowerShell/CMD脚本包裹在特定标签里,让实例启动时执行。
举个PowerShell的示例(比如记录启动时间):
<powershell> # 写你的启动逻辑,这里是生成启动日志 $logFile = "C:\EC2_Startup_Log.txt" "实例启动时间: $(Get-Date)" | Out-File -Path $logFile -Append # 关键:修改EC2Launch配置,让用户数据每次启动都执行(默认仅首次启动) $configPath = "C:\ProgramData\Amazon\EC2Launch\config\launchconfig.json" $config = Get-Content $configPath | ConvertFrom-Json $config.UserData.RunOnce = $false $config | ConvertTo-Json | Set-Content $configPath </powershell>
- 配置方式:创建实例时直接粘贴这段用户数据,或者在实例停止状态下通过EC2控制台/CLI修改用户数据,下次启动就会生效。
- 为什么要加修改配置的命令?因为EC2Launch v2默认只让用户数据跑一次,改成
RunOnce = false后,每次从停止状态启动都会执行脚本,完美匹配你的需求。
2. 用Windows任务计划程序配置
这种方式更稳定灵活,完全脱离EC2服务的限制,适合需要100%每次启动都触发的场景:
- 登录Windows实例,打开「任务计划程序」,创建新任务:
- 触发器:选「当计算机启动时」
- 操作:选「启动程序」,可以指定PowerShell脚本(比如
powershell.exe -File C:\Scripts\startup.ps1)、CMD命令或者可执行文件 - 条件:勾选「唤醒计算机运行此任务」(确保停止后启动也能触发)
- 设置:可选勾选「如果任务失败,每隔X分钟重试」,提升可靠性
- 把你的脚本放在实例本地目录(比如
C:\Scripts\),任务计划会在每次启动时自动执行它,不管是手动启动还是Lambda触发的启动都没问题。
二、你的核心疑问:停止后重启算不算“启动”?
明确给你答案:算! 已停止的实例被启动(不管是手动、Lambda还是其他方式触发),完全属于“启动”场景,根本不需要终止实例重新创建。
只要你按照上面的方法配置(比如修改了RunOnce的用户数据,或者用任务计划),每次Lambda启动你的停止实例时,脚本都会自动运行。
补充个小细节:终止后重新创建是「首次启动」,停止后启动是「后续启动」,两种场景下,只要你的配置支持重复执行,脚本都会触发。
内容的提问来源于stack exchange,提问作者stevec
相关产品推荐
相关产品推荐

