Por que eu devo ler este artigo:Este artigo tem como objetivo apresentar os principais serviços de cloud computing oferecidos pela Amazon, e ilustrar casos onde seu uso pode ser útil em um projeto de infraestrutura.

A Amazon é o principal player de cloud computing do mercado e, portanto é fundamental para todos os interessados no assunto conhecer sua oferta de serviços.

A maioria dos leitores provavelmente já ouviu falar na Amazon. O negócio que começou com a venda de livros em 1994, hoje é considerado a maior loja online do mundo, com mais de 100 mil funcionários e faturamento de mais de 60 bilhões de dólares em 2012.

Para um negócio desse porte funcionar, foi preciso a criação de uma infraestrutura de TI colossal, com literalmente milhares de servidores distribuídos em vários datacenters pelo mundo.

Com essa quantidade de servidores, só existem duas alternativas para uma administração eficiente: contratar um exército de técnicos, ou automatizar o quanto for possível.

A Amazon escolheu o segundo caminho, e após muito trabalho de pesquisa e desenvolvimento, onde foram criadas soluções para diversos problemas comuns de infraestrutura, eles perceberam que poderia ser um negócio interessante a venda de recursos computacionais utilizando a própria infraestrutura.

Até aí, não parece diferente do que os provedores tradicionais faziam com serviços de hospedagem, por exemplo. A grande diferença é que na Amazon, só se paga pelo uso do serviço, ou seja, se você possui um site que tem picos de acesso em determinadas épocas, você pode provisionar recursos adicionais por um período, e simplesmente deixar de usá-los quando não forem mais necessários.

Isso é uma grande mudança de paradigma: hoje, quando falamos do modelo tradicional, onde a empresa é dona de um parque de servidores dentro do datacenter, quando houver a necessidade de aumento de capacidade, provavelmente será necessário investir em equipamentos, seja servidor, storage ou rede.

Aí começam os problemas: a empresa pode ter determinados equipamentos que foram descontinuados e que agora possuem um custo de expansão maior do que o custo de equipamentos novos.Ao comprar novos equipamentos,é preciso decidir se vale a pena manter os antigos em uso, ao lado dos novos, ou se é melhor migrar tudo para os novos equipamentos, o que envolve projetos de migração complexos.

A virtualização ajuda a minimizar muitos desses problemas, mas ainda está sujeita a alguns, como por exemplo, o caso do pico sazonal. Quando há a necessidade de se suportar uma demanda alta e inesperada com uma infraestrutura interna, provavelmente será necessário ter uma infraestrutura dimensionada “por cima”, ou seja, com uma grande capacidade de processamento, que será utilizada poucas vezes por ano.

O Amazon Web Services (daqui para frente, chamado apenas de AWS), fornece uma alternativa interessante para esses problemas.É como se tivéssemos à nossa disposição uma infraestrutura “infinita”, em que podemos alocar recursos quando necessário, de forma rápida e relativamente barata.

Para alguns tipos de empresa, como bancos, existem questões quanto à segurança e interoperabilidade dos serviços em nuvem que com o tempo precisam ser esclarecidas. Por exemplo, no Brasil existem leis que proíbem o armazenamento de dados fora do país.

No entanto, com o modelo de operação atual oferecido pelos provedores de cloud computing, não é possível garantir que dados de empresas brasileiras não serão replicados para servidores em outros países. Para empresas cujo negócio está baseado na web, a aderência é muito mais óbvia. O maior exemplo disso foi a migração da Netflix, um dos maiores provedores de conteúdo ondemand do mundo, para o AWS em 2011.

O AWS oferece diversos serviços, desde a infraestrutura até bancos de dados e enfileiramento de mensagens. Veremos neste artigo os principais serviços relacionados à infraestrutura (IaaS – Infrastructure as a Service), e em alguns casosprocuraremos mostrar casos de uso de cada tecnologia.

Regiões e zonas de disponibilidade

O AWS está distribuído em datacenters presentes em várias localidades no mundo. Esses datacenters são chamados pela Amazon de regiões. Para aprimorar a disponibilidade, dentro de cada região existem ao menos duas zonas de disponibilidade, que são infraestruturas completamente independentes com links de baixa latência entre elas para garantir uma comunicação eficiente.

Atualmente as regiões da Amazon são as seguintes, com as respectivas quantidades de zonas de disponibilidade:

· US East: Virginia (três zonas de disponibilidade);

· US West: Oregon (três zonas de disponibilidade);

· US West: Califórnia (duas zonas de disponibilidade);

· São Paulo (duas zonas de disponibilidade);

· Europa: Irlanda (três zonas de disponibilidade);

· Ásia e Pacífico: Tóquio (três zonas de disponibilidade);

· Ásia e Pacífico: Cingapura (duas zonas de disponibilidade);

· Ásia e Pacífico: Sydney (duas zonas de disponibilidade).

Como um diferencial, muitos serviços possuem replicação de dados transparente entre zonas de disponibilidade, para garantir a contingência em caso de falhas. Além deste recurso, a replicação de dados entre regiões também é possível, mas deve ser implementada caso a caso.

Assim, ao desenharmos uma arquitetura para funcionar sobre o AWS, devemos levar em conta as regiões e zonas de disponibilidade para garantir a contingência da aplicação, evitando que falhas no AWS causem impacto para a aplicação.

Diante desse cenário, já ocorreram grandes falhas em regiões isoladas do AWS que causaram indisponibilidade para grandes clientes como Sony e Netflix. Estatisticamente, ao considerarmos a infraestrutura apresentada, a probabilidade de todas as zonas de disponibilidade de uma região falharem ao mesmo tempo é muito pequena, e a probabilidade de todas as regiões falharem é menor ainda.

Se desenharmos nossa arquitetura com isso em mente, o que teremos é uma infraestrutura com um nível de resiliência altíssimo, ao custo de alguns milhares de dólares, e que custaria muito mais se implementada de forma tradicional, com servidores instalados on-premises.

Sendo assim, é preciso analisar cada caso de forma independente, mas de modo geral, o custo das soluções no AWS é bastante atrativo.

Simple Storage Service – S3

O S3 foi o primeiro serviço do AWS, tendo sido lançado em 2006. Ele fornece um sistema de armazenamento online bastante simples, onde os arquivos são acessados via HTTP, web services (REST ou SOAP) ou protocolo BitTorrent. No S3, o armazenamento é feito em buckets (containers de arquivos), e cada bucket possui uma série de funcionalidades, que listamos a seguir:

· Permissions: Cada bucket possui um controle individual de permissões (leitura, upload e remoção de arquivos, visualização e edição de permissões) que podem ser concedidas a todos ou apenas a usuários autenticados no AWS;

· Static Web Hosting: É possível publicar um web site estático utilizando o S3. Basta habilitar a opção e indicar qual o documento “index” do web site, que o S3 passa a servir este conteúdo;

· Logging: Pode ser habilitado o log de acesso aos seus objetos no S3, para efeito de estatísticas e auditoria;

· Lifecycle: Define regras de expiração e arquivamento de objetos dentro do bucket. É possível configurar políticas baseadas em data para remover os objetos do S3, ou ainda movê-los para o Glacier, que é o serviço de arquivamento, que veremos mais adiante;

· Requester Pays: É um modelo onde o custo de transferência de dados é cobrado do usuário que está solicitando o objeto. Nesse modelo, o acesso público e anônimo ao bucket é desabilitado;

· Versioning: Este recurso permite o versionamento de objetos dentro de um bucket. É útil para arquivos cujo histórico de alterações precisa ser guardado.

O S3 tipicamente é utilizado para hospedagem de arquivos que serão acessados diretamente pela web, como imagens e páginas web estáticas, mas pode ser utilizado também como repositório de arquivos de backup de instâncias e imagens do EC2.

Elastic Compute Cloud – EC2

