Назад | Перейти на главную страницу

Запуск сценария перед установкой пакетов из файла requirements.txt

У моего приложения есть некоторые предварительные условия, которые означают, что установки из требований не будут работать, пока не будет запущено несколько скриптов.

Я читал документация по настройке контейнера 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 вверху скрипта, чтобы он останавливал выполнение при возникновении ошибки.