Cuidados ao migrar sua aplicação para a AWS
por Henrique Bueno, CTO da Estabilis
Por volta do ano 2000, quando a SalesForce começou a levantar a bandeira do “no software”, era difícil imaginar que o modelo tradicional de venda e distribuição de software iria mudar tão rapidamente. Apenas poucos anos depois o modelo SaaS se consolidou e hoje é o novo padrão do mercado. Grandes players como SAP, Oracle e TOTVS já migraram suas plataformas para a nuvem e agora as comercializam no modelo de serviço.
É fato que a nuvem possibilita um modelo altamente escalável para a distribuição de seu software, independentemente do segmento. A Amazon Web Services, por exemplo, é a escolha de uma imensa fatia de empresas que buscam por IaaS (Infrastructure as a Service) para hospedar suas aplicações. Assim como qualquer outro projeto, migrar sua aplicação para a AWS exige um planejamento minucioso e um bom nível de conhecimento técnico da plataforma.
Neste artigo, abordaremos os principais pontos que devem ser considerados durante seu planejamento de migração para a AWS.
Escolha corretamente a região
Uma região é uma estrutura isolada em uma determinada área geográfica. Cada região é composta por duas ou mais zonas de disponibilidade – vale ressaltar que cada região é completamente independente das demais.
Atualmente, a AWS possui 16 regiões espalhadas pelo mundo todo, sendo possível escolher qual usar a partir da análise de alguns fatores:
- A latência de rede entre o usuário final e a região que pretende hospedar o serviço – para ajudar nesta decisão, é possível testar a latência entre sua localidade e todas as regiões disponíveis, por meio da ferramenta CloudPing.
- A disponibilidade dos serviços que você pretende usar naquela região – a AWS prioriza o lançamento dos serviços de acordo com a demanda percebida em cada região, e com base em sua viabilidade. Por exemplo: na região da América do Sul os serviços Aurora, ECS, EFS e Workspaces ainda não estão disponíveis.
- Outro fator é o compliance que, dependendo do segmento da empresa, apresenta algumas restrições quanto o armazenamento de dados fora do país.
Defina o tipo de instância de acordo com a necessidade
Existem 5 tipos de instâncias EC2 – parte central da plataforma de cloud computing da AWS, chamada Amazon Elastic Compute Cloud, que permite aos usuários alugar computadores virtuais para rodar suas próprias aplicações – otimizadas para se adequarem a diferentes usabilidades.
Os tipos de instâncias consistem em várias combinações de CPU, memória, armazenamento e capacidade. Esta escolha é importante porque rodar uma aplicação com um tipo de instância que não seja ideal poderá impactar diretamente na experiência dos usuários. E poderá aumentar significativamente seus custos com a AWS.
Escolha corretamente o tipo de disco
A AWS oferece dois tipos de disco: Unidades de estado sólido (SSDs) e Unidades de disco rígido (HDD). Assim como o tipo errado de instância, um deslize na escolha do tipo de disco pode fazer com que a aplicação não tenha uma performance adequada, impactando na experiência dos usuários e aumentando os custos com infraestrutura.
Arquitetura elástica
Antes de começar a implementar um ambiente é fundamental definir como será a arquitetura desse ambiente. Uma das principais vantagens da nuvem é a elasticidade, ou seja, a possibilidade de aumentar ou diminuir o ambiente conforme o uso.
Para uma arquitetura realmente elástica você deve considerar um ambiente que escale horizontalmente, o que significa adicionar novas instâncias ao invés de aumentar recursos em uma mesma instância. Isso possibilitará que você adicione ou remova instâncias no pool a qualquer momento, de maneira simples e sem tempo em inatividade.
Também é importante trabalhar com instâncias pequenas e escalar o ambiente horizontalmente, tendo em mente que as 8 horas comerciais diárias correspondem a apenas 25% do total de horas em um mês e não é necessário ter recursos alocados quando a carga de trabalho está baixa.
Alta disponibilidade
Antes de implementar o ambiente é importante desenhar a arquitetura. O próximo passo é pensar como nosso ambiente deve ser estruturado para que seja tolerante a falhas. Uma arquitetura tolerante a falhas está preparada, inclusive, para uma eventual indisponibilidade de toda uma zona de disponibilidade da AWS.
Segurança
Outro item que merece atenção especial é a segurança da sua aplicação. Esse é um assunto extenso justamente por ser complexo e com muitos detalhes. A imagem de uma empresa de SaaS pode ser gravemente ferida por conta de um vazamento de dados ou a descoberta de uma grave brecha de segurança.
Entenda o modelo de responsabilidade compartilhada
Enquanto a AWS é responsável pela segurança da nuvem, você é responsável pela segurança na nuvem. Em resumo, segurança da infraestrutura física até o hypervisor é responsabilidade da AWS. Tudo acima do hypervisor é sua responsabilidade.
Segmente sua rede em camadas
Sempre que possível segmente sua rede em pública e privada, mantendo apenas o load balancer na rede pública. Utilize NAT Gateway (ou NAT Instance) para disponibilizar acesso à internet para as instâncias em sua rede pública.
Utilize Bastion Host para administrar o ambiente
Como medida de segurança, permita acesso administrativo ao seu ambiente apenas através de uma instância na rede pública. Dentro dessa instância você conseguirá acessar as demais instâncias. O acesso ao bastion host deve ser restringido por IP de origem ou por VPN.
Configure adequadamente seus Security Groups
Considere o security group como um firewall que tem uma política padrão de DENY para conexões entrantes e uma política padrão de ALLOW para conexões de saída. Libere apenas o necessário e, se possível, restringindo a origem. NUNCA deixe liberada para toda a internet as portas de SSH e RDP. Os blocos de IP da AWS são extremamente visados por atacantes e uma instância com a porta 22 de cara para internet é presa fácil.
Implemente certificado SSL na sua aplicação
Criptografia na transmissão dos dados é essencial para uma aplicação enterprise. Nenhuma empresa de médio/grande porte aceitaria utilizar uma ferramenta web sem HTTPS. Na AWS é possível gerar gratuitamente certificados SSL e configurá-los nos seguintes serviços:
- Elastic Load Balancing
- Amazon CloudFront
- Amazon API Gateway
- AWS Elastic Beanstalk
Então não existe mais desculpa para sua aplicação somente rodar em HTTP!
Habilite o WAF
Sua aplicação é Web? Então habilite o WAF! Existem inúmeras vantagens em usar o WAF da AWS. Se comparado com outras soluções do mercado, o valor cobrado por este serviço é bem acessível.
Proteja-se de ataques DDoS com o AWS Shield
O AWS Shield está disponível em duas modalidades: Standard e Advanced. A modalidade standard protege seu ambiente contra ataques comuns, que ocorrem com mais frequência nas camadas 3 e 4 da infraestrutura. Já a Advanced oferece detecção aprimorada, protegendo contra ataques na camada de aplicações como floods de HTTP ou floods de consultas de DNS, fornecendo segurança granular.
Pense em como você irá monitorar seu ambiente
O CloudWatch pode monitorar recursos da AWS como instâncias EC2, tabelas do DynamoDB e instâncias de banco de dados do RDS, além de métricas personalizadas geradas pelos seus aplicativos e serviços, e quaisquer arquivos de log que seus aplicativos gerarem.
Monitore sua conta e o uso de APIs
O CloudTrail é um serviço que possibilita governança, conformidade, auditoria operacional e auditoria de riscos em sua conta da AWS. Com o CloudTrail, é possível registrar, monitorar continuamente e reter a atividade da conta relacionada às ações executadas na infraestrutura da AWS.
Tenha uma solução de segurança no nível da instância
Soluções como Deep Security da TrendMicro permitem um alto nível de segurança nas instâncias, atuando em diversas camadas, como Host IPS, Host IDS, Firewall, Virtual Patching e AntiMalware.
Automatize seus backups
Alguns serviços gerenciados pela AWS, como o RDS, permitem que configure uma rotina automatizada de backup. Para instâncias você pode utilizar integração entre CloudWatch e AWSCLI para automação ou contratar ferramentas como da Cloud8 facilitar essa tarefa. Não pense que somente por seu ambiente estar na nuvem você não precisa se preocupar com backup.
Otimize os custos
Já abordamos que uma estrutura elástica contribui para a otimização dos custos, pois você irá aumentar e reduzir os recursos conforme a demanda. Também vimos a importância de escolher adequadamente o tipo de instância e de disco EBS. Vamos agora abordar algumas estratégias complementares.
Faça offload da sua infraestrutura
Uma forma bastante conhecida de reduzir offload de servidores web é deixar que o load balancer cuide do SSL (SSL Offload). Isso economizará preciosos recursos computacionais das suas instâncias web. Além disso lembre que você pode usar o ACM para gerar certificados gratuitamente!
Outra forma é utilizar o CloudFront ou qualquer outro serviço de CND para fazer cache do conteúdo do seu site. Além de melhorar a experiência para seu usuário, poderá reduzir drasticamente a quantidade de servidores web necessários para sustentar sua aplicação.
Abuse das instâncias Spot
Você pode economizar até 90% dos custos de EC2 utilizando instâncias Spot. Com o objetivo de aproveitar a capacidade ociosa de infraestrutura dos datacenters, a AWS criou um modelo de preço dinâmico, chamado instâncias Spot. O preço das instâncias spot é baseado na oferta e demanda desta infraestrutura e oscila analogamente a uma bolsa de valores.
E se minha aplicação for cliente/server?
Uma barreira para algumas empresas migrarem para a nuvem é que suas aplicações são cliente/server, ou seja, um client é instalado nas estações de trabalho dos usuários, que se comunica com a aplicação instalada em um servidor. Essa arquitetura exige que a latência entre as estações e o servidor seja baixa, o que não ocorre quando se trafega pela internet. Existem alguns serviços que podem ser usados para resolver esse problema:
AppStream2.0
AWS AppStream 2.0 é um serviço de streaming de aplicações de desktop, acessível de qualquer navegador web com suporte a HTML5. O serviço é totalmente gerenciado pela AWS, o que abstrai a necessidade de planejar, implantar, gerenciar ou atualizar infraestrutura de streaming de aplicações. Uma grande vantagem dessa arquitetura é a elasticidade que a AWS oferece. Você configura a stack da sua aplicação e a cobrança pelo serviço de streaming é por hora.
WorkSpaces
O Amazon WorkSpaces é uma solução de Desktop-as-a-Service totalmente gerenciada e segura executada na AWS. É possível provisionar facilmente desktops virtuais do Microsoft Windows baseados em nuvem para os seus usuários, o que disponibiliza a eles acesso a documentos, aplicações e recursos necessários a qualquer instante.
RemoteDesktop
Com a tecnologia RemoteDesktop/RemoteApp é possível entregar aplicações através de sessões de Terminal Service do Windows ou simulando um acesso “nativo” pelo RemoteApp. Esta talvez seja a solução mais “simples” e rápida entregar seu software desktop na nuvem.
Go-Global
Go-Global é uma tecnologia da empresa GraphOn desenvolvida para possibilitar a entrega de aplicações Desktop pela Web ou através de um cliente, similar ao RemoteApp. A principal vantagem do Go-Global é o protocolo altamente otimizado para streaming, exigindo menos banda de internet do que o Remote Desktop. Como curiosidade, a TOTVS utiliza o Go-Global para entregar seu ERP client-server a partir da sua nuvem OpenStack. A arquitetura é muito similar ao RemoteDesktop/RemoteApp, com a vantagem de ser possível acessar as aplicações diretamente pelo navegador.
Planejar é preciso
A Amazon Web Services é, sem dúvida, uma excelente plataforma para hospedar seu ambiente com estabilidade e segurança. Ela possui serviços que facilitam a implementação de uma infraestrutura robusta, confiável e altamente redundante. Em poucos cliques você pode subir um banco de dados replicado em duas zonas de disponibilidade e com outros poucos cliques também pode configurar um load balancer com auto scaling.
Como vimos, todas essas ferramentas estão disponíveis. Porém, para uma migração bem-sucedida é preciso investir tempo em um minucioso planejamento da arquitetura, avaliando questões importantes, como segurança, alta disponibilidade, elasticidade, escolha adequada da região e otimização de custos.
* Henrique Bueno é CTO da Estabilis, empreendedor e especialista em cloud computing. Respira esse dinamismo frenético que é o mundo da tecnologia há quase duas décadas, navegando entre liderança e empreendedorismo, com foco em tecnologias emergentes. A Estabilis atua de forma consultiva para potencializar a inovação por meio de tecnologia ágil, criando estratégias e soluções personalizadas.