Skip to content

Latest commit

 

History

History
251 lines (167 loc) · 8.14 KB

File metadata and controls

251 lines (167 loc) · 8.14 KB

aws-lambda-icon

Lambda

📌 Índice


Introdução

Lamba é um serviço AWS com arquitetura serverless, a tradução literal é "sem servidor" mas não quer dizer que a infraestrutura será sem servidores e sim uma arquitetura que permite transferir mais das suas responsabilidades operacionais à AWS. Este tipo de arquitetura permite criar e executar aplicações e serviços sem preocupações com servidores, como por exemplo o gerenciamento e provisionamento de capacidade (processamento e armazenamento)


O que é serverless?

É um novo paradigma onde não existe mais a necessidade de gerenciar servidores. Então, não é que não tem mais servidor e sim que apenas você não precisa gerenciá-lo.

É somente implantar o código/funções.

Serverless na AWS

  • Amazon S3
  • Aurora Serverless
  • AWS API Gateway
  • AWS Cognito
  • AWS Kinesis Data Firehose
  • AWS Lambda
  • AWS SNS & SQS
  • DynamoDB
  • Fargate
  • Step Functions

Compatibilidade de linguagens do Lambda

  • C# (.NET Core)
  • C# / Powershell
  • Golang
  • Java
  • Node.js
  • Python
  • Ruby
  • API de Tempo de Execução Customizada (Custom Runtime API): É suportada pela comunidade

Principais integrações do Lambda

Principais integrações com outros serviços da AWS.

  • API Gateway
  • Cognito
  • CloudFront
  • CloudWatch Events / EventBridge
  • CloudWatch Logs
  • DynamoDB
  • Kinesis
  • S3
  • SNS
  • SQS

Cobrança

A cobrança é feito por requisição (requests). O primeiro milhão de requisições a AWS são gratuitas, a partir dessa quantidade é cobrado R$ 0,20 por cada milhão de requisições


Lambda e ALB

Para o Lamba e ALB conseguirem trabalhar em conjunto é necessário criar um grupo de destino(target group) e adicionar a função lambda desejada.

ALB Multi-Header Values

  • ALB pode suportar multi header values (habilitado nas configurações do ALB)
  • Quando você habilita o multi-value headers, headers HTTP e query strings que são enviados com múltiplos valores e mostrados como arrays dentro do evento AWS Lambda e objetos de resposta. Exemplo:
# HTTP (ALB)
http://exemplo.com/path?name=Maria&name=João

# JSON (Lambda)
queryStringParameters: {"name": ["foo", "bar"]}

Chamadas Síncrona

Quando uma função lambda é chamada, a função é executada e aguarda uma resposta.

Chamadas Assíncronas

Quando uma função lambda é chamada, a função é executada e aguarda uma resposta.


Mapeamento de origem do evento

Última categoria de como o Lambda pode processar eventos na AWS. Aplica-se a: Kinesis Data Streams, SQS, SQS FIFO queue e DynamoDB Streams.

A invocação da função lambda é síncrona.

Quando você usa o mapeamento de origem do evento para invocar a sua função, o Lambda usa a função de execução(IAM Role) para ler os dados do evento


Função de execução do Lambda

A função de execução(IAM Role) garante a Lambda permissões para serviços/recursos da AWS.

Uma boa prática é criar uma função de execução por função Lambda.

Se a função lambda for invocada por outros serviços, é utilizado a política baseada em recursos(Resource Based Policies), que dá para outras contas AWS e serviços a permissão para usar o seu recurso Lambda.


Rastreamento Lambda com X-Ray

Variáveis de Ambiente que se comunicam com o X-Ray:

  • _X_AMZN_TRACE_ID
  • AWS_XRAY_CONTEXT_MISSING
  • AWS_XRAY_DAEMON_ADDRESS

Lambda e VPC

Por padrão o Lambda não conseguirá acessar recursos em uma VPC, mas existe uma maneira de fazer com que ele possa. Você deve definir a VPC ID, Subnets e o Grupo de Segurança(Security Group)

Funções Lambda e uma VPC não possuem acesso a internet ou a um IP público.

  • AWSLambdaVOCAccessExecutionRole

Simultaneidade e limitações

  • Simultaneidade reservada
  • Simultaneidade provisionada

Camadas Lambda

As Camadas Lambda(Lambda Layers) podem ter tempos de execução personalizados, bibliotecas, dados ou arquivos de configuração.


Imagens de contêiner

É possível empacotar o seu código e dependências em uma imagem de contêiner do docker.

Implante funções Lambda em uma imagem de contêiner de até 10GB no ECR.


Lambda versions

Tem o caso de uso para realizar testes (ex: testes A/B) e migrações de suas APIs.

Versões ARN:

  • Qualified: Quando a versão de uma função lambda for qualified terá um sinal $latest do ARN. Aqui é possível criar uma nova versão a partir dela
  • Unqualified: Se a versão de uma função lambda for unqualifed você não conseguirá ver a parte $latest no final do ARN. Não é possível fazer mais alterações.

Versões

Enquanto você estiver trabalhando na sua função lambda a versão será $LATEST .

Versões são imutáveis, ou seja, isso significa que você não pode alterar mais nada no código ou em variáveis de ambiente.

Cada versão terá o seu próprio ARN(Amazon Resource Name).

Versões ARN:

  • Qualified: Quando a versão de uma função lambda for qualified* terá um sinal $latest do ARN. Aqui é possível criar uma nova versão a partir dela
  • Unqualified: Se a versão de uma função lambda for unqualifed* você não conseguirá ver a parte $latest no final do ARN. Não é possível fazer mais alterações

Alias

São ponteiros que apontam para versões específicadas da sua função lambda. Por exemplo, alias definidos como dev, homol e prod, para utilizarem diferentes versões da função lambda.

Alias habilitam implantações do tipo Blue/Green atribuindo pesos de tráfego. Aliases também terão os seus próprios ARNs e eles não podem fazer referência a outro alias.


Limites do Lambda

  • Execução(Runtime)
    • Alocação de memória: 128 MB - 10GB (incremento de 1 MB)
    • Tempo máximo de execução: 900 segundos (15 minutos)
    • Variáveis de ambiente: 4KB
    • Armazenamento temporário (/tmp): 512 MB
    • 1000 execuções simultâneas de uma função (pode ser aumentado abrindo um ticket na aws)
  • Implantação(Deploy)
    • Tamanho máximo de compressão .zip de 50 MB
    • Tamanho máximo sem compressão de até 250 MB
    • Variáveis de ambiente: 4KB

📚 Referências

Para uma compreensão mais profunda sobre Lambda recomendo a leitura da documentação oficial, os links estão abaixo. E outros links de referência.