Penerapan aplikasi WSGI yang salah ke AWS menggunakan Elastic Beanstalk

8

cross-link ke forum AWS

Saya telah mengembangkan layanan web Python sederhana menggunakan WSGI dan ingin menyebarkannya ke cloud AWS menggunakan Elastic Beanstalk. Masalah saya adalah saya tidak bisa membuat semua opsi yang saya tentukan di konfigurasi Elastic Beanstalk untuk dikonfigurasi dengan benar di cloud.

Untuk penyebaran, saya menggunakan utilitas CLI Elastic Beanstalk. Saya telah menjalankan eb initperintah dan mengatur parameter yang diperlukan. Setelah ini, direktori bernama .elasticbeanstalkdibuat di pohon sumber saya. Ini memiliki dua file konfigurasi yang digunakan untuk penyebaran, yaitu configdan optionsettings. Yang terakhir di antara opsi-opsi lain berisi konfigurasi WSGI yang harus diperbarui /etc/httpd/conf.d/wsgi.confpada instance. Setelah beberapa penyesuaian saya file memiliki pengaturan berikut:

[aws: elasticbeanstalk: aplikasi: lingkungan]
DJANGO_SETTINGS_MODULE = 
PARAM1 = 
PARAM2 = 
PARAM4 = 
PARAM3 = 
PARAM5 = 

[aws: elasticbeanstalk: container: python]
WSGIPath = handler.py
NumProcesses = 2
StaticFiles = / static =
NumThreads = 10

[aws: elasticbeanstalk: wadah: python: staticfiles]
/ static = static /

[aws: elasticbeanstalk: hostmanager]
LogPublicationControl = false

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

[aws: elasticbeanstalk: aplikasi]
URL Pemeriksaan Kesehatan Aplikasi = 

[aws: autoscaling: asg]
MaxSize = 10
MinSize = 1
Zona Ketersediaan Khusus = 

[aws: elasticbeanstalk: monitoring]
Secara otomatis Hentikan Instans Tidak Sehat = true

[aws: elasticbeanstalk: sns: topik]
Pemberitahuan Titik Akhir = 
Protokol Pemberitahuan = email

Ternyata tidak semua opsi ini dipertimbangkan ketika saya memulai lingkungan atau memperbaruinya. Jadi, ketika saya memperbarui NumThreadsatau NumProcesses, parameter masing-masing bisa berubah wsgi.confseperti yang diharapkan. Tapi apa pun yang saya tulis ke WSGIPathdan StaticFilesparameter, saya tidak dapat secara otomatis mengubah nilai masing-masing wsgi.conf, mereka tetap

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

yang membuatku gila. Selain itu, ketika saya menyebarkan aplikasi saya menggunakan git aws.pushdan memiliki konten .ebextensions/python.configfile berikut , tidak ada opsi yang saya tentukan di dalamnya yang mempengaruhi penyebaran.

option_settings:
     - namespace: aws: elasticbeanstalk: container: python
       option_name: WSGIPath
       nilai: mysite / wsgi.py
     - namespace: aws: elasticbeanstalk: container: python
       option_name: NumProcesses
       nilai: 5
     - namespace: aws: elasticbeanstalk: container: python
       option_name: NumThreads
       nilai: 25
     - namespace: aws: elasticbeanstalk: container: python: staticfiles
       option_name: / static /
       nilai: aplikasi / statis / 

Saya bertanya-tanya apa yang harus saya lakukan untuk memaksa AWS menggunakan semua parameter yang saya tentukan dalam konfigurasi, yaitu Jalur WSGI dan jalur ke data statis saya.

Zmicier Zaleznicenka
sumber
Saya mengalami masalah ini. Sepertinya saya tidak bisa mendapatkan WSGIPath untuk memperbarui sekarang, telah terpaksa menciptakan lingkungan baru. Ini adalah wilayah "WTF" yang serius ...
aendrew

Jawaban:

1

Anda mungkin ingin melihat pembuatan wadah Docker dan menempatkannya ke Elastic Beanstalk. AWS memiliki sampel Python untuk melakukan ini di https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample dan repo github lengkap di https: // github.com/aws-samples/eb-py-flask-signup/tree/docker

Akan lebih mudah untuk menguji secara lokal, dan Anda memiliki lebih banyak fleksibilitas. Aturan praktis saya adalah bahwa begitu saya menghabiskan waktu melawan kerangka kerja yang seharusnya membuat hidup saya lebih mudah maka saatnya untuk mengubah pendekatan. Saya akan mengatakan bahwa Anda telah mencapai titik itu.

Ini juga akan memudahkan untuk memigrasikan aplikasi Anda ke sesuatu seperti Fargate.

Sam Bashton
sumber