Please enable JavaScript.
Coggle requires JavaScript to display documents.
AWS Lambda - Coggle Diagram
AWS Lambda
serviço gerenciado que executa
funções
ou trechos individuais de código
as funções executadas são de
curta duração até 15 minutos
possuem execução sob demanda e o scaling é automático de acordo com a carga
Princing
a cobrança é realizada
por requisições e duração de execução
Requisições
primeiras 1.000.000 são grátis
depois,
$0,20 por 1.000.000 requisições
Duração
primeiros 400Gb-segundos são grátis
depois,
$1,00 por 600GB-segundos
Invocação síncrona
invocações onde o chamador fica aguardando a resposta do serviço. Alguns serviços da AWS tem esse comportamento ao interagir com o Lambda
User invoked
são serviços que permitem chamadas da API pelos usuários
API Gateway
CloudFront
(Lamda@Edge
)
serviço que permite realizar o deploy de lambda functions nas
edge locations
permitindo a manipulação das requisições e das respostas
2 more items...
S3 Batch
ALB
a lambda deve ser
registrada em um target group
2 more items...
Service invoked
Cognito
Step functions
Lex
Alexa
Kinesis Data Firehose
Invocação assíncrona
ideal para serviços onde não há a necessidade de aguardar a resposta do processamento ou outros serviços que necessitam invocar outras funções após sua utilização. Normalmente neste cenário são usadas soluções de fila como o SQS ou SNS
Service invocations
S3
SNS
CloudWatch Event / EventBridge
CodeCommit
CodePipeline
CloudWatch logs
SES
CloudFormation
Config
IoT
IoT events
Configurações
maximum age of event
período de tempo em que a mensagem pode ficar na fila sem ser processada
Retry attemps
# de retentativas de retry
DLQ
fila SQS ou SNS para enviar eventos que não puderam ser processados
Destinations
funcionalidade que permite a função lambda enviar o
resultado do processamento com sucesso ou falha para um outro serviço
Serviços
SNS
Lambda
EventBridge bus
SQS
é possível de ser
usado em conjunto com a DLQ
SNS
SQS
Event source mapping
funcionalidade que permite que as funções lambdas trabalhem em conjunto com os serviços de mensageria
Kinesis Data Stream, SQS, SQS FIFO e DynamoDB Streams através de um objeto interno chamado Event Source Mapping
o Event Source Mapping precisa realizar poll de mensagens na origem
após a entrega das mensagens, a função lambda é achamada sincronamente
Queues
SQS FIFO
1 more item...
SQS
1 more item...
um iterador é criado e realiza
long polling
nas filas até atingir o
batch size que pode ser de 1 até 10 mensagens
1 more item...
Streams
habilitado para Kinesis data stream e DynamoDB stream
1 more item...
Destinations
funcionalidade que permite a função lambda enviar
eventos de sucesso e falha para um outro serviço
2 more items...
Limitações por region
Memória
128MB até 3GB em incrementos de 64MB
Arquivo para Deploy
50MB comprimido
acima disso, é preciso subir para S3 e referenciar no console
250MB não comprimido
Tempo de Execução
máximo de 900 segundos (15 minutos)
Variáveis de ambiente
até 4KB
Function Container (/tmp)
máximo de 512MB
# de Execuções
até 1000
Configurações
Variáveis de ambiente
são definidas com a estrutura de chave:valor e não há a necessidade de atualizar o código em casos de inclusão ou exclusão
é possível criptografar as os valores com KMS ou CMK
Monitoração
é possível integrar as funções lambda com o serviço de monitoração X-Ray. Essa integração ocorre ativando a opção
Active tracing
e incluido a
role AWSXRayDaemonWriteAccess
existem 3 variáveis de ambiente que podem ser configuradas para integrar com o serviço X-Ray
_X_AMZN_TRACE_ID
, contém o header do tracing
AWS_XRAY_CONTEXT_MISSING
, nível de log
AWS_XRAY_DAEMON_ADDRESS
, endereço:porta do daemon X-Ray
VPC
por padrão as funções lambdas são entregues
fora da VPC padrão
. A VPC utilizada é criada exclusivamente para o serviço e
contém acesso a rede pública
, mas
não contém acesso aos serviços provisionados na VPC padrão
Quando a função é entregue dentro de uma VPC privada,
uma ENI é criada para region com a role AWSLambdaVPCAccessExecutionRole
. Com isso é possível
definir regras de SG que autorizam o uso de recursos dentro da rede
Para conferir acesso a rede pública para as funções, é preciso definir uma VPC e conectar a função a um NAT Gateway ou NAT Instance e, consecutivamente, anexar o NAT a um IGW
realizar o deploy de uma lambda em uma VPC pública não garante acesso à internet ou IP público
para se comunicar privadamente com outros recursos AWS é preciso utilizar o VPC Endpoint
Computing
RAM
expansível de 128MB até 3GB em incrementos de 64MB
CPU
aumenta conforme a alocação da RAM. A partir de 1792MB de RAM é preciso usar multi-threading pois teremos mais do que 1vCPU alocada
Timeout
por padrão são 3 segundos podendo ser ampliado até 900 segundos ou 15 minutos
Execution Context
ambiente temporário que inicializa dependências externas a função. Esse ambiente é preservado por algum tempo de modo que a próxima execução possa reusá-lo
Dentro do contexto é possível ter acesso ao
diretório /tmp que possui no máximo 512MB
Concurrency
As funções lambda podem
escalar até 1000 exeuções
e esse limite é
definido para todas as funções da conta
é possível limitar a quantidade de concorrência através do
parâmetro RESERVED CONCURRENCY na função
. Uma vez que o limite é atingido, as requisições sofrerão throttle.
funções síncronas retornarão 429
funções assíncronas retentarão com backout exponencial e depois DLQ
Provisioned Concurrency
para alivar os efeitos do cold start é possível proviosionar funções antes dela ser invocada através do AWS Auto Scaling
Environment variables
máximo de 4Kb
Integração com CloudFormation
é possível realizar dois tipos de integrações
Inline
ideal para funções simples
propriedade
Code.ZipeFile
e descreve o código da aplicação
não permite inclusão de dependências
S3
código deve estar zipado e salvo no bucket
precisa referenciar: bucket, caminho do arquivo e a versão
caso não atualize o S3Bucket, S3Key ou S3ObjectVersion, o CloudFormation não saberá reconhecer a mudança no arquivo
Layers
funcionalidade utilizada para liguagens não nativas da AWS
utilizada para externalizar dependências e reutiliza-las em várias aplicações
Versions & Aliases
Versions
é definido pelo
conjunto de código fonte + variáveis de ambiente que não pode ser alterados.
são crescentes, numeradas e cada uma possui um ARN próprio. Também podem ser acessadas individualmente
Aliases
ponteiros para as
Versions
das lambdas. Exemplo: um alisas para DEV, PROD, TEST; cada uma apontando para uma versão diferente
diferentemente das versions,
aliases são mutáveis e permitem deploy blue/green através de pesos
nas funções
cada alias possui seu ARN e
não podem referenciar outras aliases
Integração com CodeDeploy
auxilia na automação de troca de trafégo entre alias
essa funcionalidade está ingrada com o SAM e possui 3 opções de deploy
Linear
o trafégo, de uma versão para outra, é incrementado a cada N minutos até 100%
Canary
redireciona o tráfego de X% e depois 100%
Canary10Percent5Minutes
Canary10Percente30Minutes
AllAtOnce
troca imediata das versões
podem ser utilizados hooks de Pre e Post Traffic para validar a saúde da lambda
Permissionamento
caso a função lambda precise
invocar outros serviços ou use event source mapping
é preciso
atribuir uma role
para conceder os níveis de permissão necessários
Policies gerenciadas
AWSLambdaBasicExecutionRole
AWSLambdaKinesisExecutionRole
AWSLambdaDynamoDBExecutionRole
AWSLambdaSQSQueueExecutionRole
AWSLambdaVPCAccessExecutionRole
AWSXRayDaemonWriteAccess
caso a função lambda precise ser chamada por
outros serviços
, é preciso dar
permissão de acesso ao recurso
Resource based policies
autorização de uso atrelada diretamente ao usuário da conta
policy atrelada a função lambda que dê a permissão necessária