O EC2 é o serviço de virtualização de servidores do AWS, onde é possível criar servidores virtuais (chamados de instâncias, na terminologia da Amazon) com diversas opções de tamanho e sistema operacional.

A Amazon classifica o tamanhodas instâncias oferecidas através da métrica chamada de ECU – Elastic Compute Unit. Uma ECU equivale à capacidade de um processador Xeon ou Opteron de 1.0 GHz de 2007. Conforme os servidores físicos da Amazon são atualizados e passam a utilizar processadores de maior capacidade, a oferta das instâncias muda e o número de ECUs de um determinado tipo de instância muda também. Nesse ponto vale destacar que a informação de tamanho de um tipo de instância é descrita pelo número total de ECUs.

A seguir podemos ver os principais tipos de instância disponíveis no AWS equal a indicação de uso para cada um deles:

· M1 e M3 - Instâncias de uso geral: Tipo de instância genérica, que possui uma distribuição dos recursos equilibrada entre CPU, memória e I/O;

· C1, CC2 e C3 – Otimizadas para CPU: Tipo de instância indicada para aplicações que possuem grande demanda de CPU, como servidores de encoding de vídeo;

· G2 e CG1 – Instâncias com GPU: Tipo de instância que permite o acesso a recursos da placa gráfica para processamento, o que é muito utilizado em aplicações científicas que necessitam de alto desempenho;

· M2 e CR1 – Otimizadas para Memória: Tipo de instância que possui grandes quantidades de memória, o que é ideal para servidores de banco de dados e de cache;

· HI1 e HS1 – Otimizadas para Storage: Tipo de instância que é otimizada para aplicações que possuem demanda por grandes volumes de I/O. Também possui grande capacidade de processamento e memória, o que a torna indicada para uso em servidores de banco de dados de alto volume;

· T1 –Instâncias Micro: Tipo de instância mínima, ideal para testes e sites com pouco acesso.

Na Tabela 1 podemos ver a relação entre os tipos de instância e os tamanhos oferecidos.

Tipo de Instância

Tamanho

vCPU

ECU

Memória (GB)

Uso Geral

m3.xlarge

4

13

15

Uso Geral

m3.2xlarge

8

26

30

Uso Geral

m1.small

11

1

1.7

Uso Geral

m1.medium

1

2

3.75

Uso Geral

m1.large

2

4

7.5

Uso Geral

m1.xlarge

4

8

15

Otimizadas para CPU

c3.large

2

7

3.75

Otimizadas para CPU

c3.xlarge

4

14

7

Otimizadas para CPU

c3.2xlarge

8

28

15

Otimizadas para CPU

c3.4xlarge

16

55

30

Otimizadas para CPU

c3.8xlarge

32

108

60

Otimizadas para CPU

c1.medium

2

5

1.7

Otimizadas para CPU

c1.xlarge

8

20

7

Otimizadas para CPU

cc2.8xlarge

32

88

60.5

Instâncias com GPU

g2.2xlarge

8

26

15

Instâncias com GPU

cg1.4xlarge

16

33.5

22.5

Otimizadas para Memória

m2.xlarge

2

6.5

17.1

Otimizadas para Memória

m2.2xlarge

4

13

34.2

Otimizadas para Memória

m2.4xlarge

8

26

68.4

Otimizadas para Memória

cr1.8xlarge

32

88

244

Otimizadas para Storage

hi1.4xlarge

16

35

60.5

Otimizadas para Storage

hs1.8xlarge

16

35

117

Instâncias Micro

t1.micro

1

Até 2

0.615

Tabela 1. Tamanhos das instâncias disponíveis no EC2.

Vejamos os principais recursos oferecidos pelo EC2:

· Instances: É onde criamos as máquinas virtuais, chamadas de instâncias na terminologia do EC2. Na seção Links, mais precisamente no endereço relacionado a“Amazon EC2 Instance Details”, podemos ver todos os tipos de instância disponíveis e as suas diferentes configurações;

· AMIs: AMI significa Amazon Machine Image.São imagens de sistema operacional prontas para serem executadas, com software pré-instalado. É possível escolher dentre centenas de imagens existentes (por exemplo, com Linux, Apache e MySQL instalados), ou começar com uma imagem de sistema operacional básica, instalar o software desejado e criar a sua própria AMI para uso futuro;

· Security Groups:São as “regras de firewall” que controlam o acesso às suas instâncias do EC2. Através do security group é possível controlar de forma granular o acesso a endereços IP e portas, externos ou internos;

· Elastic IPs:São endereços IP públicos que podem ser atribuídos a qualquer instância EC2;

· Load Balancers:É possível criar balanceadores de carga para distribuir os acessos entre os seus servidores web, por exemplo. Os balanceadores de carga ainda possuem a funcionalidade de detectar servidores que não estão respondendo, e colocá-los fora de serviço, de modo a não causarem problemas na sua aplicação;

· Auto Scaling Groups:Para compreender esse recurso, imaginemos o seguinte cenário: nosso site de e-commerce possui enormes picos de tráfego em datas comemorativas, como dia das mães, dos pais, Natal, etc., mas durante o resto do ano o tráfego é razoavelmente estável.

Em uma infraestrutura tradicional, o ambiente seria dimensionado pelo pico, ou seja, para suportar a maior quantidade possível de acessos prevista. Isso faz com que paguemos o ano inteiro por uma infraestrutura que só é utilizada algumas vezes por ano.O auto scaling serve para racionalizar o uso da infraestrutura.

Ele monitora o consumo de recursos dos seus servidores, e baseado em políticas, pode adicionar ou remover servidores do grupo para atender a demanda.

Ou seja, no caso de um pico de tráfego, o auto scaling pode aumentar a capacidade de 2 para 10 servidores, e quando o pico passar, eliminar os servidores adicionais e deixar somente os dois que existiam antes. Dessa forma, somente pagamos pelo utilizado;

· Volumes e Snapshots: Dentro do EC2 existe um produto chamado EBS – Elastic Block Storage, que implementa funcionalidades de storage para instâncias EC2. Nele podemos criar discos, chamados de volumes, e snapshots desses volumes, com o objetivo de extrair uma cópia dos dados.

Os volumes podem ter até 1 TB de tamanho, e podem ser do tipo Standard, ou do tipo Provisioned IOPS, onde se paga um pouco mais caro para garantir um throughput previsível. Um volume EBS é replicado dentro de uma mesma Zona de Disponibilidade para garantir a contingência quanto a falhas de hardware.

Com todos os recursos citados, é possível implementar soluções completas de infraestrutura de servidor na nuvem, tanto para uso em aplicações públicas, como sites de e-commerce, como para aplicações internas e privadas. Com os vários tamanhos de instância disponíveis, é possível hospedar serviços diversos como e-mail, banco de dados, servidores web, entre outros.

Além disso, existem casos de empresas que utilizam o AWS para a criação de supercomputadores, empregando tecnologias de clustering sobre centenas de instâncias EC2. Essa é uma estratégia que proporcionou grande economia para estas empresas, que tradicionalmente investiam milhões de dólares na construção de supercomputadores.

Virtual Private Cloud – VPC

VPC é o serviço que possibilita a configuração de uma rede privada no AWS. Dentro de uma rede privada é possível ter todos os recursos do EC2, como instâncias e balanceadores, bem como montar sub-redes separadas, com endereços IP privados, e rotear entre elas.

É um serviço bastante útil para manter organizado o ambiente em nuvem quando a solução começa a depender de vários componentes, como servidores de aplicação, banco de dados, balanceadores de carga, etc.

Além disso, a rede privada é interessante do ponto de vista da segurança, porque com uma VPC as nossas instâncias EC2 não precisam de endereço IP público para serem acessadas.

É possível ainda criar uma VPN entre sua empresa e uma VPC no AWS para ter o seu ambiente na nuvem pública, mas com acesso totalmente isolado.A seguir podemos ver as principais configurações oferecidas pelo serviço de VPC:

