【问题标题】:How to make windows EC2 user data script run again on startup?如何让 Windows EC2 用户数据脚本在启动时再次运行?
【发布时间】:2019-11-21 17:25:15
【问题描述】:

用户数据脚本将在 EC2 首次启动时运行。

如何在 Windows EC2 上恢复/重新激活此功能?

注意

我已经尝试了建议的脚本 here,但它立即失败,因为没有文件 C:\Program Files\Amazon\Ec2ConfigService\Settings\Config.xml 并且没有类似的名称(不是我找到的;甚至没有 Ec2ConfigService 目录)

另外请注意,我的问题与 this 问题相同,但适用于 windows ec2,而不是 linux

【问题讨论】:

  • 为什么要在重启后运行相同的脚本? userdata 脚本通常设计为引导实例,这是一次性的。所有操作系统在重启后都有自己特定的方式来运行代码,你通常会使用这种机制(例如 Linux 上的 init.d 或 Windows 上的任务计划程序)。
  • @jarmod 我已经安排了一个 lambda 从自定义 AMI 启动 EC2 并每 6 小时运行一次脚本。我认为一切都会正常工作,直到我意识到我在启动时提供的(powershell)用户数据不会运行(因此我想每六个小时运行一次的脚本不会被 powershell 脚本触发)。这是因为 userdata 每个图像只运行一次。由于我使用的是自定义图像,因此我需要学习如何使该图像在启动时接受并运行用户数据,就好像它之前从未启动过一样
  • @jarmod 我花了几个小时试图让任务调度程序运行一个 powershell 脚本,但没有成功。我尝试了所有必须提供的东西。最终,任务计划程序将在启动时运行任务,但在我通过 RDP 登录后运行。因此,自动化的全部意义就消失了。我在 SO 上花了很多徒劳的时间试图解决那个问题..
  • 好的,所以您只是想弄清楚如何从现有 Windows 实例创建 AMI,该 AMI 在启动时将执行 userdata 脚本。您不会尝试在实例重启后重新运行 userdata 脚本。

标签: amazon-web-services amazon-ec2


【解决方案1】:

我知道重点在于运行用户数据,而不是所有其他东西......

要运行(仅)用户数据脚本,您可以通过以下方式运行它:

Import-Module (Join-Path (Join-Path $env:ProgramData -ChildPath "Amazon\EC2-Windows\Launch") -ChildPath "Module\Ec2Launch.psd1")
Invoke-Userdata -OnlyExecute

假设您将其保存为“C:\ProgramData\Amazon\EC2-Windows\Launch\Config\run-user-data.ps1”,那么您可以使用 PowerShell 安排新任务在启动时运行:

$Action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-ExecutionPolicy Bypass C:\ProgramData\Amazon\EC2-Windows\Launch\Config\run-user-data.ps1'
$Trigger = New-ScheduledTaskTrigger -AtStartup
$Settings = New-ScheduledTaskSettingsSet
$Task = New-ScheduledTask -Action $Action -Trigger $Trigger -Settings $Settings
Register-ScheduledTask -TaskName 'Execute user-data' -InputObject $Task -User 'NT AUTHORITY\SYSTEM' -Force

我通过在“AWS::CloudFormation::Init”部分创建上述文件和命令来使用这种解决方案。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2017-08-20
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多