Distribuzione errata dell'app WSGI su AWS utilizzando Elastic Beanstalk


8

collegamento incrociato con i forum AWS

Ho sviluppato un semplice servizio Web Python utilizzando WSGI e vorrei implementarlo nel cloud AWS utilizzando Elastic Beanstalk. Il mio problema è che non riesco a configurare correttamente nel cloud tutte le opzioni specificate nella configurazione di Elastic Beanstalk.

Per la distribuzione, utilizzo l'utilità CLI Elastic Beanstalk. Ho eseguito il eb initcomando e impostato i parametri richiesti. Successivamente, è .elasticbeanstalkstata creata una directory denominata nel mio albero dei sorgenti. Ha due file di configurazione utilizzati per la distribuzione, vale a dire confige optionsettings. Quest'ultima tra le altre opzioni contiene la configurazione WSGI che deve essere aggiornata /etc/httpd/conf.d/wsgi.confnelle istanze. Dopo alcune delle mie regolazioni, il file ha le seguenti impostazioni:

[AWS: elasticbeanstalk: applicazione: ambiente]
DJANGO_SETTINGS_MODULE = 
PARAM1 = 
PARAM2 = 
PARAM4 = 
PARAM3 = 
PARAM5 = 

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

[AWS: elasticbeanstalk: contenitore: python: staticfiles]
/ statico = statico /

[AWS: elasticbeanstalk: hostmanager]
LogPublicationControl = false

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

[AWS: elasticbeanstalk: applicazione]
URL controllo integrità applicazione = 

[AWS: autoscaling: asg]
MaxSize = 10
MinSize = 1
Zone di disponibilità personalizzate = 

[AWS: elasticbeanstalk: monitoraggio]
Termina automaticamente istanze non salutari = true

[AWS: elasticbeanstalk: SNS: argomenti]
Endpoint di notifica = 
Protocollo di notifica = email

Si scopre che non tutte queste opzioni sono prese in considerazione quando avvio l'ambiente o lo aggiorno. Pertanto, quando aggiorno NumThreadso NumProcesses, i rispettivi parametri vengono modificati wsgi.confcome previsto. Ma qualunque cosa io scriva nei parametri WSGIPathe StaticFiles, non sono in grado di cambiare automaticamente i rispettivi valori di wsgi.conf, rimangono

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

che mi fa impazzire. Inoltre, quando distribuisco la mia applicazione utilizzando git aws.pushe avendo i seguenti contenuti di .ebextensions/python.configfile, nessuna delle opzioni specificate in essa influisce sulla distribuzione.

option_settings:
     - namespace: aws: elasticbeanstalk: container: python
       option_name: WSGIPath
       valore: mysite / wsgi.py
     - namespace: aws: elasticbeanstalk: container: python
       option_name: NumProcesses
       valore: 5
     - namespace: aws: elasticbeanstalk: container: python
       option_name: NumThreads
       valore: 25
     - spazio dei nomi: aws: elasticbeanstalk: container: python: staticfiles
       nome_opzione: / statico /
       valore: app / statico / 

Mi chiedo cosa dovrei fare per forzare AWS a utilizzare tutti i parametri specificati nella configurazione, vale a dire il percorso WSGI e il percorso dei miei dati statici.


Sto riscontrando questo problema. Non riesco a far aggiornare WSGIPath ora, ho fatto ricorso alla creazione di un nuovo ambiente. Questo è un serio territorio "WTF" ...
aendrew

Risposte:


1

Potresti voler creare un container Docker e distribuirlo su Elastic Beanstalk. AWS ha un esempio di Python per farlo su https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample e un repository github completo su https: // github.com/aws-samples/eb-py-flask-signup/tree/docker

Sarà molto più facile testare localmente e avrai molta più flessibilità. La mia regola empirica è che, una volta trascorso il tempo a combattere il quadro che dovrebbe semplificarmi la vita, è tempo di cambiare approccio. Direi che hai raggiunto quel punto.

Sarà anche facile migrare la tua app su qualcosa come Fargate lungo la strada.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.