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

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

...