Việc triển khai không chính xác ứng dụng WSGI lên AWS bằng cách sử dụng Elastic Beanstalk


8

liên kết chéo đến các diễn đàn AWS

Tôi đã phát triển một dịch vụ web Python đơn giản bằng WSGI và muốn triển khai nó lên đám mây AWS bằng cách sử dụng Elastic Beanstalk. Vấn đề của tôi là tôi không thể làm cho tất cả các tùy chọn tôi chỉ định trong cấu hình Đàn hồi đàn hồi được cấu hình chính xác trong đám mây.

Để triển khai, tôi sử dụng tiện ích CLI Bean Beanalk. Tôi đã chạy eb initlệnh và thiết lập các tham số cần thiết. Sau này, một thư mục có tên .elasticbeanstalkđã được tạo trong cây nguồn của tôi. Nó có hai tệp cấu hình được sử dụng để triển khai, cụ thể là configoptionsettings. Cái sau trong số các tùy chọn khác chứa cấu hình WSGI phải cập nhật /etc/httpd/conf.d/wsgi.conftại các phiên bản. Sau một số điều chỉnh của tôi, tệp có các cài đặt sau:

[aws: thunbeanstalk: ứng dụng: môi trường]
DJANGO_SETTINGS_MODULE = 
PARAM1 = 
PARAM2 = 
PARAM4 = 
PARAM3 = 
PARAM5 = 

[aws: thunbeanstalk: container: python]
WSGIPath = handler.py
NumProcesses = 2
TĩnhFiles = / static =
NumThreads = 10

[aws: thunbeanstalk: container: python: staticfiles]
/ static = static /

[aws: thunbeanstalk: hostmanager]
LogPublicationControl = false

[aws: autoscaling: launchconfiguration]
InstanceType = t1.micro
EC2KeyName = zmicier-aws

[aws: thunbeanstalk: ứng dụng]
URL kiểm tra sức khỏe ứng dụng = 

[aws: tự động cân bằng: asg]
Kích thước tối đa = 10
Kích thước tối thiểu = 1
Vùng sẵn có tùy chỉnh = 

[aws: thunbeanstalk: giám sát]
Tự động chấm dứt trường hợp không lành mạnh = true

[aws: thunbeanstalk: sns: chủ đề]
Điểm cuối thông báo = 
Giao thức thông báo = email

Nó chỉ ra rằng không phải tất cả các tùy chọn này được xem xét khi tôi bắt đầu môi trường hoặc cập nhật nó. Do đó, khi tôi cập nhật NumThreadshoặc NumProcesses, các tham số tương ứng sẽ được thay đổi wsgi.confnhư mong đợi. Nhưng bất cứ điều gì tôi viết cho WSGIPathStaticFilescác tham số, tôi không thể tự động thay đổi các giá trị tương ứng wsgi.conf, chúng vẫn còn

Alias /static /opt/python/current/app/
WSGIScriptAlias / /opt/python/current/app/application.py

Điều đó khiến tôi phát điên. Hơn nữa, khi tôi triển khai ứng dụng của mình bằng cách sử dụng git aws.pushvà có các nội dung sau của .ebextensions/python.configtệp, không có tùy chọn nào tôi chỉ định trong đó ảnh hưởng đến việc triển khai.

tùy chọn
     - không gian tên: aws: thunbeanstalk: container: python
       tùy chọn tên: WSGIPath
       giá trị: mysite / wsgi.py
     - không gian tên: aws: thunbeanstalk: container: python
       tùy chọn tên: NumProcesses
       giá trị: 5
     - không gian tên: aws: thunbeanstalk: container: python
       tùy chọn tên: NumThreads
       giá trị: 25
     - không gian tên: aws: thunbeanstalk: container: python: staticfiles
       tùy chọn tên: / static /
       giá trị: ứng dụng / tĩnh / 

Tôi tự hỏi tôi nên làm gì để buộc AWS sử dụng tất cả các tham số tôi chỉ định trong cấu hình, cụ thể là Đường dẫn WSGI và đường dẫn đến dữ liệu tĩnh của tôi.


Tôi đang có vấn đề này. Tôi dường như không thể yêu cầu WSGIPath cập nhật ngay bây giờ, đã dùng đến việc tạo ra một môi trường mới. Đây là một số lãnh thổ "WTF" nghiêm trọng ...
ký vào

Câu trả lời:


1

Bạn có thể muốn xem xét việc xây dựng một Docker container và triển khai nó lên Elastic Beanstalk. AWS có một mẫu Python để thực hiện việc này tại https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample và một github đầy đủ tại https: // github.com/aws-samples/eb-py-flask-signup/tree/docker

Việc kiểm tra cục bộ sẽ dễ dàng hơn nhiều và bạn linh hoạt hơn rất nhiều. Nguyên tắc nhỏ của tôi là một khi tôi dành thời gian chiến đấu với khuôn khổ sẽ giúp cuộc sống của tôi dễ dàng hơn thì đó là lúc thay đổi cách tiếp cận. Tôi muốn nói rằng bạn đã đạt đến điểm đó.

Nó cũng sẽ giúp bạn dễ dàng di chuyển ứng dụng của mình sang một thứ như Fargate trên đường.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.