Rodando sua aplicação na Amazon do Brasil

Desde o início de nosso trabalho com o cloud em 2009 temos investido tempo e pesquisa na utilização do cloud como plataforma para diminuir custos (e trabalho!) e potencializar produtos, através de diversos vendors.

Com a Amazon não é diferente: nosso sistema de ensino online está deployado lá. Com o lançamento de grande parte da sua plataforma no Brasil, a Amazon se torna uma opção ainda mais interessante de onde ter sua aplicação. Vamos ver passo a passo como fazer um deploy e aproveitar das novas vantagens da Amazon por aqui.

Primeiro nos logamos no painel AWS Manager, e escolhemos a região da América do Sul:

Depois escolhemos a imagem que usaremos para a máquina, no nosso caso uma instalação linux limpa, mantida pela própria Amazon. Existem centenas de instalações possíveis (de linux e windows) que podem ser buscadas no market da amazon.

Escolhemos então a potência da máquina e em qual availability zone ela ficará. Comecemos com “sa-east-1a“, que indica América do Sul:

Vale lembrar que uma aplicação realmente com alta disponibilidade precisaria ser deploiada em duas ou mais avaliability zones, mesmo sendo pequena a chance de uma zona cair.

Nas duas próximas telas escolhemos detalhes do Kernel e do RAM, além de possíveis tags que queremos dar para a máquina (em geral para trabalhar através dos web services). No nosso caso deixaremos os defaults.

Quando uma nova máquina é criada, precisamos nos logar nela e, para isso, precisamos de uma chave privada de acesso. A amazon pergunta qual o nome que devemos dar a chave, criando e permitindo que baixemos o arquivo. Note que a chave contida nesse arquivo é importantíssima e qualquer um de sua posse poderá ter acesso a máquina.

Por fim, escolhemos quais portas desejamos deixar abertas. No caso de uma aplicação Java com Jetty ou Tomcat, adicionamos a porta padrão 8080:

Isso mesmo, nada de complicados usuários e senhas. Nada de gerenciá-los através de ferramentas de webadmin desatualizadas. Nada de complicadas regras e configuração de firewalls. A Amazon então permite confirmar todas as opções, e o resultado é a máquina rodando:

A máquina possui um IP interno (para ser acessado de dentro da Amazon) e um DNS público, através do qual acessaremos a mesma de fora da Amazon. O DNS público pode ser visto ao clicar no nome da máquina:

Vamos acessar a máquina via ssh:

chmod 700 caelum-exemplo.pem
ssh -i caelum-exemplo.pem ec2-user@ec2-177-71-153-49.sa-east-1.compute.amazonaws.com

Resultando em:

The authenticity of host 'ec2-177-71-153-49.sa-east-1.compute.amazonaws.com (177.71.153.49)' can't be established.
RSA key fingerprint is 34:a6:de:34:88:fd:a1:73:ae:c5:03:f1:ed:8e:2f:96.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-177-71-153-49.sa-east-1.compute.amazonaws.com,177.71.153.49' (RSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

See /usr/share/doc/system-release/ for latest release notes.
There are 16 security update(s) out of 24 total update(s) available

Agora fazemos download do jetty, descompactamos e rodamos o servidor (se preferir, utilize o Tomcat):

wget http://download.eclipse.org/jetty/8.1.0.RC1/dist/jetty-distribution-8.1.0.RC1.tar.gz
tar zxf jetty-distribution-8.1.0.RC1.tar.gz
jetty-distribution-8.1.0.RC1/bin/jetty.sh start

O servidor irá inicializar e você logo receberá a mensagem de que ele está ouvindo a porta 8080.

2011-12-15 17:54:27.682:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080 STARTING

Pronto, acesse seu jetty:

E se desejarmos atualizar a imagem da máquina, com atualizações de seguranca? Se sua máquina não armazena o banco, mas sim somente arquivos voláteis (de fácil reinstalação), basta terminá-la e criar uma nova. Sistema operacional atualizado! Para manter dados voláteis, você pode usar o RDS da Amazon para seu banco Mysql ou Oracle (ou outras máquinas para bancos não relacionais) e manter um script de configuração (usar técnicas de configuration management).

Mais: com apenas alguns cliques é muito fácil de adicionar um load balancer através de sticky sessions, configurar ips fixos, etc.

O que você está esperando para fazer seu primeiro deploy por lá?

