Implantação incorreta do aplicativo WSGI na AWS usando o Elastic Beanstalk

8

link para fóruns da AWS

Desenvolvi um serviço Web Python simples usando 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 corretamente configuradas na nuvem.

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

[aws: elasticbeanstalk: aplicação: ambiente]
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: aplicativo]
URL de verificação da integridade do aplicativo = 

[aws: escalonamento automático: asg]
MaxSize = 10
MinSize = 1
Zonas de disponibilidade personalizadas = 

[aws: elasticbeanstalk: monitoramento]
Terminar automaticamente instâncias não íntegras = true

[aws: elasticbeanstalk: sns: topics]
Ponto de extremidade de notificação = 
Protocolo de notificação = email

Acontece que nem todas essas opções são consideradas quando eu inicio o ambiente ou atualizo. Assim, quando eu atualizo NumThreadsou NumProcesses, os respectivos parâmetros são alterados wsgi.confconforme o esperado. Mas, independentemente do que escrevo nos parâmetros WSGIPathe StaticFiles, não consigo alterar automaticamente os respectivos valores de wsgi.conf, eles permanecem

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

o que me deixa louco. Além disso, quando implanto meu aplicativo usando git aws.pushe tendo o seguinte conteúdo do .ebextensions/python.configarquivo, nenhuma das opções especificadas nele afeta a implantação.

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

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

Zmicier Zaleznicenka
fonte
Estou tendo esse problema. Parece que não consigo atualizar o WSGIPath agora, tentei criar um novo ambiente. Este é um território sério de "WTF" ...
aendrew 07/02/14

Respostas:

1

Você pode querer criar um contêiner do Docker e implantá-lo no Elastic Beanstalk. A AWS tem uma amostra do Python para fazer isso em https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/docker-singlecontainer-deploy.html#docker-singlecontainer-pythonsample e um repositório completo do github em https: // github.com/aws-samples/eb-py-flask-signup/tree/docker

Será muito mais fácil testar localmente, e você terá muito mais flexibilidade. Minha regra geral é que, depois de passar um tempo lutando contra a estrutura que deveria facilitar minha vida, é hora de mudar de abordagem. Eu diria que você chegou a esse ponto.

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

Sam Bashton
fonte