Amazon

O que é AWS S3?

O AWS S3 (Simple Storage Service) é um serviço de armazenamento de arquivos, também chamados de objetos ou blobs, com foco em escalabilidade, disponibilidade, segurança e performance, tudo isso com um custo extremamente acessível.

O AWS S3 é um serviço distribuído globalmente dentro da sua conta da AWS, com uma organização em buckets regionais. Isso quer dizer que, diferente das EC2, VPC, e RDS, ao acessar o S3 pelo console da AWS, teremos uma visão global do nosso ambiente, ao invés de uma visão de uma única região.

Como comentado anteriormente, o AWS S3 se destaca pelo seu custo extremamente acessível. Você só paga pelo armazenamento e transferência de saída dos seus arquivos, com um custo aproximado de cinco centavos para cada gigabyte armazenado, o que é muito mais barato se comparado com o custo de disco EBS de uma EC2 tradicional.

Amazon Web Services (AWS) - Fundamentos
Curso de Amazon Web Services (AWS) - Fundamentos
CONHEÇA O CURSO

Quando usar o S3?

O S3 é um serviço de armazenamento bastante flexível, que suporta diversos casos de uso, como por exemplo:

  • Armazenamento de arquivos para aplicações web: como arquivos CSS e JavaScript do frontend da sua aplicação, e imagens enviadas pelos seus usuários via upload.

  • Arquivos de backups e logs: você pode armazenar arquivos privados, como logs de alguma aplicação, ou até mesmo backups de longo prazo do seu banco de dados, usados para fins legais.

  • Archive para um grande volume de dados: é possível armazenar muita coisa no S3. É possível armazenar objetos com até 5 terabytes e um bucket suporta um número ilimitado de objetos. Para grandes volumes de dados você pode utilizar o S3 Glacier e economizar ainda mais o custo de armazenamento.

  • Replicação de dados entre diferentes regiões: para aplicações distribuídas globalmente, você pode replicar buckets inteiros em diferentes regiões da AWS com um Batch Operation.

  • Hospedagem de sites estáticos: se você tem uma aplicação web que consiste só em arquivos estáticos, ou uma Single Page Applications (SPA), você pode utilizar somente o S3 para hospedar essa aplicação em completo.

Amazon Web Services (AWS) - Elastic Beanstalk - Fundamentos
Curso de Amazon Web Services (AWS) - Elastic Beanstalk - Fundamentos
CONHEÇA O CURSO

O que o S3 não faz

Embora seja um serviço flexível, o S3 não é indicado para todos os casos de uso. Existem serviços mais apropriados dentro da própria AWS para alguns cenários.

Com o S3 não temos uma hierarquia de arquivos. Isso é a principal diferença ao comparar o S3 com nosso disco local. Imagine que no S3 todos os arquivos são salvos em um único diretório. Não é possível distinguir se os seus arquivos estavam armazenados numa determinada pasta ou não.

Visualmente você até acha que existe uma organização por pastas, mas na verdade o que você está vendo é um separador lógico no nome do seu arquivo. Se a sua aplicação depende de operações em diretórios, como listar ou mover diretórios inteiros, o S3 pode não ser a melhor alternativa.

Você também não tem suporte direto ao Hadoop ou HDFS. Essas são soluções muito utilizadas em Big Data e você não consegue fazer a ingestão de dados do S3 para um cluster Hadoop com HDFS. Para isso você pode utilizar o Amazon EMR, um serviço especializado para data lakes com suporte a HDFS e hierarquia de diretórios. Uma curiosidade, o EMR utiliza o S3 por debaixo dos panos, entregando uma camada de compatibilidade com HDFS, mantendo um preço bem acessível.

Com o S3 você também não pode montar um bucket como um disco numa EC2 ou utilizá-lo como um compartilhamento de arquivos de rede. Para usar o S3 você pode utilizar APIs REST, o AWS CLI, ou até mesmo as SDKs disponíveis para diversas linguagens. Para esses casos de uso, prefira outros serviços, como o EBS para montagem de discos, ou o EFS para o compartilhamento de arquivos em rede.

Amazon Web Services (AWS) - EC2 - Fundamentos
Curso de Amazon Web Services (AWS) - EC2 - Fundamentos
CONHEÇA O CURSO

Conclusão

Essa foi uma breve introdução sobre o AWS S3. Vimos aqui algumas vantagens e quando utilizar esse serviço que é um dos principais da AWS. Nas próximas semanas será lançado o curso AWS S3 Fundamentos que irá abordar com muito mais detalhes esse serviço. Fiquem ligados e nos sigam nas nossas redes sociais, como Twitter, Instagram, Facebook e LinkedIn, para saber quando esse curso for lançado em primeira mão!

Como se preparar para falhas em alguma região da AWS

Na terça-feira de carnaval, vários sites e aplicativos móveis que utilizam a AWS (Amazon Web Services) enfrentaram uma brusca interrupção na disponibilidade do serviço. A Web ficou, por algumas horas, “quebrada”. Para você ter ideia da dimensão do problema, foram afetados, de alguma forma, Trello, Quora, Wix, Giphy, Slack, Dropbox, Instagram, Vine e até mesmo o Github. Rumores eram de que toda a AWS estava offline mas, na verdade, os problemas afetaram apenas os servidores da região us-east-1 (N. Virginia), que é apenas uma das 14 regiões que a AWS possui.

