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 init
perintah dan mengatur parameter yang diperlukan. Setelah ini, direktori bernama .elasticbeanstalk
dibuat di pohon sumber saya. Ini memiliki dua file konfigurasi yang digunakan untuk penyebaran, yaitu config
dan optionsettings
. Yang terakhir di antara opsi-opsi lain berisi konfigurasi WSGI yang harus diperbarui /etc/httpd/conf.d/wsgi.conf
pada 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 NumThreads
atau NumProcesses
, parameter masing-masing bisa berubah wsgi.conf
seperti yang diharapkan. Tapi apa pun yang saya tulis ke WSGIPath
dan StaticFiles
parameter, 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.push
dan memiliki konten .ebextensions/python.config
file 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.
sumber
Jawaban:
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.
sumber
Pertimbangkan untuk menggunakan. Ekstensi yang didokumentasikan di:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
Anda dapat menggunakan
file:
untuk menyediakan file konfigurasi Anda seperti yang diperlukan pada instance host. Dan kemudian restart / muat ulang, jika diperlukan, dengancommand:
sumber