#windows #amazon-elastic-beanstalk #chocolatey #ebextensions
#Windows #amazon-elastic-beanstalk #шоколадный #ebextensions
Вопрос:
У меня есть экземпляр Windows Elastic Beanstalk. У меня есть следующее commands.config
в моем проекте .ebextensions
commands:
00-install-choco:
command: |
powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))"
01-set-choco-path:
command: |
SET PATH=%PATH%;%ALLUSERSPROFILE%chocolateybin
Эти две команды работают. Однако у меня также есть container-commands.config
файл, к которому необходимо обратиться choco
, но он продолжает завершаться сбоем из-за 'choco' is not recognized as an internal or external command
container_commands:
01-install nssm:
command: |
choco install nssm -y
Как мне получить последующие команды для получения обновленного PATH
? Существует ли более подходящий подход к установке двоичных файлов и установке их в Window PATH
во время создания экземпляра ESB?
Я попытался следовать https://aws.amazon.com/blogs/developer/using-nuget-and-chocolatey-package-managers-in-aws-cloudformation-and-aws-elastic-beanstalk/
files:
c:/tools/ewmp.cmd:
content: |
@ECHO OFF
FOR /F "tokens=3,*" %%a IN ('REG QUERY "HKLMSystemCurrentControlSetControlSession ManagerEnvironment" /v PATH') DO PATH %%a%%b
%*
commands:
01-install-choco:
command: powershell -NoProfile -ExecutionPolicy unrestricted -Command "Invoke-Expression ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
waitAfterCompletion: 0
02-install-nssm:
command: c:/tools/ewmp choco install nssm -y
waitAfterCompletion: 0
Но даже это дает мне похожие ошибки.
-----------------------Command Output-----------------------
ERROR: Invalid key name.
Type "REG QUERY /?" for usage.
'choco' is not recognized as an internal or external command,
operable program or batch file.
------------------------------------------------------------
Ответ №1:
Я не являюсь пользователем Elastic Beanstalk, поэтому я не могу сказать, сработает это или нет, но согласно документации, необходимо предоставить дополнительную команду для обновления переменной PATH, которая используется:
Установщик Chocolatey и устанавливаемые им пакеты могут изменять переменную среды PATH компьютера. Это усложняет задачу, поскольку последующие команды после этих установок выполняются в том же сеансе, у которого нет обновленного ПУТИ. Чтобы преодолеть это, мы используем командный файл, чтобы установить путь сеанса к компьютеру, прежде чем он выполнит нашу команду.
files:
c:/tools/ewmp.cmd:
content: |
@ECHO OFF
FOR /F "tokens=3,*" %%a IN ('REG QUERY "HKLMSystemCurrentControlSetControlSession ManagerEnvironment" /v PATH') DO PATH %%a%%b
%*
commands:
00-install-choco:
command: powershell -NoProfile -ExecutionPolicy unrestricted -Command "Invoke-Expression ((New-Object Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))"
container_commands:
01-install nssm:
command: |
c:toolsewmp choco install nssm -y
ПРИМЕЧАНИЕ: Единственное, что мне не ясно, основываясь на документации, это использование c:toolsewmp
вместо c:/tools/ewmp
в разделе command. Я не знаю, является ли это устраняемой проблемой в коде, который отображается в браузере в документации, или это сделано намеренно. Возможно, вам придется поиграть с этим, чтобы посмотреть, что работает.
Комментарии:
1. Даже при воспроизведении с различными вариантами использования ewmp это все еще выдает мне не распознанную ошибку.
ERROR: Invalid key name. 'choco' is not recognized as an internal or external command
2. Но этот пост в блоге AWS — хорошая находка! Это объясняет, почему ПУТЬ не выбирается.
3. Вы пробовали пример из статьи? Может ли это быть как-то связано с командой контейнера?