Как добавить разрешение chmod +x для ловушки платформы AWS Elastic Beanstalk?
Контекст
Я использую Elastic Beanstalk для развертывания очень простого тестового приложения. У меня есть несколько пакетов, которые я хочу установить с помощью apt. Я включил01_installations.sh
скрипт с установками в .platform/hooks/prebuild
каталог. Когда я архивирую свое приложение и развертываю его на Elastic Beanstalk, журналы подтверждают, что сценарий предварительной сборки выполняется, но у него нет разрешений.
2020/08/12 21:03:46.674234 [INFO] Executing instruction: RunAppDeployPreBuildHooks
2020/08/12 21:03:46.674256 [INFO] Executing platform hooks in .platform/hooks/prebuild/
2020/08/12 21:03:46.674296 [INFO] Following platform hooks will be executed in order: [01_installations.sh]
2020/08/12 21:03:46.674302 [INFO] Running platform hook: .platform/hooks/prebuild/01_installations.sh
2020/08/12 21:03:46.674482 [ERROR] An error occurred during execution of command [app-deploy] - [RunAppDeployPreBuildHooks]. Stop running the command. Error: Command .platform/hooks/prebuild/01_installations.sh failed with error fork/exec .platform/hooks/prebuild/01_installations.sh: permission denied
Вопрос
Насколько я понимаю, в разрешениях было отказано, потому что я не добавил chmod +x
чтобы сделать файл.sh исполняемым. Как говорится в документации AWS по хукам платформы: "Используйте chmod +x, чтобы установить права на выполнение для ваших файлов ловушек". (https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html). У меня вопрос: как мне это сделать?
У меня просто есть файл.sh в каталоге. Я не звоню ниоткуда. Мне не хватает простого шага? Документация AWS делает вид, что это должно быть просто.
Предыдущие попытки
Вещи, которые я пробовал:
- Добавление расширений.ebextensions
- Попытка: создать
.config
файл в.ebextensions
каталог с помощью следующей команды, которая должна выполнить файл.sh с разрешениями chmod +x. - Результат: Возникает та же ошибка. Журналы Elastic Beanstalk не указывают, что
.config
обрабатывался вообще.
- Попытка: создать
container_commands:
01_chmod1:
command: "chmod +x .platform/hooks/prebuild/01_installations.sh"
- Изменение имени файла.sh
- Попытка: измените файл.sh на "chmod +x 01_installations.sh", как предложено пользователем AWS (ссылка на форумы ниже). Удалите расширение.ebextensions
- Результат: Возникает та же ошибка.
[RunAppDeployPreBuildHooks]. Stop running the command. Error: Command .platform/hooks/prebuild/chmod +x 01_installations.sh failed with error fork/exec .platform/hooks/prebuild/chmod +x 01_installations.sh: permission denied
Я рассмотрел здесь идеи, но ни одна из них не содержит достаточно полных примеров, чтобы следовать:
3 ответа
Обычно вы устанавливаете разрешения на своей локальной рабочей станции перед архивированием пакета развертывания.
Однако, если вы хотите сделать это на экземпляре EB, вы не можете использовать container_commands
для этого. Причина в том, чтоcontainer_commands
выполнить после prebuild
. Вместо этого вам следует попробовать использоватьcommands
:
Файлы предварительной сборки запускаются после выполнения команд, найденных в разделе команд любого файла конфигурации, и перед запуском команд Buildfile.
Убедитесь, что ваш файл исполняемый в git
git update-index --chmod=+x path/to/file
Это сработало для меня после обновления разрешения, чтобы зафиксировать изменения.
Также команды в
.config
файл не будет работать, поскольку эти команды будут запускаться перед развертыванием и, следовательно, не смогут найти путь к
.sh
файл.