© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Rubens Devito Filho, Arquiteto de Soluções
Agenda
• 30/03 -
Escalando sua aplicação para os primeiros 10 milhões de usuários• 25/04 -
Criação de Clusters HPC como código• 27/04 -
Conhecendo as opções de Bancos de Dados na Nuvem da AWS• 25/05 -
Introdução a arquitetura serverless© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Rubens Devito Filho, Arquiteto de Soluções
Agenda
Background
AWS Lambda
Amazon API Gateway
Amazon S3
Amazon Cognito
Padrões de Arquitetura Serverless
Demo (Frontend, backend, autenticação)
Melhores Práticas para Serverless
Background
Como arquiteturas serverless usando AWS Lambda são a próxima evolução da construção de aplicações
Arquitetura Orientada a Serviço (SOA)
Camda de Apresentação Camada Lógica
Ferramentas para te auxiliar são MUITAS
Servidores web
Code libraries
Web service/application frameworks
Ferramentas de gerenc. de config.
Plataformas de gereciamento de APIs
Padrões de Deployment
Padrões de CI/CD
Containers
AWS Também Tem Ajudado!
Amazon EC2
Auto Scaling
Elastic Load Balancing
Amazon EC2 auto recovery
AWS Trusted Advisor
AWS Elastic Beanstalk
AWS OpsWorks
Amazon ECS
Etc. Etc. Etc.
Mas….
muitas dessas ferramentas são
ainda acopladas a uma
Servidores (AAHHHHHHHHH!!)
Qual tamanho de servidores
são o melhor para o meu budget?
Quantos usuários conectados
meu servidor aguenta? Quanto de capacidade ainda
meus servidores têm? Como posso detectar se um servidor está comprometido?
Quantos servidores
tenho que calcular para o
orçamento?
Qual SO meus servidores irão usar?
Quais usuários deverão ter
acesso aos servidores?
Como posso controlar o acesso aos servidores?
Como consigo manter a
atualização de OS?
Como fazer deploy nos servidores?
Como aumentar a utilização dos servidores?
Quando devo escalar os servidores?
Qual tamanho de servidor é o melhor para performance?
Devo tunar o SO
para otimizar minha aplicação? Quais pacotes devem ser
incluídos na imagem do servidor?
Como devo lhe dar com
mudanças de configuração?
Como a aplicação lida com falhas de hardware do servidor?
Arquitete para ser Serverless
Totalmente gerenciado
• Sem provisionamento • Zero administração • Altamente disponívelProdutividade do desenvolvedor
• Foco no que importa: código • Inove rapidamente
• Reduza o time to market
Escale continuamente
• Automaticamente
O Manifesto Serverless
• Funções são a unidade de deploy e escala.
• Sem máquinas, VMs, ou containers visíveis no modelo de programação.
• Armazenamento permanente está em outro lugar.
• Escale por requisição. Usuários não conseguem sub/super provisionar a capacidade.
• Nunca pague pelo ocioso (nenhum servidor/container ”cold”).
• Tolerância a falhas implícita pois funções podem rodar em qualquer lugar.
• BYOC - Bring your own code.
Serverless, serviço computacional baseado em evento
Componentes do Lambda
• Uma função Lambda (escrita por você)
• Um evento de origem (Event Source)
• O serviço AWS Lambda
Função Lambda
• Seu código
(Java, NodeJS, Python, C#)
• O IAM role que o código
assume durante a
execução
• A quantidade de memória
alocada para o seu código
(afeta CPU e rede também)
Uma função Lambda válida e completa
Eventos de Origem (Evento Source)
• Quando uma função
Lambda deve executar?
• Vários serviços da AWS
podem ser um event
source:
• Amazon S3 • Amazon Kinesis • Amazon SNS • Amazon DynamoDB • Amazon CloudWatch • AWS Config Rules • Amazon Echo• Etc.
• …e Amazon API Gateway (mais sobre isso daqui a pouco)
AWS Lambda
• Executa seu código da função sem você gerenciar ou
escalar servidores.
• Provê uma API para engatilhar uma execução para sua
função.
• Garante a execução da sua função quando acionada,
em paralelo, independente da escala.
Ambiente de rede da função
Default – um ambiente de rede
padrão dentro da VPC é provido à você
• Acesso à internet é sempre permitido para sua função
• Não acessa a recursos da VPC que ela roda
Customer VPC – Sua função executa dentro do contexto da VPC em que ela foi configurada.
• Comunicação privada com outros recursos da VPC.
• Configuração e comportamento bem familiar:
– Subnets
– Elastic network interfaces (ENIs) – EC2 security groups
– VPC route tables – NAT gateway
Várias Maneiras Atuais de Abstratir Servidores
SaaS
PaaS
MBaaS
*aaS
Application Engines/Platforms
O Que tem de Único no Lambda?
Abstração é no nível do código/função
O modelo de segurança (IAM, VPC)
O modelo de preço
A comunidade
Integração com o ecossistema da AWS!
• Escala • Aciona
Exemplo de Arquitetura
Serverless
PlayOn! Sports – Video Stream Processing
Laptop Encoders HLS S3 Playback VOD Stream mobile client CloudFront Streaming Live stream mobile client CloudFront S3 Ingest 480p Transcode HQ Copy 360p Transcode Audio-only Transcode Thumbnail QOS Analytics Cascading Lambda Functions“Mas…
para usar Lambda, eu realmente
preciso arquitetar aplicações que são
baseadas em eventos?” – você (talvez)
Um Serviço Totalmente Gerenciado Para Suas APIs
Criar Configurar Publicar
Amazon Simple Storage Service (S3)
Armazenamento de objetos durável e escalável
• Arquitetado para 99.999999999% de durabilidade
e 99.99% de disponibilidade
• Armazene trilhões de objetos e suporte milhões de
requisições por segundo
• Armazenamento infinito sem provisionamento de
capacidade
Amazon S3
S3 é uma solução de baixo custo e altamente
disponível para um website estático – totalmente
serverless
• Entregue de maneira confiável seu website estático e
suporte picos inesperados sem se preocupar com a
infraestrutura e escalabilidade
• Integra com Amazon CloudFront para entrega de
conteúdo na borda, ao redor do mundo
Amazon Cognito
Adicione sign-up e sign-in de usuários, além de sincronização de dados entre seus dispositivos
Adicione sign-up and sign-in de usuários para seus apps mobile ou web
Federe identidades e proveja acesso seguro aos
recursos da AWS
Armazene e sincronize dados entre dispositivos
Melhores Práticas para
Serverless
Melhores Práticas de AWS Lambda
1. Limite o tamanho da sua
função – especualmente para Java (inicalizar JVM demora um pouco).
2. Node – execução é assíncrona.
3. Não assuma reuso do container – mas leve
vantagem caso isso ocorra.
4. Não se esqueça do disco (500 MB /tmp para cada function).
5. Use function aliases. 6. Use the included logger
(include details from service-provided context).
7. Crie custom metrics
(centradas na sua operaçã ou negócio).
Melhores Práticas de Amazon API Gateway
4. Use request/response mapping templates
everywhere within reason, not passthrough.
5. Take ownership of HTTP response codes.
6. Use Swagger import/export for cross-account sharing. 1. Use mock integrations
2. Combine com Amazon
Cognito para um controle de acesso dos usuários
gerenciado.
3. Use stage variables (inject API config values into
Lambda functions for logging, behavior).
Melhores Práticas Serverless
1. Use convenções de nome que façam sentido (nome de funções Lambdas, IAM roles, nomes de API, nomes do
stage, etc.).
2. Use versionamento
3. Externalize autorização para IAM roles sempre que
possível.
4. Menor privilégio and separe IAM roles.
5. Externalize a configuração – DynamoDB é ótimo para isso. 6. Contate o Suporte da AWS
antes eventos em larga escala já sabidos.
7. Esteja atento aos throttlings de serviço, engaje com o Suporte da AWS.
Várias Opções Serverless na AWS
Armazenamento Rede Banco de Dados
Computação Segurança Mensageria e Filas Entrega de Conteúdo
Gateways
Gerenciamento de Usuários Monitoramento e Logging
Internet of Things
Machine Learning
© 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved.