quinta-feira, 7 de agosto de 2014

Hospedando um Website estático na Amazon


Como muita gente já sabe, a Amazon oferece serviços de ótima qualidade na "nuvem", através de uma iniciativa chamada de Amazon Web Services (ou, simplesmente, Amazon AWS).

Dentre os serviços disponíveis, estão alguns que - quando combinados - permitem a hospedagem de websites de uma forma muito fácil e com um custo relativamente baixo (e escalável).

Hoje então vou falar um pouco de hospedagem de websites, mais precisamente os estáticos, utilizando essa infra-estrutura da Amazon. Mais precisamente, vou abordar os serviços abaixo:
Além disso, pro exemplo, vou utilizar um domínio registrado no registro.br e já mostrar como fazer as configurações por lá (mas sem utilizar seu serviço de DNS).

De maneira geral, os serviços da Amazon podem ser acessados pelo "console", através do endereço https://console.aws.amazon.com, sendo necessários um cadastro prévio (gratuito) e a posterior autenticação para acesso à área pessoal de gerenciamento de serviços.



Hospedando o site no Amazon S3

O Amazon S3 (Simple Storage Service), como o próprio nome já diz, é o serviço de storage da Amazon. Através desse serviço, podemos armazenar os arquivos dos nossos sites de forma muito simples (a própria Amazon utiliza essa serviço para hospedar seus sites globais).

O painel de controle do S3 pode ser acessado diretamente pela URL "https://console.aws.amazon.com/s3".

Para hospedar o site Let's Boxe! (um website estático, bem simples), foram criados dois "buckets": a) "letsboxe.com.br" (principal); e b) "www.letsboxe.com.br".




Vamos primeiro à criação e configuração do bucket principal (sem o "www").

1. No menu "Actions", clicar em "Create Bucket...".



2. Digitar o nome do bucket (nome do domínio) e a região física onde os arquivos serão armazenados - o que influencia na latência nos acessos.


3. Pode-se configurar o serviço de log dos acessos clicando em "Set Up Logging".


4. Após clicar em "Create", o conteúdo do bucket e suas propriedades serão exibidos.

*É claro que, no momento da criação, o conteúdo do bucket estará vazio (na imagem existe conteúdo por se tratar de um bucket previamente criado).

5. Na aba "Permissions", observar as permissões definidas para o usuário utilizado na Amazon AWS e, se for o caso, pro serviço de log.


6. Nessa mesma aba, clicar no botão "Add bucket policy" e adicionar a política acesso abaixo (trocando apenas o nome do bucket).


