如何在重启或启动实例时在现有 EC2 Windows 实例上运行命令?

上次更新日期:2021 年 4 月 9 日

我想在重启或启动实例时在现有的 Amazon Elastic Compute Cloud (Amazon EC2) Windows 实例上运行自定义脚本。我该如何操作?

简短描述

您可以通过将实例添加到用户数据,运行在重启或启动实例后运行的脚本。用户数据由 EC2Config(Windows Server 2012 R2 及更早版本)或 EC2Launch(Windows Server 2016 及更高版本)处理。

解决方法

在将脚本添加到用户数据时,必须将其括在特殊标签中。此标签用于确定命令是在命令提示符窗口中运行还是在 Windows PowerShell 中运行。有关更多信息,请参阅在启动时在 Windows 实例上运行命令

如果实例正在运行,则不能添加或更改用户数据,但您可以查看用户数据。要添加或更改用户数据,实例必须处于已停止状态。重启或启动实例时不会自动运行用户数据脚本。您可以在下次或每次重启或启动实例时启用用户数据运行操作。

警告:停止实例之前,您需要注意以下事项:

  • 如果您没有使用弹性 IP 地址,则当您停止实例时,将会释放公有 IP 地址。
  • 如果此实例具有实例存储卷,当实例停止时,实例上的任何数据都将丢失。
  • 如果实例关闭行为设置为终止,则实例停止时将会终止。
  • 如果实例属于 Auto Scaling 组,请先从 Auto Scaling 组分离该实例。在您停止和启动实例后,重新将该实例附加到 Auto Scaling 组。
    有关更多信息,请参阅停止并启动实例

1.    连接到 EC2 Windows 实例

2.    对于 Windows Server 2016 或更高版本,请打开 Windows PowerShell 命令窗口,然后运行以下命令:

C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 –Schedule

对于 Windows Server 2012 R2 或更早版本,请打开 C:\Program Files\Amazon\Ec2ConfigService\Ec2ConfigServiceSetting.exe

然后,对于用户数据,选择启用用户数据执行,以便下次启动服务

注意:上述命令会在每次重启时更改实例的本地管理员密码。如果您使用的 AMI 选择了无密钥对选项,则可能会在重启时失去对实例的访问权限。

3.    从 Amazon EC2 控制台停止实例。

4.    选择实例。依次选择 Actions(操作)、Instance Settings(实例设置)、Edit User Data(编辑用户数据)。

5.    添加或更新用户数据,然后选择保存

注意:要在每次重启或启动实例时运行用户数据脚本,请添加以下内容:

<persist>true</persist>

6.    启动实例。用户数据脚本作为实例启动进程的一部分运行。

对于其他问题排查,EC2Launch 和 EC2Config 日志文件包含标准输出和标准错误流的输出。日志文件的位置如下:

  • EC2Launch:C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log
  • EC2Config:C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2Config.log

这篇文章对您有帮助吗?


您是否需要账单或技术支持?