Implementação incorreta do aplicativo WSGI no AWS usando o Elastic Beanstalk

8

ligação cruzada a fóruns da AWS

Desenvolvi um serviço da web Python simples usando o WSGI e gostaria de implantá-lo na nuvem da AWS usando o Elastic Beanstalk. Meu problema é que não posso fazer com que todas as opções especificadas na configuração do Elastic Beanstalk sejam configuradas corretamente na nuvem.

Para implantação, eu uso o utilitário CLI Elastic Beanstalk. Eu executei o comando eb init e configurei os parâmetros necessários. Depois disso, um diretório chamado .elasticbeanstalk foi criado na minha árvore de origem. Ele tem dois arquivos de configuração que são usados para implantação, ou seja, config e optionsettings . A última entre as outras opções contém a configuração WSGI que precisa atualizar /etc/httpd/conf.d/wsgi.conf nas instâncias. Depois de alguns ajustes, o arquivo tem as seguintes configurações:

[aws:elasticbeanstalk:application:environment]
DJANGO_SETTINGS_MODULE = 
PARAM1 = 
PARAM2 = 
PARAM4 = 
PARAM3 = 
PARAM5 = 

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

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

[aws:elasticbeanstalk:hostmanager]
LogPublicationControl = false

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

[aws:elasticbeanstalk:application]
Application Healthcheck URL = 

[aws:autoscaling:asg]
MaxSize = 10
MinSize = 1
Custom Availability Zones = 

[aws:elasticbeanstalk:monitoring]
Automatically Terminate Unhealthy Instances = true

[aws:elasticbeanstalk:sns:topics]
Notification Endpoint = 
Notification Protocol = email

Acontece que nem todas essas opções são consideradas quando eu inicio ou atualizo o ambiente. Portanto, quando eu atualizar NumThreads ou NumProcesses , os respectivos parâmetros serão alterados em wsgi.conf conforme o esperado. Mas o que quer que eu escreva para os parâmetros WSGIPath e StaticFiles , não consigo alterar automaticamente os valores respectivos de wsgi.conf , eles permanecem

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

que me deixa louco. Além disso, quando eu implantar meu aplicativo usando git aws.push e tendo o seguinte conteúdo do arquivo .ebextensions/python.config , nenhuma das opções que especifico afeta a implantação.

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

Gostaria de saber o que devo fazer para forçar a AWS a usar todos os parâmetros que eu especificar na configuração, ou seja, o caminho WSGI e o caminho para meus dados estáticos.

    
por Zmicier Zaleznicenka 26.10.2012 / 16:10

2 respostas

1

Você pode querer criar um contêiner Docker e implementá-lo no Elastic Beanstalk. A AWS tem um exemplo do Python para fazer isso em link e um repo completo do github no link

Será muito mais fácil testar localmente e você terá muito mais flexibilidade. Minha regra é que, uma vez que eu esteja gastando tempo lutando com a estrutura que deveria facilitar minha vida, então é hora de mudar a abordagem. Eu diria que você chegou a esse ponto.

Também facilitará a migração de seu aplicativo para algo como Fargate no futuro.

    
por 11.10.2018 / 10:05
0

Considere o uso de .ebextensions documentadas em:

link

Você pode usar file: para provisionar seu arquivo de configuração conforme necessário na instância do host. E então reinicie / recarregue, caso necessário, com command:

    
por 01.07.2018 / 19:30