Я новичок в AWS CodeDeploy, на самом деле я просто экспериментирую.
Я пытаюсь справиться с непрерывной интеграцией, используя CircleCI 2.0 и AWS CodeDeploy, чтобы при внесении изменений в мой проект django в разработку на github он собирался в CircleCI, а затем отправлял развертывание на S3, после чего изменения развернут в EC2.
Я выполнил все настройки в CodeDeploy и скопировал спецификацию приложения у парня из github, который использовал CodeDeploy с проектом Django / DRF (таким как мой). Разница лишь в том, что он использовал другое ядро в своем экземпляре EC2 (я думаю, что AWS linux), а я использую Ubuntu. Поэтому мне пришлось изменить имя пользователя в разделе runas
каждой части hooks
. При первом запуске команды create-deploy в aws cli развертывание завершилось неудачно с этим сообщением:
LifecycleEvent - ApplicationStop
Script - scripts/stop_application.sh
[stderr]No passwd entry for user 'ec2-user'
Как оказалось, я забыл поменять пользователя runas
в хуке ApplicationStop
. Затем я изменил его, снова сделал push и create-deploy, но ошибка остается прежней. Нужно ли делать что-то еще, чтобы изменения в спецификации приложения учитывались или почему это происходит?
Вот файл appspec.yml :
version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/taptop_web
permissions:
- object: /home/ubuntu
pattern: "**"
owner: ubuntu
group: ubuntu
hooks:
BeforeInstall:
- location: scripts/clean_instance.sh
timeout: 6000
runas: root
AfterInstall:
- location: scripts/install_os_dependencies.sh
timeout: 6000
runas: root
- location: scripts/install_python_dependencies.sh
timeout: 6000
runas: ubuntu
- location: scripts/migrate.sh
timeout: 6000
runas: ubuntu
ApplicationStart:
- location: scripts/start_application.sh
timeout: 6000
runas: ubuntu
ApplicationStop:
- location: scripts/stop_application.sh
timeout: 6000
runas: ubuntu
И stop_application.sh
#!/usr/bin/env bash
cd /home/ubuntu/taptop_web
ps auxw | grep runserver | awk '{print $2}' | xargs kill