· VPCs:Uma VPC simplesmente define o bloco de endereçamento IP contíguoque será utilizado no seu ambiente, como 10.0.0.0/16. Para ser utilizado por instâncias EC2, por exemplo, esse bloco deve ser dividido em subnets, que devem possuir um endereçamento que faça parte do bloco definido na VPC. Além disso, quando desejamos ter ambientes totalmente isolados e com uma política de acesso diferenciada, podemos criar mais de uma VPC;

· Subnets:Uma subnet é uma partição do bloco de endereçamento IP configurado na VPC. Dentro de uma VPC deve existir ao menos uma subnet, para que componentes do AWS, como instâncias EC2, possam se conectar. No entanto, podem ser criadas quantas subnets forem suportadas pelo bloco de endereçamento IP;

· Route Tables:É possível configurar rotas estáticas entre as subnets, para habilitar a comunicação entre instâncias que estão em subnets diferentes;

· VPN Connections: É possível configurar conexões VPN do seu escritório ou datacenter para uma VPC no AWS. Para isso é utilizado um Customer Gateway, que representa o gateway VPN do lado do datacenter, e um Virtual Private Gateway, que representa o gateway VPN do lado do AWS.

Glacier

O Glacier é o serviço de storage off-line do AWS. É um serviço de baixíssimo custo (1 centavo de dólar por GB) direcionado para o armazenamento de grandes volumes de dados e que são muito pouco acessados, como soluções de backup histórico e backup off-site. Os dados copiados para o Glacier são automaticamente replicados dentro da infraestrutura do AWS, com o objetivo de garantir máxima durabilidade.

O baixo custo de armazenamento tem uma contrapartida de custo no acesso aos dados. Deste modo, se o cliente acessar em um mês mais do que 5% da média histórica do volume armazenado mensalmente, essa transferência é cobrada. É a forma utilizada pela Amazon para garantir que o acesso seja infrequente. Se precisamos de acesso frequente, o S3 e o EBSsão produtos mais apropriados.

Relational Database Services – RDS

O RDS é o serviço de banco de dados relacional do AWS. Através dele podemos criar instâncias de banco de dados MySQL, Microsoft SQL Server, Oracle ou PostgreSQL. O RDS cria servidores virtuais com o DBMS desejado de acordo com os parâmetros especificados pelo usuário. Para bancos de dados que necessitam de alto desempenho de I/O, é possível utilizar a opção de Provisioned IOPS, que garante uma quantidade de IOPS (operações de I/O por segundo) mínima e previsível.

Uma opção que o RDS oferece é a possibilidade de criarmos instâncias de contingência, utilizando a feature Multi-AZ, que indica que a instância será replicada automaticamente para outra instância que está em uma zona de disponibilidade diferente, e o AWS fará o failover para esta instância caso uma falha seja detectada. Essa funcionalidade está disponível para todos os DBMSs, exceto para o MS SQL Server. No caso do MySQL, podem ser criadas réplicas somente para leitura, que são úteis no caso de aplicações web de alto tráfego.

A seguir são apresentadas as principais funcionalidades do RDS:

· Instances:Uma instância RDS representa um único bancode dados de um DBMS particular. Um banco de dados no RDS funciona da mesma forma que um banco de dados instalado em um servidor local, com a diferença que não temos acesso ao console do servidor onde o banco de dados está hospedado;

· Snapshots:Snapshots são como “fotografias” do seu banco de dados em um determinado momento no tempo. São úteis como estratégia de backup e para congelar uma versão do banco de dados antes de uma mudança em produção, por exemplo;

· Parameter Groups:Com Parameter Groups é possíveldefinirvalorescustomizados para os parâmetros de cada DBMS, que podem ser aplicados a todas as instâncias que forem criadas. É um excelente recurso para garantir a padronização na configuração de instâncias;

· Option Groups:Option Groups fornecem um mecanismo de controle de funcionalidades adicionais e particulares de cada DBMS. Por exemplo, para o MySQL é possível habilitar a funcionalidade de memcache, para o Oracle é possível habilitar a funcionalidade do Statspack, entre outras.

