更新于2017年4月15日:适用于EC2Launch和Windows Server 2016 AMIs
根据AWS关于EC2Launch的文档,Windows Server 2016用户可以继续使用在EC2Config 2.1.10中引入的persist标签:
对于EC2Config版本2.1.10及更高版本或EC2Launch,您可以在用户数据中使用true来在用户数据执行后启用插件。
用户数据示例:
<powershell>
insert script here
</powershell>
<persist>true</persist>
对于随后的启动:
Windows Server 2016用户必须额外启用配置和启用EC2Launch,而不是EC2Config。 EC2Config已在Windows Server 2016 AMI中废弃,取而代之的是EC2Launch。
运行以下powershell以安排Windows任务,在下一次启动时运行用户数据:
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 –Schedule
按照设计,此任务在第一次运行后将被禁用。但是,使用persist标记会导致Invoke-UserData通过Register-FunctionScheduler安排一个单独的任务,在随后的启动中保留您的用户数据。您可以在
C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Scripts\Invoke-Userdata.ps1
中自行查看。
进一步的故障排除:
如果您的用户数据脚本出现其他问题,您可以在源自WS 2016基础AMI的实例中找到用户数据执行日志,位于
C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log
。
原始答案:适用于EC2Config和旧版本的Windows Server
在初始启动后,用户数据执行将自动被禁用。当您创建镜像时,执行可能已经被禁用。这可以在C:\Program Files\Amazon\Ec2ConfigService\Settings\Config.xml
中手动配置。
使用EC2Config服务配置Windows实例的文档提供了几个选项:
以下是来自文档的示例:
<powershell>
$EC2SettingsFile="C:\Program Files\Amazon\Ec2ConfigService\Settings\Config.xml"
$xml = [xml](get-content $EC2SettingsFile)
$xmlElement = $xml.get_DocumentElement()
$xmlElementToModify = $xmlElement.Plugins
foreach ($element in $xmlElementToModify.Plugin)
{
if ($element.name -eq "Ec2SetPassword")
{
$element.State="Enabled"
}
elseif ($element.name -eq "Ec2HandleUserData")
{
$element.State="Enabled"
}
}
$xml.Save($EC2SettingsFile)
</powershell>
- 从 EC2Config 版本 2.1.10 开始,您可以使用
<persist>true</persist>
在用户数据执行后启用插件。
例如,来自文档的示例:
<powershell>
insert script here
</powershell>
<persist>true</persist>