当我重启或启动现有的 Amazon Elastic Compute Cloud (Amazon EC2) Windows 实例时,我想在该实例上运行自定义脚本。
简短描述
要在启动或重启 EC2 实例时运行命令,请配置用户数据脚本,使其在重启或启动实例时运行。
根据您的操作系统 (OS),您的配置使用以下代理来处理用户数据:
- Windows Server 2012 R2 及更早版本使用 EC2Config。
- Windows Server 2016 和 2019 使用 EC2Launch。
- Windows Server 2022 和 2025 使用 EC2Launch v2。
**注意:**要使用 Amazon EC2 控制台更新实例的用户数据,您必须停止该实例。但是,对于 EC2Launch v2,您可以使用 YAML 脚本在不停止和启动的情况下更新实例。
解决方法
(仅限 EC2Launch v2)使用 YAML 脚本更新您的实例,无需停止和启动
使用远程桌面协议 (RDP) 连接到您的 Windows 实例。
要在每次重启时运行脚本,请更新 agent-config.yml 文件。将 executeScript 任务添加到 stage: postReady,并将 frequency 设置为 always。
YAML 文件示例:
version: "1.0"
config:
- stage: boot
tasks:
- task: extendRootPartition
- stage: preReady
tasks:
- task: activateWindows
inputs:
activation:
type: amazon
- task: setDnsSuffix
inputs:
suffixes:
- $REGION.ec2-utilities.amazonaws.com
- task: setAdminAccount
inputs:
password:
type: random
- task: setWallpaper
inputs:
attributes:
- hostName
- instanceId
- privateIpAddress
- publicIpAddress
- ipv6Address
- instanceSize
- availabilityZone
- architecture
path: C:\Windows\Web\Wallpaper\Windows\img0.jpg
- stage: postReady
tasks:
- task: startSsm
- task: executeScript
inputs:
- frequency: always
type: powershell
runAs: localSystem
content: |-
New-Item -Path 'C:\PowerShellTest.txt' -ItemType File
要仅在下次实例重启时运行脚本,请打开 C:\ProgramData\Amazon\EC2Launch\state,然后删除 .run-once 文件。更新 agent-config.yml 文件,将 executeScript 任务添加到 stage: postReady,并将 frequency 设置为 once。
**重要事项:**当您删除 .run-once 文件时,实例的本地管理员密码将在重启时发生更改。如果您在启动实例时没有密钥对,或者丢失了密钥对,则重启时您可能会失去对实例的访问权限。
有关命令语法的更多信息,请参阅 YAML 配置脚本的语法。
配置实例以进行停止和启动
**注意:**当停止或启动某个实例时,该实例的公有 IP 地址将发生变化。最佳做法是使用弹性 IP 地址(而不是公有 IP 地址)将外部流量路由到您的实例。如果您使用的是 Amazon Route 53,则在公有 IP 地址发生变化时可能需要更新 Route 53 DNS 记录。停止和启动与实例重启不同。有关详细信息,请参阅 EC2 实例停止和启动的工作原理。
在停止和启动实例之前,请执行以下操作:
更新实例的用户数据
将您的命令作为脚本添加到实例的用户数据中。有关如何配置脚本以在每次重启时运行的信息,请参阅在后续重启或启动时运行脚本。
**注意:**要在 EC2Launch v2 每次启动或重启时运行脚本,请添加 YAML 脚本作为 executeScript 任务或添加 XML 脚本。对于 YAML,请将 frequency 设置为 always;对于 XML 脚本,请添加 <persist>true</persist> 标签。对于所有代理,请将用户数据包含在定义命令是在命令提示符还是 Windows PowerShell 中运行的标签内。有关命令语法的更多信息,请参阅 Windows PowerShell 脚本的语法。
对问题进行故障排除
要对问题进行故障排除,请检查 EC2Config、EC2Launch 或 EC2Launch v2 日志文件中的标准输出和标准错误流。
要查找日志文件,请检查以下位置:
- 对于 EC2Config,请检查 C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2Config.log。
- 对于 EC2Launch,请检查 C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log。
- 对于 EC2Launch v2,请检查 C:\ProgramData\Amazon\EC2Launch\log\agent.log。
相关信息
如何在启动新的 EC2 Windows 实例时运行命令?