Custos

Todos os produtos do AWS possuem políticas de preço bastante detalhadas e com farta documentação no site. É importante estudar a forma de cobrança de cada produtoantes da contratação para evitar sustos na hora da conta. É muito comum provisionarmos mais recursos do que precisamos porque todos os serviços estão a um clique de distância, de forma muito simples. Outro ponto importante é que existem duas formas de contratação para a maioria dos recursos: on-demand e reservado.

No caso do EC2, por exemplo, instâncias on-demand são aquelas que nós criamos e removemos a qualquer momento. Nesse caso pagamos um valor por hora, pelo total de horas em que a instância esteve ligada.

No caso de demandas de prazo mais longo, a Amazon oferece descontos bastante atrativos para clientes que querem se comprometer a manter um contrato por períodos de 1 ou 3 anos.

Deste modo, ao pagarmos um valor por instância no momento do contrato, o valor pago por hora cai para menos da metade do valor de instâncias on-demand, em alguns casos.

A recomendação geral é que, da mesma forma que não se deve investir em hardware ou datacenter sem planejamento, não se deve fazê-lo com recursos na nuvem. O planejamento antecipado pode maximizar enormemente a economia que pode ser conseguida ao se optar por contratar infraestrutura na nuvem.

Neste artigo foram apresentados os principais serviços de cloud computing fornecidos pela Amazon e foram mostrados alguns casos de uso. Além desses, existem vários outros serviços, mais focados em aplicação, que omitimos aqui por questões de brevidade.

Sendo assim, sugerimos que o leitor visite o site do AWS e explore os produtos, para entender em profundidade do que a plataforma é capaz. Além do site, vale mencionar que todos os manuais dos produtos do AWS estão disponíveis na loja do Kindle (leitor de livros digitais da Amazon) sem custo. A documentação é bastante completa e certamente ajudará a esclarecer os detalhes de cada produto.

Para os que gostam de programar, vale mencionar que existem bibliotecas para as linguagens de programação mais populares, como Java, C# e Python, por exemplo, que permitem a automação de todos os aspectos de todos os produtos do AWS. Esse é um recurso extremamente interessante, que possibilita a construção de ferramentas de gerenciamento e automação bastante poderosas, e que facilitam a vida no dia-a-dia.

Apesar de o artigo ser totalmente baseado no AWS, que por ter sido o pioneiro, ainda é a referência no mercado quando se fala de nuvem pública, vale mencionar que existem outras ofertas no mercado, sendo o Windows Azure, da Microsoft, e o Compute Engine, da Google, as mais conhecidas.

Com base no que falamos, é importante conhecê-los para poder avaliar qual é oserviço mais adequado para cada situação, e o mais importante, para que comparemos os valores e vejamos qual oferece o melhor custo benefício. Com a tendência da popularização do uso da nuvem pública, espera-se que a concorrência se torne cada vez mais acirrada, e com isso podemos esperar uma oferta de serviços de qualidade cada vez melhor e com menor custo.

Links

Site do Amazon Web Services.
http://aws.amazon.com

Site de preços do EC2.
http://aws.amazon.com/ec2/pricing/

Site com os detalhes dos tipos de instância do EC2.
http://aws.amazon.com/ec2/instance-types/instance-details/

Site de preços do S3.
http://aws.amazon.com/s3/pricing/

Site de preços do RDS.
http://aws.amazon.com/rds/pricing/

Site de preços do Glacier.
http://aws.amazon.com/glacier/pricing/

Site com exemplos de uso do AWS em substituição a supercomputadores.
http://aws.amazon.com/hpc-applications/

Case de migração para AWS da Netflix.
http://www.slideshare.net/adrianco/migrating-netflix-from-oracle-to-global-cassandra

Site do Windows Azure.
http://www.windowsazure.com/pt-br/

Site do Google Compute Engine.
https://cloud.google.com/products/compute-engine/