Antes de começarmos, vamos passar por alguns conceitos básicos:
-
Balanceadores de carga (Load Balancers) encaminham o tráfego para um ou mais provedores de serviço. Isso significa que você pode ter diversas instâncias EC2 servindo o mesmo tipo de conteúdo, sendo representadas por um único serviço.
-
Alta disponibilidade é o fato do seu sistema permanecer operacional por um longo período de tempo. Isso significa que o seu sistema é mais resiliente a falhas.
-
Separação de serviços refere-se a garantir que, se você tiver multiplos sistemas dependentes uns dos outros, eles existam separadamente e compartilhem menos modos de falha.
-
Artefatos sao subprodutos tangíveis do desenvolvimento dos nossos sistemas. No nosso exemplo, nosso artefato será o pacote Wordpress modificado.
-
Artifacts are tangible byproducts of our systems development. In this case, our artifact will be the modified Wordpress package that's special to only you.
Agora vamos começar!
Nesse exercício prático nós iremos:
- Criar um Balanceador Elastic
- Reinstalar o Wordpress, porém usando um banco de dados externo
- Criar um artefato do seu Wordpress modificado e então enviá-lo para o S3
- Criar outra instância usando o artefato como base
Vá à Services > EC2 e então procure por Load Balancers. Clique em Create Load Balancer
Na próxima página, certifique-se de selecionar Classic Load Balancer.
Coloque meu_nome-elb em Load Balancer Name (substitua meu_nome po um nome a sua escolha). Em Create ELB Inside, selecione My Default VPC.
Nesse caso, iremos deixar as configurações como estão - mas clique em Load Balancer Protocol e você verá algumas opções - balanceadores são muito poderosos!
Na próxima página, escolha a opção Create a new Security Group. Observe que é similar aos security groups que fizemos anteriormente - semelhante a um "firewall" no qual você pode configurar o tipo de tráfego que é permitido.
Nós deixaremos as configurações padrão por agora, exceto o campo "Source", no qual você deve escolher "My IP".
Na próxima página, nós iremos configurar os health checks. Health checks verificam se a instância está "saudável", ou seja, se está aceitando tráfego ou se não está recebendo erros. Observe as dicas dadas em cada uma das opções.
Agora iremos escolher TCP como protocolo Ping, usando a porta 80. Isso significa que o balanceador irá checar a porta 80 de cada uma das instâncias e marcá-la como "saudável" se estas responderem de forma correta, sem erros.
Na página de instâncias, selecione a instância que você criou no módulo anterior. Isso irá habilitar o encaminhamento de qualquer tráfego que chegar ao seu balanceador para a sua instância.
Como de costume, vamos adicionar uma tag. Ponha uma chave chamada Name e associe um valor meu_nome-elb (substitua meu_nome por um nome de sua escolha).
Revise todas as configurações e clique em Create.
Clique no link que redireciona para o seu ELB. Assim como na instância, você verá um painel com as propriedades do seu ELB. Anote o DNS Name, usaremos depois.
Como o Wordpress mantem os dados de URLs no banco de dados, nós precisamos reinstalá-lo. Se sua sessao SSH ainda estiver ativa então prossiga - caso contrário, inicie uma sessão SSH (se precisar revisite as instruções aqui).
Usando o seu terminal ou Putty, vá até o diretório do Wordpress e então remova o arquivo wp-config.php:
cd /var/www/html/
sudo rm wp-config.php
Agora abra o seu navegador e cole o DNS Name que você anotou no passo 11. Você irá ver uma página de instalação. Prossiga com a instalação, mas quando aparecer um painel para inserção dos detalhes do banco de dados insira os seguintes valores:
Database Name: devopsgirlsdb
Database User: devopsgirls
Database Password: devopsgirlsrds
Database Host: rds.devopsgirls.internal
Database Prefix: firstname_
Exemplo:
Certifique-se de substituir 'firstname_' pelo seu primeiro nome. Por exemplo, 'Banana Smith' deve colocar 'banana_'.
Finalize a instalação, até que você chegará a uma página de Blog. Agora que o Wordpress está funcionando nós podemos criar o nosso artefato.
Se a instalação ocorreu bem, então você irá criar uma cópia do seu diretório de configuração, dessa forma não precisaremos reinstalá-lo e seguir todo o processo anterior novamente. Nós podemos fazer isso via terminal ou utilizando Putty. Execute os seguintes comandos:
cd /var/www/html/
sudo tar cvfz ~/primeironome.ultimonome-wordpress.tgz .
Altere os valores primeironome e ultimonome com os seus dados. cd /var/www/html altera o diretório atual para /var/www/html - Onde está instalado o Wordpress. Então, na segunda linha, criamos um arquivo comprimido tar - primeironome.ultimonome-wordpress.tgz - contendo todos os arquivos e pastas dentro do diretório atual.
S3 é um serviço de armazenamento de objetos - basicamente permite que você armazene arquivos para um diretório e você pode compartilhá-lo tanto com a sua conta (privado) ou com o mundo (público). Nós faremos isso executando os seguintes comandos - um para configurar o tamanho máximo de upload, e outro para de fato copiar o arquivo para o S3 (s3 cp).
aws configure set default.s3.multipart_threshold 64MB
aws s3 cp ~/firstname.lastname-wordpress.tgz s3://devopsgirls-training-br-coaches/firstname.lastname-wordpress.tgz --no-sign-request
No navegador, vá em Services > S3. Clique no bucket chamado devopsgirls-training-br-coaches. Se tudo ocorreu bem, o seu arquivo deve aparecer aqui!
Recaptulando: Nós temos agora um balanceador e um artefato. Agora nós queremos ter múltiplas instâncias para que o nosso serviço continue rodando caso uma das instâncias caia.
Vá em Services > EC2 através do console web. Como no primeiro módulo, nós vamos criar uma nova instância. Clique em Launch Instance.
No passo 1, escolha Amazon Linux AMI. Em Instance Type, selectione t2.micro.
Você pode pensar em User Data como scripts que você quer que rode quando sua instância EC2 inicia. Nós podemos usar User Data para declarar o que nós queremos fazer - nesse caso, vamos declarar os mesmos comandos que usamos quando instalamos o Wordpress pela primeira vez - exceto pelo fato de que não precisamos fazer login e rodar manualmente.
Na aba Advanced Details em Step 3: Configure Instance Details, cole os seguintes comandos abaixo em User Data:
#!/bin/bash
yum install -y mysql php php-mysql httpd
aws configure set default.s3.multipart_threshold 64MB
aws s3 cp s3://devopsgirls-training-br-coaches/primeironome.ultimonome-wordpress.tgz /var/www/wordpress.tgz --no-sign-request
tar xvfz /var/www/wordpress.tgz -C /var/www/html/
chown -R apache /var/www/html/
service httpd start
Lembrando que você deve substituir primeironome.ultimonome pelos seus dados (o mesmo que você colocou anteriormente). Sua configuração deve estar como na imagem abaixo:
Para o resto da configuração da instância, especifique o seguinte:
- Storage: Defaults
- Tags:
Key:Name
Value: meunome-wordpress2
Como sua instância deve receber trágego somente do seu balanceador, você pode especificar o seu balanceador como origem. Isso fará com que sua instância seja mais segura reduzindo o tipo de tráfego que ela pode receber.
Adicionalmente, você não precisa mais especificar o acesso SSH porque todas as configurações foram feitas através do seu User Data. Para a configuração de security group, escolha Create a new security group e especifique o seguinte:
- Type: HTTP
- Source: your ELB
Deve ficar assim:
Clique em Launch instance para iniciar a sua instância. Agora, volte para a sessão de Balanceadores ( Services > EC2 > Load Balancers ). Selecione o balanceador que você criou anteriormente e clique em Instances no painel inferior.
Clique em Edit Instances e adicione a nova instância que você acabou de criar (meunome-wordpress-2). Clique em Save.
Vá na aba Description do seu balanceador. Se tudo ocorreu bem, deve aparecer "2 of 2 instances in service". Voce pode testar da seguinte forma:
-
Recarregue a página do Wordpress no seu navegador
-
No console AWS (Services > EC2), clique com o botão direito em uma das suas instâncias e selecione Stop Instance.
-
Se tudo ocorreu bem, você deve continuar conseguindo acessar o seu site ao recarregar a página.
Parabéns! Agora você tem um serviço com maior disponibilidade rodando!