SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
© 2019, Amazon Web Services, Inc. or its Affiliates.
Fernando Sapata
Principal Enterprise Solutions Architect
Abril de 2019
Melhores práticas e lições aprendidas
com aplicações sem servidor
© 2019, Amazon Web Services, Inc. or its Affiliates.
Agenda
• Entendendo o que é Serverless
• Ciclo de vida de funções Lambda
• Como monitorar aplicações utilizando X-Ray
• Como manter a sua lógica de negócio separada
Não é preciso gerenciar
servidores
Escale conforme o uso
Não pague pela ociosidade Altamente disponível
Serverless significa…
© 2019, Amazon Web Services, Inc. or its Affiliates.
Serviços
Alterações
nos dados
Chamadas para
endpoints
Alterações no
estado dos
recursos
Evento Função
Node.js
Python
Java
C#
Go
Aplicações serverless
Anatomia de uma função Lambda
Sua função
Runtime da
linguagem
Ambiente de
execução
Camada de
computação
Anatomia de uma função Lambda
Sua função
Runtime da
linguagem
Ambiente de
execução
Camada de
computação
Camadas que
podem impactar a
performance
Anatomia de uma função Lambda
Sua função
Runtime da
linguagem
Ambiente de
execução
Camada de
computação
Camadas que
podem impactar a
performance
O ciclo de vida da função Lambda
Inicializar a
runtime
Iniciar seu
código
Full
cold start
Partial
cold start
Warm
start
Baixar
seu código
Iniciar novo
contêiner
Otimização AWS Sua otimização
Integrando o AWS X-Ray com aplicações serverless
• O Lambda instrumenta as requisições
de entrada para todas as linguagens
suportadas
• O Lambda executa o serviço do
X-Ray em todas as linguagens
utilizando um SDK
var AWSXRay = require(‘aws-xray-sdk-core‘);
AWSXRay.middleware.setSamplingRules(‘sampling-rules.json’);
var AWS = AWSXRay.captureAWS(require(‘aws-sdk’));
S3Client = AWS.S3();
Usando o AWS X-Ray para visualizer o “Cold Start”
Ajuste o poder de computação da sua função
O Lambda permite controlar o total de memória alocada para a
função, sendo o % de CPU e capacidade de rede alocadas
proporcionalmente.
Alocação de recursos inteligente
Estatísticas de uma função Lambda que calcula 1000 vezes todos os
números primos <= 1000000
128 MB 11.722965sec $0.024628
256 MB 6.678945sec $0.028035
512 MB 3.194954sec $0.026830
1024 MB 1.465984sec $0.024638
Verde==Melhor Vermelho==Pior
Alocação de recursos inteligente
Estatísticas de uma função Lambda que calcula 1000 vezes todos os
números primos <= 1000000
128 MB 11.722965sec $0.024628
256 MB 6.678945sec $0.028035
512 MB 3.194954sec $0.026830
1024 MB 1.465984sec $0.024638
Verde==Melhor Vermelho==Pior
+$0.00001-10.256981sec
Multithreading? Talvez!
• <1.8GB = single core
• Funções orientadas a CPU não verão ganhos – os processos
compartilham os mesmos recursos
• >1.8GB = multi core
• Funções orientadas a CPU verão ganhos, porém precisam ser
multi thread.
O ciclo de vida da função Lambda com VPC
Baixar
seu código
Iniciar novo
contêiner
Iniciar seu
código
Criar
VPC ENI
Anexar
VPC ENI
Full
cold start
Warm
start
Inicializar a
runtime
Partial
cold start
Otimização AWS Sua otimização
Preciso de uma VPC ?
Minha função
Lambda deve
estar em uma
VPC
Minha função precisa
de acesso aos
recursos dentro da
VPC ?
Sua função também
precisa de acesso aos
recursos da Internet ?
Não coloque
sua função na
VPC
Coloque sua
função em uma
subnet privada
Coloque sua função
em uma subnet
que possua acesso
a Internet através
de um NAT
Gateway ou um
Internet Gateway
Yes Yes
No No
VPC x Resiliência
• SEMPRE configure no mínimo 2 Zonas de
Disponibilidade
• Crie subnets específicas para seus Lambdas
• Crie subnets com um grande range de IP
para seus Lambdas
• Se a sua função precisar acessar recursos
na Internet, configure um NAT Gateway!
Sabemos que ENIs são uma dor, já estamos trabalhando para melhorar 🤓
CloudWatch Events ”ping” hack
Normalmente desnecessário, mas se a
inicialização da função (cold start) tiver um
impacto sensível na sua função:
• Use os eventos agendados do CloudWatch
Events para invocar (“ping”) uma função do
Lambda por meio de uma chamada de API
• NÃO adicione um novo API Gateway
• Envie para a função um payload de teste
• Tenha uma função no seu código para tratar
o payload corretamente
Lambda
function
event
(time-based)
Amazon API
Gateway
Amazon
Kinesis
Normal
application
logic
“ping”
logic
Anatomia de uma função Lambda
Sua função
Runtime da
linguagem
Ambiente de
execução
Camada de
computação
Camadas que
podem impactar a
performance
Anatomia de uma função Lambda
Handler() da função
Função que será
executada na invocação
do Lambda
Objeto event
Dados enviados para o
Lambda no momento da
invocação
Object context
Métodos disponíveis
para interagir com
informações de tempo
de execução (request ID,
log group, etc.)
public String handleRequest(Book book, Context context) {
saveBook(book);
return book.getName() + " saved!";
}
Ambiente de execução efêmero
• O Lambda processa um evento por
contêiner
• LEMBRE-SE – os contêineres são
reutilizados
• Variáveis com escopo global devem
ser carregadas sob demanda (lazy
loading)
• Não carregue informações que você
não irá utilizar, pode impactar na
iniciação da função (cold start)
import boto3
client = None
def my_handler(event, context):
global client
if not client:
client = boto3.client("s3")
# process
© 2019, Amazon Web Services, Inc. or its Affiliates.
const aws = require('aws-sdk');
const gm = require('gm').subClass({imageMagick: true});
const path = require('path');
const s3 = new aws.S3();
const destBucket = process.env.DEST_BUCKET;
exports.handler = function main(event, context) {
...
for (let i = 0; i < event.Records.length; i++) {
tasks.push(conversionPromise(event.Records[i], destBucket));
}
Promise.all(tasks)
.then(() => { context.succeed(); })
.catch((err) => { context.fail(err); });
};
function conversionPromise(record, destBucket) {
...
}
function get(srcBucket, srcKey) {
...
}
function put(destBucket, destKey, data) {
...
Taken from: Sepai App in AWS Serverless Application Repository
https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-
1:233054207705:applications~sepia
© 2019, Amazon Web Services, Inc. or its Affiliates.
const aws = require('aws-sdk');
const gm = require('gm').subClass({imageMagick: true});
const path = require('path');
const s3 = new aws.S3();
const destBucket = process.env.DEST_BUCKET;
exports.handler = function main(event, context) {
...
for (let i = 0; i < event.Records.length; i++) {
tasks.push(conversionPromise(event.Records[i], destBucket));
}
Promise.all(tasks)
.then(() => { context.succeed(); })
.catch((err) => { context.fail(err); });
};
function conversionPromise(record, destBucket) {
...
}
function get(srcBucket, srcKey) {
...
}
function put(destBucket, destKey, data) {
...
Taken from: Sepai App in AWS Serverless Application Repository
https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-
1:233054207705:applications~sepia
Carregar dependências e inicializar as
conexões com o DB
A função Handler possui pouca lógica
Regras de negócio desacopladas
Boas práticas de uma função Lambda
• Separe o handler (entry point) da lógica do negócio
• Utilize funções para TRANSFORMAR, e não
TRANSPORTAR
• Separe as configurações da função utilizando;
• Per function – Variáveis de ambiente
• Entre funções – Amazon Parameter Store / Secrets Manager
• Leia somente o que for preciso
Não faça orquestrações no seu código
STARTJOB
JOB#XSTARTED
HTTPPOST
HTTPPOST
AREWETHEREYET?
NOPE!
WE’REDONE!
ZzZz
OR
time.sleep(10)
Não faça orquestrações no seu código – use o AWS Step
Functions!
+ Boas práticas!
• Evite funções “fat”/monolíticas
• Controle as dependências no seu pacote
de deploy
• Otimize a função para cada linguagem
• Node – Browserfy, Minify
Modelos de execução Lambda
Síncrona (push) Assíncrona (event)
Amazon
SNS
AWS Lambda
function
Amazon
S3
reqs
Poll-based
Amazon
DynamoDB
Amazon
Kinesis
changes
AWS Lambda
service
function
Amazon
API Gateway
AWS Lambda
function
/order
Controles de concorrência
• Limita a concorrência máxima de uma função
• É importante quando a função acessa recursos como o RDS
• “Kill switch” – seta a concorrência da função para 0
• Sempre configure o timeout da função corretamente
Como descubro o que há de errado ?
Estas ferramentas já estão disponíveis
1. Ative o X-Ray
1. Melhore a rastreabilidade com o SDK do X-Ray
2. Não subestime o poder de log do Lambda
1. Simples “debug: in functionX” declarações funcionam bem e são
fáceis de filtrar no CloudWatch Logs
3. As métricas mais importantes são as que tem relação
com o seu cliente ou o seu negócio
Lambda Dead Letter Queues
“Qualquer função do Lambda invocada de
forma assíncrona é repetida duas vezes antes que o evento
seja descartado.
Se as tentativas falharem e não souber o motivo, use Dead
Letter Queues (DLQ) para direcionar os eventos não
processados para uma fila do Amazon SQS ou para um tópico
do Amazon SNS para analisar a falha.” –
https://docs.aws.amazon.com/pt_br/lambda/latest/dg/dlq.html
☠️
✉️
Q
aws.amazon.com/serverless
© 2019, Amazon Web Services, Inc. or its Affiliates.© 2019, Amazon Web Services, Inc. or its Affiliates.
Obrigado!

Mais conteúdo relacionado

Mais procurados

DevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na práticaDevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na práticaAri Stopassola Junior
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.Amazon Web Services LATAM
 
Webinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWSWebinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWSAmazon Web Services LATAM
 
Webinar: Como explorar os recursos de aprendizagem da AWS
Webinar: Como explorar os recursos de aprendizagem da AWSWebinar: Como explorar os recursos de aprendizagem da AWS
Webinar: Como explorar os recursos de aprendizagem da AWSAmazon Web Services LATAM
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasAmazon Web Services LATAM
 
Melhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernasMelhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernasAmazon Web Services LATAM
 
Boas práticas de arquitetura e operações
Boas práticas de arquitetura e operaçõesBoas práticas de arquitetura e operações
Boas práticas de arquitetura e operaçõesAmazon Web Services LATAM
 
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAmazon Web Services LATAM
 
Liderando inovação no mundo enterprise na velocidade das startups
Liderando inovação no mundo enterprise na velocidade das startupsLiderando inovação no mundo enterprise na velocidade das startups
Liderando inovação no mundo enterprise na velocidade das startupsAmazon Web Services LATAM
 
Mergulhando em desenvolvimento de aplicações serverless
Mergulhando em desenvolvimento de aplicações serverlessMergulhando em desenvolvimento de aplicações serverless
Mergulhando em desenvolvimento de aplicações serverlessAmazon Web Services LATAM
 
Rodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvemRodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvemAmazon Web Services LATAM
 
Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012Ariovaldo Carmona
 

Mais procurados (19)

DevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na práticaDevOps: desenvolvedores e sysadmins cooperando na prática
DevOps: desenvolvedores e sysadmins cooperando na prática
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
ArcServe in the AWS Cloud - part II
ArcServe in the AWS Cloud - part IIArcServe in the AWS Cloud - part II
ArcServe in the AWS Cloud - part II
 
Fazendo seu DR na AWS
Fazendo seu DR na AWSFazendo seu DR na AWS
Fazendo seu DR na AWS
 
Abaas - Advanced Beer-as-a-Service
Abaas - Advanced Beer-as-a-ServiceAbaas - Advanced Beer-as-a-Service
Abaas - Advanced Beer-as-a-Service
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
 
Webinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWSWebinar: Introdução à Distribuição Contínua na AWS
Webinar: Introdução à Distribuição Contínua na AWS
 
JavaME
JavaMEJavaME
JavaME
 
Webinar: Como explorar os recursos de aprendizagem da AWS
Webinar: Como explorar os recursos de aprendizagem da AWSWebinar: Como explorar os recursos de aprendizagem da AWS
Webinar: Como explorar os recursos de aprendizagem da AWS
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
 
Melhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernasMelhores práticas de CI/CD na construção de aplicações modernas
Melhores práticas de CI/CD na construção de aplicações modernas
 
Boas práticas de arquitetura e operações
Boas práticas de arquitetura e operaçõesBoas práticas de arquitetura e operações
Boas práticas de arquitetura e operações
 
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
 
Webinar - Windows + VMware na nuvem AWS
Webinar - Windows + VMware na nuvem AWSWebinar - Windows + VMware na nuvem AWS
Webinar - Windows + VMware na nuvem AWS
 
Segurança de ponta a ponta na AWS
Segurança de ponta a ponta na AWSSegurança de ponta a ponta na AWS
Segurança de ponta a ponta na AWS
 
Liderando inovação no mundo enterprise na velocidade das startups
Liderando inovação no mundo enterprise na velocidade das startupsLiderando inovação no mundo enterprise na velocidade das startups
Liderando inovação no mundo enterprise na velocidade das startups
 
Mergulhando em desenvolvimento de aplicações serverless
Mergulhando em desenvolvimento de aplicações serverlessMergulhando em desenvolvimento de aplicações serverless
Mergulhando em desenvolvimento de aplicações serverless
 
Rodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvemRodando a BlackFriday do seu eCommerce na nuvem
Rodando a BlackFriday do seu eCommerce na nuvem
 
Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012Apresentação na PHP Conference Brasil 2012
Apresentação na PHP Conference Brasil 2012
 

Semelhante a Webinar Melhores práticas e lições aprendidas com aplicações sem servidor

Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaAmazon Web Services LATAM
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaAmazon Web Services LATAM
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaAmazon Web Services LATAM
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaAmazon Web Services LATAM
 
Começando com aplicações serverless na AWS
 Começando com aplicações serverless na AWS Começando com aplicações serverless na AWS
Começando com aplicações serverless na AWSAmazon Web Services LATAM
 
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016Filipe Barretto
 
Iniciando com AWS Lambda e serverless em cloud
Iniciando com AWS Lambda e serverless em cloudIniciando com AWS Lambda e serverless em cloud
Iniciando com AWS Lambda e serverless em cloudAmazon Web Services LATAM
 
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
Criando Aplicações Serverless -  ARC302 - Sao Paulo SummitCriando Aplicações Serverless -  ARC302 - Sao Paulo Summit
Criando Aplicações Serverless - ARC302 - Sao Paulo SummitAmazon Web Services
 
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Amazon Web Services LATAM
 
Twelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
Twelve-Factor serverless applications - MAD302 - São Paulo AWS SummitTwelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
Twelve-Factor serverless applications - MAD302 - São Paulo AWS SummitAmazon Web Services
 
Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhõe...
Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhõe...Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhõe...
Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhõe...Amazon Web Services LATAM
 
Chalice - Grupy-ABC 12/2018
Chalice - Grupy-ABC 12/2018Chalice - Grupy-ABC 12/2018
Chalice - Grupy-ABC 12/2018Erick Muller
 
Cloud & AWS: Da teoria à prática
Cloud & AWS: Da teoria à práticaCloud & AWS: Da teoria à prática
Cloud & AWS: Da teoria à práticaRicardo Martins ☁
 
Serverless Framework - Creating serverless applications
Serverless Framework - Creating serverless applicationsServerless Framework - Creating serverless applications
Serverless Framework - Creating serverless applicationsWallison Marra
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Tiago Marchetti Dolphine
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!Mario Guedes
 

Semelhante a Webinar Melhores práticas e lições aprendidas com aplicações sem servidor (20)

Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Construindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS LambdaConstruindo APIs com Amazon API Gateway e AWS Lambda
Construindo APIs com Amazon API Gateway e AWS Lambda
 
Começando com aplicações serverless na AWS
 Começando com aplicações serverless na AWS Começando com aplicações serverless na AWS
Começando com aplicações serverless na AWS
 
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
 
Iniciando com AWS Lambda e serverless em cloud
Iniciando com AWS Lambda e serverless em cloudIniciando com AWS Lambda e serverless em cloud
Iniciando com AWS Lambda e serverless em cloud
 
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
Criando Aplicações Serverless -  ARC302 - Sao Paulo SummitCriando Aplicações Serverless -  ARC302 - Sao Paulo Summit
Criando Aplicações Serverless - ARC302 - Sao Paulo Summit
 
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
Deep dive em aceleração de entrega de conteúdo, APIs e Aplicações utilizando ...
 
Twelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
Twelve-Factor serverless applications - MAD302 - São Paulo AWS SummitTwelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
Twelve-Factor serverless applications - MAD302 - São Paulo AWS Summit
 
Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhõe...
Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhõe...Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhõe...
Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhõe...
 
Chalice - Grupy-ABC 12/2018
Chalice - Grupy-ABC 12/2018Chalice - Grupy-ABC 12/2018
Chalice - Grupy-ABC 12/2018
 
Cloud & AWS: Da teoria à prática
Cloud & AWS: Da teoria à práticaCloud & AWS: Da teoria à prática
Cloud & AWS: Da teoria à prática
 
AWS
AWS AWS
AWS
 
Serverless Framework - Creating serverless applications
Serverless Framework - Creating serverless applicationsServerless Framework - Creating serverless applications
Serverless Framework - Creating serverless applications
 
Introduction to Cloud Computing
Introduction to Cloud ComputingIntroduction to Cloud Computing
Introduction to Cloud Computing
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 
Escalando sua aplicação Web com Beanstalk
Escalando sua aplicação Web com BeanstalkEscalando sua aplicação Web com Beanstalk
Escalando sua aplicação Web com Beanstalk
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 

Mais de Amazon Web Services LATAM

AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAmazon Web Services LATAM
 
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAmazon Web Services LATAM
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.Amazon Web Services LATAM
 
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAmazon Web Services LATAM
 
Automatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAutomatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAmazon Web Services LATAM
 
Ransomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWSRansomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWSAmazon Web Services LATAM
 
Ransomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWSRansomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWSAmazon Web Services LATAM
 
Aprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWSAprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWSAmazon Web Services LATAM
 
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWSAprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWSAmazon Web Services LATAM
 
Cómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administradosCómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administradosAmazon Web Services LATAM
 
Os benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWSOs benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWSAmazon Web Services LATAM
 
Los beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWSLos beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWSAmazon Web Services LATAM
 

Mais de Amazon Web Services LATAM (20)

AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
 
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e BackupAWS para terceiro setor - Sessão 2 - Armazenamento e Backup
AWS para terceiro setor - Sessão 2 - Armazenamento e Backup
 
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
AWS para terceiro setor - Sessão 3 - Protegendo seus dados.
 
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvemAWS para terceiro setor - Sessão 1 - Introdução à nuvem
AWS para terceiro setor - Sessão 1 - Introdução à nuvem
 
Automatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWSAutomatice el proceso de entrega con CI/CD en AWS
Automatice el proceso de entrega con CI/CD en AWS
 
Cómo empezar con Amazon EKS
Cómo empezar con Amazon EKSCómo empezar con Amazon EKS
Cómo empezar con Amazon EKS
 
Ransomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWSRansomware: como recuperar os seus dados na nuvem AWS
Ransomware: como recuperar os seus dados na nuvem AWS
 
Ransomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWSRansomware: cómo recuperar sus datos en la nube de AWS
Ransomware: cómo recuperar sus datos en la nube de AWS
 
Ransomware: Estratégias de Mitigação
Ransomware: Estratégias de MitigaçãoRansomware: Estratégias de Mitigação
Ransomware: Estratégias de Mitigação
 
Ransomware: Estratégias de Mitigación
Ransomware: Estratégias de MitigaciónRansomware: Estratégias de Mitigación
Ransomware: Estratégias de Mitigación
 
Aprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWSAprenda a migrar y transferir datos al usar la nube de AWS
Aprenda a migrar y transferir datos al usar la nube de AWS
 
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWSAprenda como migrar e transferir dados ao utilizar a nuvem da AWS
Aprenda como migrar e transferir dados ao utilizar a nuvem da AWS
 
Cómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administradosCómo mover a un almacenamiento de archivos administrados
Cómo mover a un almacenamiento de archivos administrados
 
Simplifique su BI con AWS
Simplifique su BI con AWSSimplifique su BI con AWS
Simplifique su BI con AWS
 
Simplifique o seu BI com a AWS
Simplifique o seu BI com a AWSSimplifique o seu BI com a AWS
Simplifique o seu BI com a AWS
 
Os benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWSOs benefícios de migrar seus workloads de Big Data para a AWS
Os benefícios de migrar seus workloads de Big Data para a AWS
 
Los beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWSLos beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWS
 
Bases de datos NoSQL en AWS
Bases de datos NoSQL en AWSBases de datos NoSQL en AWS
Bases de datos NoSQL en AWS
 
Bancos de dados NoSQL na AWS
Bancos de dados NoSQL na AWSBancos de dados NoSQL na AWS
Bancos de dados NoSQL na AWS
 
Construyendo un data lake en la nube aws
Construyendo un data lake en la nube awsConstruyendo un data lake en la nube aws
Construyendo un data lake en la nube aws
 

Webinar Melhores práticas e lições aprendidas com aplicações sem servidor

  • 1. © 2019, Amazon Web Services, Inc. or its Affiliates. Fernando Sapata Principal Enterprise Solutions Architect Abril de 2019 Melhores práticas e lições aprendidas com aplicações sem servidor
  • 2. © 2019, Amazon Web Services, Inc. or its Affiliates. Agenda • Entendendo o que é Serverless • Ciclo de vida de funções Lambda • Como monitorar aplicações utilizando X-Ray • Como manter a sua lógica de negócio separada
  • 3. Não é preciso gerenciar servidores Escale conforme o uso Não pague pela ociosidade Altamente disponível Serverless significa…
  • 4. © 2019, Amazon Web Services, Inc. or its Affiliates. Serviços Alterações nos dados Chamadas para endpoints Alterações no estado dos recursos Evento Função Node.js Python Java C# Go Aplicações serverless
  • 5. Anatomia de uma função Lambda Sua função Runtime da linguagem Ambiente de execução Camada de computação
  • 6. Anatomia de uma função Lambda Sua função Runtime da linguagem Ambiente de execução Camada de computação Camadas que podem impactar a performance
  • 7. Anatomia de uma função Lambda Sua função Runtime da linguagem Ambiente de execução Camada de computação Camadas que podem impactar a performance
  • 8. O ciclo de vida da função Lambda Inicializar a runtime Iniciar seu código Full cold start Partial cold start Warm start Baixar seu código Iniciar novo contêiner Otimização AWS Sua otimização
  • 9. Integrando o AWS X-Ray com aplicações serverless • O Lambda instrumenta as requisições de entrada para todas as linguagens suportadas • O Lambda executa o serviço do X-Ray em todas as linguagens utilizando um SDK var AWSXRay = require(‘aws-xray-sdk-core‘); AWSXRay.middleware.setSamplingRules(‘sampling-rules.json’); var AWS = AWSXRay.captureAWS(require(‘aws-sdk’)); S3Client = AWS.S3();
  • 10. Usando o AWS X-Ray para visualizer o “Cold Start”
  • 11. Ajuste o poder de computação da sua função O Lambda permite controlar o total de memória alocada para a função, sendo o % de CPU e capacidade de rede alocadas proporcionalmente.
  • 12. Alocação de recursos inteligente Estatísticas de uma função Lambda que calcula 1000 vezes todos os números primos <= 1000000 128 MB 11.722965sec $0.024628 256 MB 6.678945sec $0.028035 512 MB 3.194954sec $0.026830 1024 MB 1.465984sec $0.024638 Verde==Melhor Vermelho==Pior
  • 13. Alocação de recursos inteligente Estatísticas de uma função Lambda que calcula 1000 vezes todos os números primos <= 1000000 128 MB 11.722965sec $0.024628 256 MB 6.678945sec $0.028035 512 MB 3.194954sec $0.026830 1024 MB 1.465984sec $0.024638 Verde==Melhor Vermelho==Pior +$0.00001-10.256981sec
  • 14. Multithreading? Talvez! • <1.8GB = single core • Funções orientadas a CPU não verão ganhos – os processos compartilham os mesmos recursos • >1.8GB = multi core • Funções orientadas a CPU verão ganhos, porém precisam ser multi thread.
  • 15. O ciclo de vida da função Lambda com VPC Baixar seu código Iniciar novo contêiner Iniciar seu código Criar VPC ENI Anexar VPC ENI Full cold start Warm start Inicializar a runtime Partial cold start Otimização AWS Sua otimização
  • 16. Preciso de uma VPC ? Minha função Lambda deve estar em uma VPC Minha função precisa de acesso aos recursos dentro da VPC ? Sua função também precisa de acesso aos recursos da Internet ? Não coloque sua função na VPC Coloque sua função em uma subnet privada Coloque sua função em uma subnet que possua acesso a Internet através de um NAT Gateway ou um Internet Gateway Yes Yes No No
  • 17. VPC x Resiliência • SEMPRE configure no mínimo 2 Zonas de Disponibilidade • Crie subnets específicas para seus Lambdas • Crie subnets com um grande range de IP para seus Lambdas • Se a sua função precisar acessar recursos na Internet, configure um NAT Gateway! Sabemos que ENIs são uma dor, já estamos trabalhando para melhorar 🤓
  • 18. CloudWatch Events ”ping” hack Normalmente desnecessário, mas se a inicialização da função (cold start) tiver um impacto sensível na sua função: • Use os eventos agendados do CloudWatch Events para invocar (“ping”) uma função do Lambda por meio de uma chamada de API • NÃO adicione um novo API Gateway • Envie para a função um payload de teste • Tenha uma função no seu código para tratar o payload corretamente Lambda function event (time-based) Amazon API Gateway Amazon Kinesis Normal application logic “ping” logic
  • 19. Anatomia de uma função Lambda Sua função Runtime da linguagem Ambiente de execução Camada de computação Camadas que podem impactar a performance
  • 20. Anatomia de uma função Lambda Handler() da função Função que será executada na invocação do Lambda Objeto event Dados enviados para o Lambda no momento da invocação Object context Métodos disponíveis para interagir com informações de tempo de execução (request ID, log group, etc.) public String handleRequest(Book book, Context context) { saveBook(book); return book.getName() + " saved!"; }
  • 21. Ambiente de execução efêmero • O Lambda processa um evento por contêiner • LEMBRE-SE – os contêineres são reutilizados • Variáveis com escopo global devem ser carregadas sob demanda (lazy loading) • Não carregue informações que você não irá utilizar, pode impactar na iniciação da função (cold start) import boto3 client = None def my_handler(event, context): global client if not client: client = boto3.client("s3") # process
  • 22. © 2019, Amazon Web Services, Inc. or its Affiliates. const aws = require('aws-sdk'); const gm = require('gm').subClass({imageMagick: true}); const path = require('path'); const s3 = new aws.S3(); const destBucket = process.env.DEST_BUCKET; exports.handler = function main(event, context) { ... for (let i = 0; i < event.Records.length; i++) { tasks.push(conversionPromise(event.Records[i], destBucket)); } Promise.all(tasks) .then(() => { context.succeed(); }) .catch((err) => { context.fail(err); }); }; function conversionPromise(record, destBucket) { ... } function get(srcBucket, srcKey) { ... } function put(destBucket, destKey, data) { ... Taken from: Sepai App in AWS Serverless Application Repository https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east- 1:233054207705:applications~sepia
  • 23. © 2019, Amazon Web Services, Inc. or its Affiliates. const aws = require('aws-sdk'); const gm = require('gm').subClass({imageMagick: true}); const path = require('path'); const s3 = new aws.S3(); const destBucket = process.env.DEST_BUCKET; exports.handler = function main(event, context) { ... for (let i = 0; i < event.Records.length; i++) { tasks.push(conversionPromise(event.Records[i], destBucket)); } Promise.all(tasks) .then(() => { context.succeed(); }) .catch((err) => { context.fail(err); }); }; function conversionPromise(record, destBucket) { ... } function get(srcBucket, srcKey) { ... } function put(destBucket, destKey, data) { ... Taken from: Sepai App in AWS Serverless Application Repository https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east- 1:233054207705:applications~sepia Carregar dependências e inicializar as conexões com o DB A função Handler possui pouca lógica Regras de negócio desacopladas
  • 24. Boas práticas de uma função Lambda • Separe o handler (entry point) da lógica do negócio • Utilize funções para TRANSFORMAR, e não TRANSPORTAR • Separe as configurações da função utilizando; • Per function – Variáveis de ambiente • Entre funções – Amazon Parameter Store / Secrets Manager • Leia somente o que for preciso
  • 25. Não faça orquestrações no seu código STARTJOB JOB#XSTARTED HTTPPOST HTTPPOST AREWETHEREYET? NOPE! WE’REDONE! ZzZz OR time.sleep(10)
  • 26. Não faça orquestrações no seu código – use o AWS Step Functions!
  • 27. + Boas práticas! • Evite funções “fat”/monolíticas • Controle as dependências no seu pacote de deploy • Otimize a função para cada linguagem • Node – Browserfy, Minify
  • 28. Modelos de execução Lambda Síncrona (push) Assíncrona (event) Amazon SNS AWS Lambda function Amazon S3 reqs Poll-based Amazon DynamoDB Amazon Kinesis changes AWS Lambda service function Amazon API Gateway AWS Lambda function /order
  • 29. Controles de concorrência • Limita a concorrência máxima de uma função • É importante quando a função acessa recursos como o RDS • “Kill switch” – seta a concorrência da função para 0 • Sempre configure o timeout da função corretamente
  • 30. Como descubro o que há de errado ? Estas ferramentas já estão disponíveis 1. Ative o X-Ray 1. Melhore a rastreabilidade com o SDK do X-Ray 2. Não subestime o poder de log do Lambda 1. Simples “debug: in functionX” declarações funcionam bem e são fáceis de filtrar no CloudWatch Logs 3. As métricas mais importantes são as que tem relação com o seu cliente ou o seu negócio
  • 31. Lambda Dead Letter Queues “Qualquer função do Lambda invocada de forma assíncrona é repetida duas vezes antes que o evento seja descartado. Se as tentativas falharem e não souber o motivo, use Dead Letter Queues (DLQ) para direcionar os eventos não processados para uma fila do Amazon SQS ou para um tópico do Amazon SNS para analisar a falha.” – https://docs.aws.amazon.com/pt_br/lambda/latest/dg/dlq.html ☠️ ✉️ Q
  • 32.
  • 34. © 2019, Amazon Web Services, Inc. or its Affiliates.© 2019, Amazon Web Services, Inc. or its Affiliates. Obrigado!