准备Windows 2016 EC2实例以通过UserData创建AMI

时间:2019-03-01 16:42:12

标签: amazon-web-services amazon-ec2 user-data ec2-ami

我正在按照本指南来准备创建AMI的实例(“使用EC2Launch手动运行Sysprep”部分): https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html#ec2launch-sysprep

当我在第7步(./SysprepInstance.ps1)中运行脚本时,它将引发有关设置变量的错误(有关由于它们是只读而无法设置这些变量的信息)。此错误来自第37、38、39行:

Set-Variable rootPath -Option Constant -Scope Local -Value (Join-Path $env:ProgramData -ChildPath "Amazon\EC2-Windows\Launch")
Set-Variable modulePath -Option Constant -Scope Local -Value (Join-Path $rootPath -ChildPath "Module\Ec2Launch.psd1")
Set-Variable scriptPath -Option Constant -Scope Local -Value (Join-Path $PSScriptRoot -ChildPath $MyInvocation.MyCommand.Name)

这些行似乎与./InitializeInstance.ps1的第64、65、66行冲突:

Set-Variable rootPath -Option Constant -Scope Local -Value (Join-Path $env:ProgramData -ChildPath "Amazon\EC2-Windows\Launch")
Set-Variable modulePath -Option Constant -Scope Local -Value (Join-Path $rootPath -ChildPath "Module\Ec2Launch.psd1")
Set-Variable scriptPath -Option Constant -Scope Local -Value (Join-Path $PSScriptRoot -ChildPath $MyInvocation.MyCommand.Name)

在我上面提到的指南中,它建议手动运行那些脚本(在正确的文件夹中打开提示并运行那些脚本)。当我手动运行它们时,它可以正常工作,因为我可以在运行./SysprepInstance.ps1之前关闭终端。但是,当我通过UserData运行它们时,我相信./InitializeInstance.ps1将这些变量设置为只读,然后./SysprepInstance.ps1引发错误。 这会导致AMI出现问题,其中开始菜单不起作用,所有终端都很奇怪(powershell具有黑色背景并且您无法滚动,cmd提示符默认情况下已启用键盘的Insert键以及其他奇怪的功能)。 / p>

这是我的用户数据脚本:

<powershell>
    cd "C:\ProgramData\Amazon\EC2-Windows\Launch\\Scripts\"
    ./InitializeInstance.ps1 -Schedule
    ./SysprepInstance.ps1
<powershell/>

是否有人对如何通过UserData准备用于AMI创建的Windows 2016实例有任何经验?

1 个答案:

答案 0 :(得分:0)

尝试不使用./SysprepInstance.ps1 PS也使用unix样式目录斜杠。 cd“ C:/ ProgramData / Amazon / EC2-Windows / Launch / Scripts /”