Подготовка экземпляра Windows 2016 EC2 для создания AMI через UserData

Я следую этому руководству, чтобы подготовить экземпляр для создания 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?


person demonicdaron    schedule 01.03.2019    source источник


Ответы (1)


Попробуйте без ./SysprepInstance.ps1, также PS использует косые черты в стиле unix. cd C:/ProgramData/Amazon/EC2-Windows/Launch/Scripts/

person Michael Tomkins    schedule 16.12.2020
comment
SysprepInstance.ps1 ДОЛЖЕН быть запущен для создания AMI из работающего экземпляра Windows, поэтому не запускать его нельзя. Более того, весь пост посвящен этому скрипту, так что просто не запускать — это не решение... Наконец, PS вполне устраивает места, определенные с помощью обратной косой черты (например, команда cd C:\Users\ работает нормально) - person demonicdaron; 16.12.2020