Добавьте исполняемый файл в ПУТЬ Windows из .ebextensions и затем вызовите исполняемый файл в последующей команде

#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. Вы пробовали пример из статьи? Может ли это быть как-то связано с командой контейнера?