AWS Serverless - Lambda Flashcards
Cite exemplos de serviços Serverless na AWS
AWS Lambda, DynamoDB, AWS Cognito, AWS API Gateway, Amazon S3, AWS SNS & SQS, AWS Kinesis Data Firehose, Aurora Serverless, Step Functions, Fargate
Por que utilizar Lambda?
Lambdas são funções virtuais, o que torna possível não ser necessário gerenciar servidores. São funções de execução curtas (máximo de 15 minutos), que executam on-demand. A escalabilidade é automática
Quais os benefícios de utilizar Lambda Functions?
Pagamento por requisição e tempo de computação.
Integrada com todos os serviços da AWS.
É possível utilizar várias linguagens de programação.
Fácil de monitorar através do CloudWatch.
Fácil de obter mais recursos por função.
Quais linguagens são suportadas no Lambda?
Node.js, Python, Java, C#, Golang, Ruby, Custom Runtime API, Lambda Container Image,
Para executar imagens arbitrarias, é preferível utilizar ECS / Fargate
Para que serve Lambda@Edge?
Serve para alterar as requisições entre o cliente e a origem.
Pode ser modificada o request entre o User e o CloudFront ou entre o CloudFront e Origin.
A response também pode ser modificada entre a Origin e o CloudFront e entre o CloudFront e o User.
Cite 4 casos de uso para Lambda@Edge
A/B testing, Intelligently Route Across Origins and Data Centers, Real-time Image Transformation, User Tracking and Analytics, User Authentication and Authorization
Como é feito o processamento assíncrono de funções Lambdas?
É gerado um evento (S3, SNS, CloudWatch), inserido em uma Event Queue. A função lambda lê o evento da event Queue e tenta realizar o processamento. Em caso de falha, será realizado 3 novas tentativas.
Também é possível criar uma DLQ para processamentos que falharam.
Como funciona o Lambda Event Source Mapping?
Neste caso de utilização de lambda, em vez de lambda ser sensibilizada por outros recursos (evento do S3 ou CloudWatch) a Lambda que é responsável por obter os eventos de uma determinada origem.
Essas origens podem ser Kinesis Data Streams, SQS ou DynamoDb Streams
Como é feito a paralelização do Lambda Event Source Mapping (Kinesis e DynamoDb)?
Como o processamento é feito de forma a garantir a ordem as mensagens, o processamento é paralelizado a partir da Partition Key.
Dado isso, é possível ter mais de um lambda realizando o processamento em um mesmo shard, pois a ordenação é feita pelo Partition Key da mensagem.
Como é feito a tratativa de erro para stream no Event Source Mapping (kinesis)?
Por default, caso alguma lambda retorne um erro, todo o batch será reprocessado até a função ter sucesso ou o batch expirar.
Isso é feito para garantir a ordem no processamento do Batch
Para que serve Lambda - Destinations?
Serve para enviar os resultados do processamento da lambda. É possível utilizar Lambda - Destination no lugar da DLQ ou utilizar ambas ao mesmo tempo.
AWS recomenda utilizar Lambda - Destination no lugar de DLQ
Quais são os Lambda - Destinations para Asynchronous invocations?
Amazon SQS, Amazon SNS, AWS Lambda, Amazon EventBridge bus.
Quais são os Lambda - Destinations para Event Source mapping?
Amazon SQS e Amazon SNS
Como dar permissão para outras contas utilizarem seus recursos lambdas?
Utilizando resource-based policies.
O que são lambda Environment Variables?
São variáveis de ambiente chave / valor, possibilitando ajustar a função lambda sem atualizar o código. Também pode ser utilizado para guardar segredos (criptografados por KMS)
Qual VPC é realizado o deploy das funções lambdas? É possível permitir acesso a lamba a sua VPC?
É realizado em uma AWS-owned VPC, ou seja, fora da VPC da sua conta.
Isso quer dizer que a lambda pode acessar a internet pública, dynamoDB porém não pode acessar os recursos internos das VPCs da sua conta.
É possível permitir acesso a lamba a sua VPC?
Sim, é necessário definir o VPC ID, a subnet e o security group. Dado isso, a lambda irá criar um ENI (Elastic Network Interface) na sua subnet.Para isso é necessário a role AWSLambdaVPCAccessExecutionRole.
Uma função lambda na sua VPC tem acesso a internet?
Não, é necessário realizar o deploy da função em uma private subnet e dar acesso a internet através de um NAT Gateway (que está em uma public subnet).
Como uma função lambda pode ter seus recursos escalados?
A única forma de escalabilidade de uma função lambda é aumentando sua memória RAM. Quando a memória RAM é aumentada, também aumenta a quantida de vCPUs da função.
Caso sua aplicação precise de mais poder de processamento, é necessário aumentar a RAM para consequentemente aumentar a quantidade de vCPUs.
Qual o timeout de uma função lambda?
O default é 3 segundos, podendo chegar a 15 minutos (900 segundos).
O que é Lambda Execution Context?
É um ambiente de execução temporário que inicializa qualquer dependência externa da sua função lambda.
Por exemplo, se for necessário realizar uma conexão com um database, é uma boa prática inicia-la neste contexto uma única vez, e as todas as execuções usufruírem deste contexto.
Caso precise baixar arquivos na execução lambda, onde posso salva-los?
É possível salvar arquivos no /tmp space, que é um espaço temporário para execuções lambdas de até 512 MB.
Para objetos persistentes utilizar S3.
Posso escalar até quantas execuções concorrentes de lambda?
É possível escalar até 1000 execuções paralelas.
Caso seja necessário aumentar, é possível abrir um ticket para AWS.
É importante lembrar que este limite é para toda conta. Então se uma aplicação escalar 1000 funções lambdas, as outras aplicações que também utilização lambda irão falhar (THROTTLE).
O que acontece se uma função lambda assíncrona tenta executar em um momento de alta concorrência?
Ela pode não conseguir executar por já estar no limite de execuções paralelas. Neste caso a função lambda tentará executar novamente mais tarde em um momento em que não tenha tanta concorrência (exponential backoff).
O que é cold starts em funções lambda?
É quando uma função lambda demora para iniciar por ter que carregar dependências como código, SDK,… podendo aumentar a latência nas execuções lambda.
Como carregar as dependências de uma função lambda?
É necessário carregar as dependências junto com a função. Ou seja, pacotes do node.js ou python é necessário instalar os pacotes junto com o código e criar um zip com tudo.
Usar pip –target options
Como realizar o deploy de lambda function utilizando CloudFormation?
É possível definir o código inline, porém serve apenas para códigos simples, pois não é possível colocar dependências dessa forma.
Outra alternativa é inserir a aplicação com suas dependências zipadas no S3 e referenciar o código no S#3 no CloudFormation
Como permitir a Lambda e CloudFormation através do S3 em várias contas?
Inserir o código lambda em um bucket S3. Criar um Bucket Policy permitindo as outras contas (AccountID).
Criar uma execution role permitindo get and list to S3 bucket.
O que são lambda layers?
É uma forma de empacotar as dependências da função lambda de forma a não ser necessário realizar o upload das dependências que não são alteradas com frequência todas as vezes que o código precisar ser atualizado.
Posso utilizar container para rodar minhas funções lambdas? Se sim, como posso fazer isso?
Sim, é possível. Para isso é necessário utilizar a imagem fornecida pela AWS com LambdaRuntimeAPI implementada.
Caso não queira utilizar estas imagens da AWS, você pode construir seu próprio container, porém ainda assim será necessário ter o LambdaRuntimeApi implementado.
O que são lambda versions?
É como podemos versionar lambdas, assim como fazemos com códigos. Dessa forma, a lambda por vesão é imutável, possibilitando a utilização de uma versão estável. Utilizar o $LATEST traz o risco de a última versão carregar algum bug ou alteração inesperada sempre que sai uma nova versão.
Como posso disponibilizar versões de lambda para outras contas?
É possível utilizar AWS Lambda Aliases, que são ponteiros para versões de funções lambda. Porém, diferente a versão, que é imutável, o aliases pode apontar para diferentes imagens. Então você pode referenciar sua aplicação para utilizar a lambda “prod”,. Dessa forma, quando ocorrer uma modificação que seja pertinente e testada, basta mudar o aliases “prod” para a nova versão, sem ter que solicitar a troca da versão para os consumidores.
É possível utilizar aliases para blue/green test também.
Quais são os limites de execução de uma função lambda?
A alocação de memória varia de 128MB a 10 GB
O tempo máximo de execução é de 900 segundos (15 min).
As variáveis de ambiente podem ter 4KB
A capacidade de disco é de 512MB (in /tmp)
Máximo de 1000 execuções concorrentes (pode aumentar com ticket).
Quais são as limitações de deploy de uma função lambda?
O tamanho do deploy (.zip) não pode ultrapassar 50MB.
O tamanho descomprimido (código + dependências) não pode ultrapassar 250MB.
O tamanho das variáveis de ambiente é 4KB.