Я следую этому руководству, чтобы подготовить экземпляр для создания AMI (раздел «Ручной запуск Sysprep с помощью EC2Launch»): 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)
Эти строки конфликтуют со строками 64,65,66 файла ./InitializeInstance.ps1:
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 на клавиатуре и другие странности).
Вот мой сценарий пользовательских данных:
<powershell>
cd "C:\ProgramData\Amazon\EC2-Windows\Launch\\Scripts\"
./InitializeInstance.ps1 -Schedule
./SysprepInstance.ps1
<powershell/>
Есть ли у кого-нибудь опыт подготовки экземпляра Windows 2016 для создания AMI через UserData?