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 init
comando 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 a implantação, ou seja, config
e optionsettings
. A última entre as outras opções contém a configuração WSGI que deve ser atualizada /etc/httpd/conf.d/wsgi.conf
nas 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 NumThreads
ou NumProcesses
, os respectivos parâmetros são alterados wsgi.conf
conforme o esperado. Mas, independentemente do que escrevo nos parâmetros WSGIPath
e 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.push
e tendo o seguinte conteúdo do .ebextensions/python.config
arquivo, 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.
fonte
Respostas:
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.
fonte
Considere usar .ebextensions documentados em:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
Você pode usar
file:
para provisionar seu arquivo de configuração conforme necessário na instância do host. E, em seguida, reinicie / recarregue, se necessário, comcommand:
fonte