У моего приложения есть некоторые предварительные условия, которые означают, что установки из требований не будут работать, пока не будет запущено несколько скриптов.
Я читал документация по настройке контейнера Python но это совсем не проясняет, как вы контролируете запуск скрипта в .ebextensions, и все проведенные мной тесты показывают, что это происходит после приложение развернуто или, по крайней мере, после установки пакетов из файла requirements.txt с помощью pip.
Этот пост на форумах AWS рекомендует создать сценарий с именем файла, чтобы он вставлял его в папку хуков, но, по-видимому, это не рекомендуется:
Перетаскивание файлов непосредственно в каталоги обработчиков рискованно, так как это не документированный метод, он отличается в некоторых контейнерах и может измениться в будущем.
Мне интересно, успешно ли настроил скрипт для запуска перед файлом requirements.txt, и если да, то что я делаю неправильно.
Вот мой файл .ebextensions:
packages:
yum:
# packages needed for my app
files:
"/home/ec2-user/setup-script.sh":
mode: "00755"
owner: ec2-user
group: ec2-user
encoding: plain
content: |
#!/bin/bash
echo $(date -u) >> /tmp/debug.log
echo "Running as $(whoami)" >> /tmp/debug.log
# rest of script
commands:
01-setup-script:
command: "sh -x /home/ec2-user/setup-script.sh"
Развертывание останавливается в середине требований к установке и, похоже, не запускает сценарий или не обновляет сценарий, поскольку он существует в папке пользователя.
Ладно, получается, что сценарий действительно беги прежде всего. Похоже, в самом скрипте была ошибка, что означало, что он не работал правильно, и это причина того, что он неправильно настроил экземпляр!
Я обнаружил это, посмотрев на вывод /var/log/eb-activity.log
Поэтому я думаю, всегда внимательно проверяйте вывод своих скриптов! Не помешало бы добавить set -e
вверху скрипта, чтобы он останавливал выполнение при возникновении ошибки.