Django com Auto scaling na AWS – parte 1/2

Olá,

nesse artigo quero mostrar uma forma de hospedar um app Django na plataforma de cloud da Amazon Web Services, utilizando o recurso de Auto Scaling do EC2.

Para quem não conhece, o Auto Scaling é uma das principais funcionalidades da AWS, pois permite que você otimize seus gastos, aumentando ou diminuindo a quantidade de recursos contratados de acordo com a necessidade. Dessa forma você só paga pelo que realmente utiliza.

Para saber mais, dê uma olhada nesses posts:


Django com Auto scaling na AWS

Bom, vamos ao que interessa. A figura abaixo ilustra a estrutura que vamos montar.

django-scale-diagram

Nesse diagrama temos:

  • Um ELB (Elastic Load Balancer) recebendo o tráfego e redirecionando para as instâncias Django
  • Auto Scale Group que cria ou destrói instâncias Django de acordo com os critérios (uso de cpu, memória, etc…) definidos ao configurá-lo
  • Um banco de dados Mysql centralizado, hospedado no RDS (serviço de bancos de dados relacionais da AWS)

Como sou fã do estilo “Jack” de ir por partes, defini 5 passos principais para atingir o objetivo:

  1. Criar e configurar o ambiente
  2. Configurar e testar o app Django
  3. Criar uma AMI
  4. Criar e configurar o ELB e Auto Scaling group
  5. Testar!

1 – Criar e configurar o ambiente

Para iniciar, precisamos criar uma instância RDS com Mysql, mas antes disso, temos que criar uma DB Subnet na nossa VPC.

No painel de controle do RDS, clique na opção Subnet Groups, preencha os campos obrigatórios, e selecione a VPC que você ira utilizar mais a frente para criar as instâncias EC2.

Adicione as duas subnets da VPC escolhida e confirme a criação do Subnet Group.

rds-vpc

 

Agora na opção Instances clique em Launch DB Instance.

rds-1

Após preencher os dados obrigatórios nos steps 2 e 3, selecione a subnet criada anteriormente, Security Group default no Step 4 e clique em Launch DB Instance.

rds-vpc-1

 

Depois disso, crie uma instância EC2 utilizando a Amazon Linux AMI.

Selecione a Amazon Linux AMI

Selecione o mesmo Security Group de sua Instância Mysql e certifique-se que as portas 22 e 8000 estão abertas para seu endereço IP.

Abrir as portas 22 e 8000

Após aguardar a criação da instância, será necessário acessar a instância por meio do SSH, caso você tenha alguma dúvida de como fazer esse procedimento, confira o artigo abaixo ou veja no video como fazer.

Connecting to Linux/Unix Instances from Windows Using PuTTY

Instância pronta

 

Instalando alguns softwares na instância EC2

Precisamos  instalar os pacotes necessários para o setup do aplicativo django. Os pacotes são:

  • gcc
  • git-all.noarch
  • python-virtualenv.noarch
  • supervisor.noarch ( serviço que vai subir o Django na inicialização do server )
  • mysql-devel ( libs necessárias para a instalação do conector mysql-python )

Para instalar os pacotes, utilize o comando:

sudo yum-config-manager --enable epel
sudo yum install gcc supervisor.noarch python-virtualenv.noarch git-all.noarch mysql-devel

Pronto, podemos começar a configuração do app django.

 

2 – Configurando e testando o app Django

Para isolar a instalação do Django, vamos criar um virtualenv.

cd /opt 
sudo virtualenv app

Agora vamos configurar o django, para isso vamos utilizar o app django_example que criei para este post.

Temos que clonar o app utilizando o git e instalar os pacotes python necessários.

cd /opt/app
. bin/activate
git clone https://github.com/rdgreis/django_example.git
pip install -r django_example/requirements.txt

Pronto, já podemos iniciar o django com o comando.

python manage.py runserver 0.0.0.0:8000

Se tudo correr bem , essa deve ser a saída do comando acima, indicando que o serviço está up, na porta 8000.

runserver_django

Acesse o endereço http://IP-da-vm:8000.

django-example-up

*Caso você não consiga acessar o Django, verifique no Security Group da instância EC2, se a porta 8000 está aberta para seu endereço IP.

Ótimo, temos o django rodando. Porém não o conectamos ao RDS.

Para isso podemos utilizar o arquivo custom_settings.sample.py, vamos copia-lo com o nome de custom_settings.py e editar as variáveis.

cd /opt/app/django_example/django_example
cp custom_settings.sample.py custom_settings.py
vi custom_settings.py

Substitua os valores, com as informações de sua instância Mysql.

settings

Agora é só rodar o syncdb do Django.

cd /opt/app/django_example
python manage.py syncdb

syncdb

Vamos testar novamente.

python manage.py runserver 0.0.0.0:8000

Agora você já pode acessar a área de administração do Django pelo endereço http://IP-VM:8000/admin.

Tudo certo?ótimo, então finalize o processo digitando CRTL+C, vamos configurar o supervisord.

 

Configurando o Supervisord

O supervisord vai ser o daemon responsável por gerenciar o processo do Django, subindo o serviço no boot do servidor.

Para configurá-lo, vamos utilizar o arquivo supervisord.conf que adicionei no produto de exemplo, substituindo o arquivo de configuração padrão.

mv /etc/supervisord.conf /etc/supervisord-old.conf
ln -s /opt/app/django_example/supervisord.conf /etc/
/etc/init.d/supervisord restart 

Após substituir o arquivo de configuração padrão e reiniciar o processo, você pode checar o status do supervidor com o comando supervisorctl status.

supervisord

Legal, o django está no ar, podemos conferir novamente pelo endereço http://IP-vm:8000.

Para que o supervisord seja iniciado no boot, execute os comandos:

sudo /sbin/chkconfig supervisord on
sudo /sbin/chkconfig --list supervisord

Supervisor init

Pronto, a instância está pronta para ser empacotada numa AMI.

 

3 – Criando a AMI

A AMI (Amazon Machine Image) será nosso modelo de servidor django. Quando o mecanismo de auto scaling da Amazon for ativado, ele vai utilizar essa imagem para criar novos servidores django idênticos.

Para criar a AMI, acesso o painel de instâncias do EC2, selecione a instância e clique em Actions.

ami-1

Preencha os campos obrigatórios e clique em Create Image.

ami-2

 

Aguarde alguns minutos até que a AMI seja criada e apareça na opção AMIs do menu lateral.

amis

Ufa! Estamos prontos para criar o Auto Scale group.

Nos vemos na segunda parte desse artigo, para completar os passos 4 e 5 para ter nosso app Django escalável na cloud da Amazon Web Services.

Qualquer comentário e/ou feedback é muito bem vindo. 🙂

3 comments

Leave a Reply