32 Comentários

  1. Gabriel Novaes 20/12/2011 at 11:50 #

    E o preço? Tem algo a falar ?

  2. Guilherme Silveira 20/12/2011 at 12:16 #

    Oi Gabriel!

    O preço é mais salgado do que o preço dela fora do Brasil, infelizmente. Uma das *grandes* vantagens está no uso temporário de maquinas. Quando precisamos escalar, posso alugar uma maquina por algumas horas e depois desativa-la, pagando somente o tempo desejado. Para o aluguel de uma maquina full time durante um ano, outros concorrentes podem ser mais baratos.

    Mas mesmo assim ainda ganhamos em alguns quesitos de infra: o load balancing, por exemplo, é trivial.

    Abraço!

  3. Renato Sardinha 20/12/2011 at 12:18 #

    Tenho uma dúvida.

    Eu posso usar o Jboss invés do Jetty?

  4. Guilherme Silveira 20/12/2011 at 12:20 #

    Com certeza Renato!

    Você pode instalar o que quiser… (seguindo os termos da Amazon). É uma máquina linux (ou windows) como outra qualquer. No exemplo utilizamos o jetty pois foram só três comandos para baixar, descompactar, rodar. O jboss também seria nesse caso.

    Abraço!

  5. Marcelo Tozzi 20/12/2011 at 13:13 #

    Renato, nas “Community AMIs” tem uma porrada de máquinas que já vem com o JBoss pra tentar facilitar ainda mais!

  6. Guilherme Silveira 20/12/2011 at 13:35 #

    Oi Marcelo! Isso mesmo, mas lembre-se que você pode escolher uma instalação minimal que tenha só aquilo que você precisa ou com mais coisas.

    Tenho gostado da abordagem de pegar uma instalação zerada, instalar o mínimo, tirar um snapshot e usar esse snapshot a vontade para novas atualizações… a replicação fica muito barata.

  7. Julian Monteiro 20/12/2011 at 13:58 #

    Criar o snapshot é uma solução prática, mas o que fazer com os arquivos de configuração que por vezes são alterados?… é fácil esquecer de refazer o snapshot.

  8. Tapajos 20/12/2011 at 14:00 #

    Guilherme,

    Eu acho que a ideia de usar uma AMI e snapshots é a mais utilizada.

    Você chegou a avaliar sempre subir a maquina do zero (imagem mínima) e sempre usar o “user data” para subir a maquina?

    Aqui nós optamos por sempre subir a maquina do zero. O nosso deploy na verdade é subir maquinas novas com um novo código e matar as antigas.

    Desvantagem:

    * – demora mais
    * – o “user data” é limitado. (a solução usada é ele fazer é um download de outros scripts que são maiores)

    Vantagem:

    * – Não preciso me preocupar com atualizações, já que ao subir uma maquina nova ela instava o que tem de mais novo. Isso é crucial para atualizações de segurança.

    Opiniões?

  9. Paulo Silveira 20/12/2011 at 14:06 #

    Vale lembrar nosso outro uso do EC2 que está cada vez mais em voga: colocar o servidor de integração contínua lá. Fica fácil de paralelizar os testes com o auxílio dos plugins que as ferramentas já possuem para a Amazon.

  10. Guilherme Silveira 20/12/2011 at 14:48 #

    Oi Julian!

    Como o Tapajos disse, uma boa sacada é usar o server limpo (que é o foco desse post, inclusive! ). Deixando o script de receita de deploy da máquina em um servidor, você consegue replicar isso N vezes, onde N é o quanto deseja. E desliga suas outras máquinas antigas.

    Nesse processo é importante que sua homologação também use esse processo para não acabar usando versões diferentes de “qualquer coisa” que acabem causando efeitos surpresa. Mas se a arquitetura é limpa como a de exemplo aqui (jetty + apache + RDS pra banco) a chance de uma surpresa é muito pequena e o custo de stop start são os descritos pelo Tapajos.

    otimo comment!

    Abraço

  11. Daniel Serodio 20/12/2011 at 18:20 #

    Muito interessante o post. Fiquei curioso com o “[…] load balancing, por exemplo, é trivial”, vocês vão fazer um post sobre isso?

  12. José Papo 21/12/2011 at 10:43 #

    Olá! Sou o evangelista técnico da Amazon Web Services no Brasil. Para entender as questões de preço, vide minha resposta no fórum em portugues da AWS: https://forums.aws.amazon.com/thread.jspa?threadID=83141&tstart=0

  13. Guilherme Silveira 22/12/2011 at 15:22 #

    Oi Daniel!

    Atualizei o post com um link na seção onde você comentou. Basta ler “Utilizando o Elastic Load Balancing” e lá está!

    Abraço

  14. André 27/12/2011 at 13:26 #

    Muito bacana, mas será que é possível vocês compartilharem também a experiência que tem com os preços cobrados? Que produto exatamente vocês já usaram? Eu vi uma tal de Instância Reservada que custa $473 por 3 anos de uso em São Paulo. Mas daí do lado tem $0.04 por hora de Linux. É cobrado a soma dos 2 valores? Ou você tem que optar por contratar anualmente ou por hora? Eu andava muito desanimado com o suporte a Java dos provedores de hospedagem. Mas agora fiquei empolgado, se eu realmente puder ter a minha máquina virtual, eu posso instalar a versão Java que eu quiser, com o servidor Web da minha preferência. Abraços!

  15. André 27/12/2011 at 13:32 #

    Elaborando mais a minha pergunta: existe alguma taxa a mais a ser paga? Por exemplo: é necessário pagar por byte transferido? Ou essa anualidade já inclui tudo?

  16. Guilherme Silveira 27/12/2011 at 19:17 #

    Boa tarde André. Voce esta certo, são os dois preços juntos. Por pegar uma instancia reservada, a idéia é que o preço por hora baixe bastante, mas você paga um valor mais alto para dizer meio que “eu me comprometo em usar mais essa máquina”. Por outro lado, o cúmulo do “descomprometimento” seria comprar uma spot instance, onde você paga muito mais barato mas não precisa de um horário específico.

    Você está certo. A liberdade é total, é uma máquina tua. Enquanto a vantagem é essa liberadade, o chato é ter que se preocupar com a infra (que, como disse, em alguns casos é bem simples de cuidar, como no load balancing).

    Abraço!

  17. Gilvan Marques 03/02/2012 at 22:07 #

    Maior roubada. Utilizei o site somente 1 dia, criei um server de testes e agora, um mês depois me vem um email informando que devo $ 105 do mes de janeiro e já em fevereiro, tá $31,00…

    Não achei em lugar nenhum do site os valores da tabela de preços.

    Nas faqs informa que o valor é pré-pago… bla bla bla.

    Em suma, uma cilada para quem é de pequenas empresas ou só deseja testar o serviço.

  18. Julio Monteiro 01/03/2012 at 15:47 #

    Gilvan,

    Com certeza não é uma roubada. Os preços são bem claros e disponíveis em http://aws.amazon.com/pt/ec2/pricing/, além de você achar diversas calculadores para estimar o valor cobrado ao final do mês.

    E durante o percurso, você pode fazer uso dos relatórios deles para saber exatamente quanto que vai pagar pelos serviços utilizados. Se o valor cobrado foi um susto, foi por falta de acompanhamento, e não por problemas com a AWS.

  19. Emannuel Silveira 07/03/2012 at 17:07 #

    Guilherme Silveira,

    Você saberia informar se o “Free Tier” deles é realmente free? Tem como realmente utilizar gratuitamente um conjunto de serviços da amazon para rodar uma aplicação em java, por exemplo?

    Estou com vontade de fazer o cadastro para testar esse free tier, mas tenho medo de que eu suba sem querer algum serviço pago (e caro) e tenha uma surpresa desagradável na fatura do cartão. Você teria algum conselho quanto a isso?

    Abraço!

  20. Erick Melo 20/03/2012 at 10:24 #

    O free tier é FREE mesmo.. Eu utilizei o serviço free por um bom tempo. Só preste atenção pro tipo de instância que vc vai rodar (MICRO INSTANCE).. Só esse tipo que é free de verdade…

    O único custo que vc teria seria banda se o teu site for muito acessado.. Mas pra testes sai de graça mesmo!!

  21. Eduardo Souza 08/05/2012 at 16:49 #

    Pessoal, somente como informação, tenho implementado diversos projetos em Cloud na Amazon e percebi que os clientes estão contratando as instâncias EC2 “por demanda” que não tem preço de instalação cobrado no primeiro mês, e não contratam as instâncias “reservadas” de 1 ou 3 anos, porque dizem que não vão utilizar 100% do tempo, lembre-se que na hora de contratar vocÊ dizer a % de tempo de você vai usar da máquina, diminuindo o custo, o preço das instâncias reservada é quase 50% mais barato que as instâncias por demanda, em 6 meses o valor de implementação já se paga, lembrem-se disso.

    Eduardo Souza
    eduardo.souza@dominit.com.br
    Dominit Soluções em TI.

  22. Guilherme Silveira 08/05/2012 at 17:00 #

    Otimo Eduardo!

    No curso da amazon online da Caelum mencionamos justamente isso em um capitulo, quando vale a pena reservar/nao reservar etc. Como o Fabio Kung comentou em outro post, as vezes tambem vale tomar cuidado com a possivel queda de preco de infraestrutura, que pode fazer com que reservas mais curtas sejam positivas (como a de 1 ano)

    Abraçø

  23. Alex 06/09/2012 at 16:42 #

    Bacana o passo-a-passo! Exceto pelo tecniquês inventado e “deploiado” rss

  24. Anderson de Sousa 24/10/2012 at 10:31 #

    Olá pessoal,
    De acordo com os eventos que acompanho sobre cloud, palestras de Jose Papo sobre a WAS, fala-se muito sobre sucesso em seu uso e diminuição de custos. Para mim, ainda é nebuloso. Quando diminui custos, ninguém diz quanto diminuiu ou quanto custou uma solução de cloud. E quando diz que é barato, é barato quanto comparado ao custo de máquina e infra.
    Por exemplo: A Caelum tem uma plataforma fantástica de curso on-line, aquilo funciona 24h todos os dias, qual é custo em média deste sistema?
    Recentemente fiz uma projeção com a micro-instância, usando sempre o mínimo em tudo, ficou em torno de $ 66 dólares. Será que é isso mesmo?

  25. Guilherme Silveira 25/10/2012 at 11:52 #

    Oi Anderson tudo bem?

    Você está certo! No caso da plataforma online de cursos ela roda (hoje) em uma máquina medium com capacidade de 5 processadores 100% do tempo e com instancia reservada em high usage o que dá um belo desconto. Mas com certeza você está certo, a vantagem grotesca surge quando você tem boosts de necessidade de utilização e descarte de uma máquina – é a capacidade de poder escalar tua demanda que torna a solução barata. Se a demanda e o custo é fixo, talvez saia mais caro do que outra alternativa, tem que sempre por aconta no papel.

    Abraço!

  26. Jefferson 21/01/2013 at 16:08 #

    Olá Pessoal!
    Tenho a seguinte dúvida: possuo uma aplicação construída em 2007 usando J2EE com Tomcat. Nesta aplicação foi usado o recurso de sessão de usuário conforme as necessidades do sistema. Posso eu agora simplesmente fazer um deploy em Cloud? Tudo funcionará como antes?

    Desde já, agradeço

  27. Guilherme Silveira 21/01/2013 at 16:57 #

    Faz sentido sim Jefferson. Basta voce tomar os mesmos cuidados de replicacao de sessao que voce ja estava tomando antes – ou passar a tomar caso queira a replicacao.

    Abraço

  28. Jefferson 22/01/2013 at 09:18 #

    Certo Guilherme!
    Mas configurando manualmente a replicação de sessão fará necessário conhecer alguns detalhes do ambiente de infra como IP das máquinas usadas no cluster e ainda terei que configurar os tomcats em cada máquina para configurar a repicacao… Isto é possível por exemplo na Amazon? Terei todo esse controle?
    Eu nunca coloquei um aplicação grande em Cloud, talvez esse seja o problema de minhas dúvidas… Apenas fiz uns testes com Heroku

  29. Guilherme Silveira 23/01/2013 at 15:17 #

    Oi Jefferson.

    Você está certo. Isto é possivel na Amazon pois voce tem acesso ssh a maquina e controle total sobre ela

    Abraço

  30. kiko 01/03/2014 at 11:23 #

    Infelizmente acho que no Brasil o cloud ainda está engatinhando e não creio que um cheguemos a ter as mesmas vantagens que temos lá fora, preço principalmente.

  31. Neemias 20/07/2015 at 13:06 #

    Eu estou chegando agora nesse mundo de vms e tenho uma pequena dúvida!

    Eu posso instalar qualquer software(desktop) na Maquina? Eu poderia pegar um ERP e instalar e acessar de qualquer ambiente?

    Estou perguntando pq o mssql express é uma versão free do banco da microsoft e eu escolhi uma instancia que tinha windows server 2012 e ms sql expres 2014 e o custo saiu mais alto do que uma máquina sem mssql express.

    Essa é uma exceção ou eu só posso instalar softwares permitidos e taxados pela amazon?

Deixe uma resposta