*Para facilitar, o texto abaixo pode ser copiado:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::letsboxe.com.br/*" } ] }

Obs.: Quando configuramos um bucket como um website, temos que configurar todos os objetos que queremos servir para serem publicamente legíveis. A política acima garante acesso para todos aos objetos presentes no diretório indicado (nesse caso, o diretório raiz do bucket). Claro que poderíamos melhorar essa regra, excluindo possíveis diretórios privados (sendo retornado um erro 403, "Access Denied", para qualquer arquivo solicitado que não tiver essa permissão de leitura atribuída).

*Para mais informações sobre políticas de segurança envolvendo os buckets, consulte a documentação: "Using Bucket Policies and User Policies".


7. Na aba "Static Website Hosting", selecionar a opção "Enable website hosting" e digitar o nome do arquivo de index e do arquivo de erro (ambos devem estar presentes na raiz no bucket) e clicar em "Save".



Vamos agora à criação e configuração do segundo bucket (com o "www").

1. Repita os passos de 1 a 4, utilizados na criação do bucket principal, colocando o "www." na frente do nome do bucket (nome do domínio).

2. Na aba "Static Website Hosting", selecionar a opção "Redirect all requests to another host name", digitar o nome do bucket principal no campo "Redirect all requests to" e Salvar.


Pronto, já estão configurados os dois buckets. Agora podemos fazer o upload dos arquivos do site para o bucket principal.


Carregando os arquivos do Website no bucket principal

Esse procedimento pode ser utilizado tanto para o primeiro carregamento dos arquivos, quanto para as futuras atualizações do site. Lembrando que os arquivos do website só serão carregados para o bucket principal (sem o "www"), sendo que o outro bucket (com o "www") só apontará pra ele.

1. Com o bucket selecionado, no menu "Actions", clicar em "Upload".


2. Na janela aberta, pode-se selecionar os arquivos para upload.


*Se clicar em "Add files", só será possível fazer upload de arquivos, ficando de fora os diretórios. A melhor maneira de selecionar todos os arquivos do website de uma vez é arrastando o conteúdo da pasta de deploy para a área em cinza "Drag and drop files and folders to upload here".

3. Selecionados os arquivos, pode-se fazer algumas configurações adicionais, como encriptação dos arquivos no servidor (clicando em "Set details"), ou, simplesmente, já clicar em "Start Upload".


4. Após o upload dos arquivos, para garantir o acesso público aos mesmos, pode-se selecioná-los e, no menu "Actions", clicar em "Make Public". 


Com isso, vai ser adicionada uma permissão de leitura para todos ("Everyone"), que pode ser conferida selecionando um dos arquivos e, na seção "Properties", abrindo a aba "Permissions".


5. Outra questão importante, para evitar cache de arquivos nos navegadores, é selecionar esses arquivos e, na seção "Properties", na aba "Metadata", definir um "max-age" (em segundos) pro "Cache-Control".



Bom, o próximo passo agora é configurar o servidor DNS, para apontar para os endpoints dos nossos buckets.


Configurando o Servidor DNS (Route 53)

O Route 53 é o serviço de Domain Name System (DNS) da Amazon. O interessante de se utilizar esse serviço de DNS (ao invés do serviço do registro.br, por exemplo) é que ele "casa" muito bem com outros serviços da Amazon, como o que acabamos de utilizar: o Amazon S3.

O painel de controle do Route 53 pode ser acessado diretamente pela URL "https://console.aws.amazon.com/route53".

1. No menu "Hosted Zones", clicar em "Create Hosted Zone" e preencher o campo "Domain Name" com o nome de domínio.



2. A hosted zone criada será listada na tabela e, clicando nela, serão apresentadas informações sobre a mesma.


Obs.: Para uma hosted zone recém criada, inicialmente só existirão 2 "Record Sets".

3. Clicar em "Go to Record Sets".



4. Os dois primeiros (tipos SOA e NS) já estarão criados e configurados. Deve-se então criar os outros dois (tipo A), um relativo ao bucket principal (sem o "www") e o outro ao segundo bucket (com o"www").

5. Para criar o Record Set do bucket principal, clicar em "Create Record Set" e preencher o formulário da seguinte forma: a) deixar o prefixo do campo "Name" em branco; b) manter o campo "Type" como "A - IPv4 address"; c) Marcar a opção "Alias" como "Yes"; d) clicar no campo "Alias Target" e selecionar o endpoint correspondente ao bucket criado no Amazon S3; e) Clicar em "Create".


6. Para criar o Record Set do segundo bucket, proceder da mesma forma que o primeiro, mas no item (a), preencher o prefixo do campo "Name" com "www.".



7. Ao final, devem ser observados os "Record Sets"apresentados na imagem do item 3.


Configurando o registro.br

Se você adquiriu seu domínio através do registro.br, como já estamos utilizando o serviço de DNS da própria Amazon, vamos precisar apenas fazer uma pequena configuração, informando os servidores "Master" e "Slave" da Amazon que iremos utilizar.


Esses valores podem ser obtidos dentre os 4 disponíveis no serviço Route 53, no Record Set do tipo "NS".

A dica aqui é fazer um "ping" nos 4 e utilizar o mais rápido como Master e o segundo mais rápido como Slave. Exemplo:

$ ping ns-1478.awsdns-56.org
PING ns-1478.awsdns-56.org (205.251.197.198): 56 data bytes
64 bytes from 205.251.197.198: icmp_seq=0 ttl=56 time=29.196 ms
64 bytes from 205.251.197.198: icmp_seq=1 ttl=56 time=29.974 ms
64 bytes from 205.251.197.198: icmp_seq=2 ttl=56 time=29.408 ms
64 bytes from 205.251.197.198: icmp_seq=3 ttl=56 time=30.176 ms

Pronto! Agora é só esperar (algumas horas) e observar a propagação do DNSwww.whatsmydns.net/#NS/letsboxe.com.br


E onde entra o Cloud Front então?

O Cloud Front é um serviço da Amazon para entrega de conteúdo na Web, que também poderia ser utilizado em conjunto com o Amazon S3, para disponibilização de websites.

De fato, o Cloud Front é um serviço de CDN (Content Delivery Network), replicando conteúdo em vários data-centers pelo mundo, sendo bastante indicado para casos de websites com maior número de arquivos de mídia (imagens, vídeos, etc) e/ou que tenham como requisito alta disponibilidade e performance.

Por outro lado, o custo de hospedagem ficaria um pouco mais alto; além do tempo de atualização de arquivos do site ser maior (pela necessidade de replicação em diferentes servidores).

O painel de controle do Cloud Front pode ser acessado diretamente pela URL "https://console.aws.amazon.com/cloudfront". Mas deixarei os detalhes de sua configuração para um post futuro.

No caso da configuração de DNS para um domínio no registro.br, ela ficaria algo assim:



Bom pessoal, com esse post tentei passar um pouco da experiência que tive para hospedar um site simples e estático na estrutura de cloud da Amazon. Como não sou especialista no assunto, sendo que o meu foco é mais a programação em si, pode ser que algum detalhe tenha ficado de fora. Além disso, procurei utilizar configurações mais básicas, para fins didáticos. De qualquer forma, fico aberto a sugestões de alterações!



quarta-feira, 12 de março de 2014

Panorama geral do mercado mobile

No dia 12 de Fevereiro foi apresentado mais um relatório do IDC que mostra o panorama do mercado mobile em cada trimestre: "Worldwide Quarterly Mobile Phone Tracker".

De acordo com o relatório, as plataformas Android e iOS continuam a dominar o mercado de smartphones globalmente, representando juntas 95.7% do mercado no último trimestre de 2013 (93.8%, considerando todo o ano).


O destaque total continua sendo o Android, que teve 78.6% do mercado em 2013 (sendo embarcado em quase 800 milhões de novos devices).


No contexto dos smartphones Android, a Samsung foi o destaque como fabricante, representando 39,5% desses aparelhos. Em segundo lugar ficou a Huawei, seguida de perto por outros fabricantes, como LG, Lenovo, Coolpad e Sony. Contudo, se considerarmos a compra da Motorola pela chinesa Lenovo, esse fabricante passará a ocupar o segundo lugar no ranking.

Com relação ao custo dos smartphones, no gráfico abaixo, pode-se notar que o preço médio dos aparelhos Android, que já estavam entre os mais acessíveis em 2010, caíram ainda mais - tendo o menor preço médio entre as principais plataformas.


Neste mesmo gráfico, pode-se observar que os aparelhos com Windows Phone também tiveram uma queda de preço. Além desse fato, com a incorporação da divisão de telefones da Nokia pela Microsoft e com o suporte de de outros fabricantes, a previsão do IDC é que essa plataforma tenha o maior crescimento do mercado até 2018.

Operating System2014 Shipment Volumes*2014 Market Share2018 Shipment Volumes*2018 Market Share2014-2018 CAGR
Android950.578.9%1,321.176.0%10.7%
iOS179.914.9%249.614.4%10.2%
Windows Phone47.03.9%121.87.0%29.5%
BlackBerry11.91.0%5.30.3%-22.6%
Others15.11.3%40.72.3%32.7%
Total1,204.4100.0%1,738.5100.0%11.5%
Fonte: IDC Worldwide Mobile Phone Tracker, February 12, 2014