У меня была такая же проблема, используя Amazon Linux 2 с Python 3,7 , как и OP. AWS не обновлял свою документацию для поддержки изменений платформы, что сильно сбивало с толку. Я нашел исправление, хотя оно мне не нравится, но вот мое решение:
TLDR - вот мое решение . О том, как я туда попал, я вставил в свои заметки во время отладки:
container_commands:
01_migrate:
command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
leader_only: true
Хотя мне это не нравится, я подтвердил с AWS Support, что это на самом деле рекомендованный способ сделать это. Вы должны исходить из среды python, так как в AL2 они используют виртуальные среды, чтобы оставаться более согласованными.
Из AWS объявления Amazon Linux 2 в декабре я обнаружил, что установленная среда python хранится в /var/app/venv/*/..
2020-07-22 19:20:41,376 [ERROR] -----------------------BUILD FAILED!------------------------
2020-07-22 19:20:41,376 [ERROR] Unhandled exception during build: Command 01_migrate failed
Traceback (most recent call last):
File "/opt/aws/bin/cfn-init", line 171, in <module>
worklog.build(metadata, configSets)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 129, in build
Contractor(metadata).build(configSets, self)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 530, in build
self.run_config(config, worklog)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 542, in run_config
CloudFormationCarpenter(config, self._auth_config).build(worklog)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 260, in build
changes['commands'] = CommandTool().apply(self._config.commands)
File "/usr/lib/python2.7/site-packages/cfnbootstrap/command_tool.py", line 117, in apply
raise ToolError(u"Command %s failed" % name)
ToolError: Command 01_migrate failed
Я нашел log, который на самом деле сообщает мне более полезную информацию: /var/log/cfn-init-cmd.log
, что дает мне эту ошибку:
2020-07-22 21:08:32,757 P1620 [INFO] ============================================================
2020-07-22 21:08:32,757 P1620 [INFO] Command 01_migrate
2020-07-22 21:08:32,771 P1620 [INFO] -----------------------Command Output-----------------------
2020-07-22 21:08:32,772 P1620 [INFO] File "manage.py", line 17
2020-07-22 21:08:32,772 P1620 [INFO] ) from exc
2020-07-22 21:08:32,772 P1620 [INFO] ^
2020-07-22 21:08:32,772 P1620 [INFO] SyntaxError: invalid syntax
2020-07-22 21:08:32,772 P1620 [INFO] ------------------------------------------------------------
2020-07-22 21:08:32,772 P1620 [ERROR] Exited with error code 1
, что странно. Вероятно, это означает, что я использую неправильную версию python. Поэтому мне, вероятно, нужно изменить мою команду: итак ... я пробовал:
python manage.py migrate
python3 manage.py migrate
Это дало мне лучшее сообщение об ошибке
2020-07-23 14:47:06,906 P14080 [INFO] ============================================================
2020-07-23 14:47:06,906 P14080 [INFO] Command 01_migrate
2020-07-23 14:47:06,936 P14080 [INFO] -----------------------Command Output-----------------------
2020-07-23 14:47:06,936 P14080 [INFO] Traceback (most recent call last):
2020-07-23 14:47:06,936 P14080 [INFO] File "manage.py", line 11, in main
2020-07-23 14:47:06,936 P14080 [INFO] from django.core.management import execute_from_command_line
2020-07-23 14:47:06,936 P14080 [INFO] ModuleNotFoundError: No module named 'django'
2020-07-23 14:47:06,937 P14080 [INFO]
2020-07-23 14:47:06,937 P14080 [INFO] The above exception was the direct cause of the following exception:
2020-07-23 14:47:06,937 P14080 [INFO]
2020-07-23 14:47:06,937 P14080 [INFO] Traceback (most recent call last):
2020-07-23 14:47:06,937 P14080 [INFO] File "manage.py", line 28, in <module>
2020-07-23 14:47:06,937 P14080 [INFO] main()
2020-07-23 14:47:06,937 P14080 [INFO] File "manage.py", line 17, in main
2020-07-23 14:47:06,937 P14080 [INFO] ) from exc
2020-07-23 14:47:06,937 P14080 [INFO] ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
2020-07-23 14:47:06,937 P14080 [INFO] ------------------------------------------------------------
2020-07-23 14:47:06,937 P14080 [ERROR] Exited with error code 1
, но кажется, что библиотеки python не установлены, когда я запускаю с python3, поэтому, вероятно, это относится к установке системы python3, а не к виртуальная среда.
Небольшая тирада, которую я оставил по этому поводу здесь: Python на платформе Amazon Linux 2 · Проблема № 15 · aws / elasti c -beanstalk-roadmap · GitHub что связано с.
?
source /var/app/venv/*/bin/activate && python3 manage.py migrate
? Я нашел среду на экземпляре EC2 и вручную загрузил ее, чтобы заставить использовать правильную версию python. Похоже, это решило проблему среды python. Теперь RDS, кажется, не имеет базы данных, но это кажется более исправимым.
2020-07-23 15:26:32,016 P14702 [INFO] ============================================================
2020-07-23 15:26:32,016 P14702 [INFO] Command 01_migrate
2020-07-23 15:26:32,426 P14702 [INFO] -----------------------Command Output-----------------------
2020-07-23 15:26:32,427 P14702 [INFO] Traceback (most recent call last):
2020-07-23 15:26:32,427 P14702 [INFO] File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/db/backends/base/base.py", line 220, in ensure_connection
2020-07-23 15:26:32,427 P14702 [INFO] self.connect()
2020-07-23 15:26:32,427 P14702 [INFO] File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/utils/asyncio.py", line 26, in inner
2020-07-23 15:26:32,427 P14702 [INFO] return func(*args, **kwargs)
2020-07-23 15:26:32,427 P14702 [INFO] File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/db/backends/base/base.py", line 197, in connect
2020-07-23 15:26:32,427 P14702 [INFO] self.connection = self.get_new_connection(conn_params)
2020-07-23 15:26:32,427 P14702 [INFO] File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/utils/asyncio.py", line 26, in inner
2020-07-23 15:26:32,427 P14702 [INFO] return func(*args, **kwargs)
2020-07-23 15:26:32,427 P14702 [INFO] File "/var/app/venv/staging-LQM1lest/lib/python3.7/site-packages/django/db/backends/postgresql/base.py", line 185, in get_new_connection
2020-07-23 15:26:32,427 P14702 [INFO] connection = Database.connect(**conn_params)
2020-07-23 15:26:32,428 P14702 [INFO] File "/var/app/venv/staging-LQM1lest/lib64/python3.7/site-packages/psycopg2/__init__.py", line 127, in connect
2020-07-23 15:26:32,428 P14702 [INFO] conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
2020-07-23 15:26:32,428 P14702 [INFO] psycopg2.OperationalError: FATAL: database "ebdb" does not exist
для меня, на этом этапе я знал, что команда migrate прошла успешно, поэтому решение просто:
container_commands:
01_migrate:
command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
leader_only: true
Конечно, мне пришлось подключиться к экземпляру RDS и создать базу данных, но отсюда это сработало.