Flask - Fundamentos
Curso de Flask - Fundamentos
CONHEÇA O CURSO

Segundo a própria Amazon a raiz do problema aconteceu no S3, o serviço de storage da empresa, um dos mais antigos e que serve como base para uma série de outros serviços da AWS, como o Elastic Block Store de volumes do EC2 que utiliza persistentemente os servidores do S3.

Por não afetar a zona sa-east-1 (localizada em São Paulo), a mais utilizada por serviços do Brasil e também devido a maioria dos desenvolvedores estarem pulando carnaval (ou não) o problema acabou não sendo tão divulgado.

Aqui no TreinaWeb, a nossa arquitetura está toda na AWS, especificamente na região de São Paulo (sa-east-1), a ideia é ter o mínimo de latência (apesar dessa ser uma das regiões mais caras de toda a AWS, você sabe, impostos praticados no Brasil e tudo mais). Da nossa parte, não tivemos nenhum problema. No entanto, o nosso gateway de pagamento usava alguns serviços daquela região americana e tivemos alguns contra-tempos limitados ao checkout. Mas, os alunos não deixaram de acessar os cursos e usufruir dos serviços do site.

O histórico, da identificação até a resolução do problema:

1) 11:49 AM PST We can confirm increased query failure rates when running queries and executing DDL statements in the in US-EAST-1 Region.

2) 1:59 PM PST We are starting to see recovery when running SQL queries in the US-EAST-1 region. We continue to see elevated error rates when executing DDL statements in the US-EAST-1 region.

3) 2:12 PM PST We continue to see recovery when running SQL queries in the US-EAST-1 region. We are also starting to see recovery when executing DDL statements in the US-EAST-1 region.

4) 3:25 PM PST We are able to execute SQL queries normally in the US-EAST-1 region. We continue to see increasing recovery when executing DDL statements in the US-EAST-1 Region.

5) 3:44 PM PST Between 9:37 AM and 3:23 PM PST we experienced increased error rates when running SQL queries and executing DDL statements in the US-EAST-1 Region. The issue has been resolved and the service is operating normally.

Por fim:

“The issue has been resolved and the service is operating normally.”

alt

Por mais que tudo tenha sido restabelecido, a Amazon apenas mitigou o problema. E isso não é nenhum demérito. Ela focou os esforços em fazer as coisas voltarem a funcionar. O que não falta é expertise para que, nos próximos dias, eles resolvam, de fato, os verdadeiros problemas estruturais/lógicos que lhes acometeram.

Esse tipo problema, especialmente na AWS, não é regra, é exceção. Mas, como nada está imune, o que podemos fazer para evitar que nossos aplicativos fiquem fora do ar em casos como esse? Abaixo duas válidas opções.

Active-Active ou Active-Passive usando Route53

O termo Active-Active não é especifico da AWS, na verdade ele está relacionado a alta disponibilidade. Basicamente, significa que o trafego é direcionado para um nó que está online ou balanceado entre outros que permanecem ativos, quando uma falha é identificada. Para usar essa solução é necessário uma cópia ativa da sua infraestrutura em outra região. O problema é que para a maioria das aplicações de pequeno porte isso é inviável, devido ao alto preço de ter a aplicação “espelhada” em mais de uma região.

A solução Active-Passive é parecida, porém um pouco mais em conta. Nela as instâncias redundantes só são colocadas completamente online caso o nó primário falhe. A desvantagem está no tempo extra após a queda do nó primário até as instâncias redundantes estarem prontas.

A AWS possui uma ferramenta chamada Route53 que ajuda a direcionar o tráfego automaticamente em caso de falha. Ela possui duas funções adicionais, uma chamada Health Check e outra chamada Traffic Polices. A primeira verifica se está tudo funcionando e a segunda permite definir o que fazer caso encontre algum problema. Essas duas configurações permitem implementar as estratégias acima descritas.

Replicação entre regiões

Caso você não queira usar as opções Active-Active ou Active-Passive, pode-se utilizar apenas a opção replicação entre regiões, nela todos os objetos e metadados como ACLs e tags são armazenados automaticamente em uma outra região escolhida na hora da ativação da opção. Isso pode ser suficiente caso aconteça algum problema no armazenamento da região principal.

C# (C Sharp) - TDD
Curso de C# (C Sharp) - TDD
CONHEÇA O CURSO

Concluindo

Apesar da AWS ser um dos serviços mais confiáveis do mercado, sempre que tratamos de softwares que precisam da alta disponibilidade é necessário pensar em alternativas que mitiguem bruscas interrupções, para evitar a perda de dinheiro, sem contar a credibilidade da sua empresa.

Caso queira saber como implementar os recursos acima citados, veja nesse excelente artigo So AWS Went Down. Here’s How You Can be Prepared If It Happens Again

Fontes complementares: theverge e datacenterdynamics

Laravel - Desenvolvimento de APIs REST
Curso de Laravel - Desenvolvimento de APIs REST
CONHEÇA O CURSO