Bom, voltando aqui agora para falar um pouquinho sobre Lambda Function, acho que aqui muita gente acaba usando bastante isso, tá? Porque ela é bem interessante, se vocês pararem para pensar, ela é bem interessante e bem bacana para quem vai desenvolver na AWS e que ainda não tem todo aquele repertório de AWS. Por quê? Quando a gente está falando de Lambda Function, entenda bem, eu não estou dizendo que não tem todo aquele repertório, como se fosse uma coisa ruim usar Lambda Function. É porque é mais fácil, mas é muito bom. Lambda Function vai ajudar a gente em um monte de coisa. Então, quando a gente começa a entrar no Lambda Function, vocês vão ver que ela é mais fácil, porque ela começa a abstrair um pouco o conceito de infra, que gera o que a gente tinha como comum para quem está trabalhando em desenvolvimento de aplicações. Então, quando a gente está falando de desenvolvimento de aplicação, eu não tinha que ter tanto domínio de infraestrutura, igual a gente está falando aqui no curso. E por isso, quando eu vou para o Lambda Function, eu acabo conseguindo ter essa abstração e voltar àquele mindset onde eu olho só para o código e foco nisso, o que traz para mim uma maior velocidade de integração e assim por diante mas vamos lá quando está falando do âmbito que ele faz a lambda ela basicamente ela vai executar o seu o seu código ali resposta um evento tá ela faz o gerenciamento ali de tudo que a gente tem de recurso computacional que nada mais que a infraestrutura que a gente vai rodar por trás de tudo que a gente falou até agora eu estava falando lá de subir máquinas substância vai descer instância, etc., a Lambda Function, ela deixa isso abstraído para você. Você não precisa se preocupar tanto com isso, tá bom? Lógico, quando a gente vai construir uma aplicação para rodar em cloud, etc., ela tem que ser pensada. E a gente vai falar um pouco sobre isso. Mas não significa que você vai ter que olhar para toda essa infraestrutura que acaba diminuindo um pouco o seu trabalho. Mas, voltando, qual é o ponto de preocupação disso? Quando você exagera em Lambda Function, quando você leva muitas coisas muito estratégicas para esse tipo de coisa, ou seja, o core da sua aplicação você quer deixar em Lambda, você corre o risco de ter um lock muito grande, sem contar os custos ali, você precisa ficar esperto para ver como é que isso vai se sair, se você não tem tanta habilidade pra lidar com, tá? Mas vamos em frente. Lambda, então, em suma, a gente tá falando que Lambda não é nada mais do que uma estratégia pra gente executar o nosso código abstraindo a visão de infra e automaticamente o provedor cloud, que aqui no nosso caso é a AWS, que é quem fornece o Lambda, ela vai provisionar para você e fazer as coisas acontecerem ali por trás sem você se preocupar tanto, ou seja, a infra vai rodar por baixo dos panos e você não vai ter que olhar com tanto cuidado para isso, tá bom? E como é que funciona a Lambda Function? Eu acho interessante a gente parar para pensar um pouquinho como que ela vai funcionar aqui no dia a dia. Primeira coisa, ela vai responder a evento, tá bom? Então, o jeito dela responder para você é pela execução de evento. Então, por exemplo, imagina que você tem lá um S3, que, por exemplo, está gerando algum tipo de evento, algum tipo de pedido de execução para ela. Você pode colocar um gatilho para o Lambda executar e sair rodando alguma coisa. Um outro jeito que você pode fazer é por Dynamo, por exemplo. Você pode colocar lá no Dynamo um tipo de estratégia para isso. Qual é o mais comum utilizado? SQS ou SNS? A gente vai falar disso também, mas são formas de você postar ali um evento e para depois a Lambda sair executando alguma coisa. Então essas são as formas de execução. Quando a gente está falando de código, a gente pode falar de código para a Lambda, você basicamente vai subir seu código nela, ele vai armazenar e vai executar quando for chamado. Então, ela vai ficar esperando ali uma solicitação de evento ou tipo de execução direta e com isso ela vai sair executando seu código. O que significa sair executando seu código? Ela vai subir, vai subir uma instância, vai executando seu código. O que significa sair executando seu código? Ela vai subir, vai subir uma instância, vai executar seu código e vai matar a instância. Então é basicamente isso que ela vai fazer por trás. Ela vai subir o ambiente seguro, vai tocar o pau ali e depois ela te devolve a resposta e mata a instância. O que é muito importante porque daí você já sabe que você vai ter a sua infra ali melhor, com a melhor estratégia de FinOps, da parte financeira dela. Quando a gente está falando de execução, você pode colocar também gatilhos para executar automaticamente ali. Então você pode falar que dado determinado momento ou determinada situação, ela executa e a quantidade exata que você vai querer de infra para que isso aconteça, ela vai levantar para você na hora que você colocar uma execução automática. Então você tem esses jeitos aqui de fazer o Lambda Function funcionar, tá bom? Como que ele starta. Aqui eu fiz basicamente um desenho bem simples sobre como ficaria uma arquitetura aqui bem simples de um crudizinho usando o Lambda. Lambda é esse símbolo aqui no meio, laranjinha. Então quando a gente olha pra isso a gente, então, um S3, beleza? Imagina que você tem algum tipo de evento, qualquer coisa, qualquer... Deixa eu colocar melhor, tá? Então, a gente está no S3, em vez de evento, vamos pensar numa execução direta. A gente está no S3, você colocou ali o seu site estático, beleza? Seu site estático está aqui dentro, você tem lá um webview, esse webview precisa fazer um CRUD, vai fazer um, sei lá, um select numa tabela, beleza? Select, mode de dizer. Então ele vai buscar lá numa tabela algum tipo de informação e assim por diante. O que ele vai fazer? Esse webview vai bater no API Gateway, beleza? Que é esse roxinho. O API gateway starta a sua Lambda. Então, a partir daqui, quem que é o start dos eventos? É o API gateway. Ele vai dar o start de evento para a Lambda. A Lambda sobe, executa, bate num Dynamo, por exemplo, aqui no nosso caso está batendo num Dynamo, busca informação, volta, responde e morre. Então, logo que ela vai, ela busca essa informação e morre logo que ela vai ela busca essa informação e morre aqui no caso eu tentei usar só serviços que são serverless justamente para a gente começar a enxergar como dá pra você desenhar toda uma arquitetura serverless todo mundo que está aqui desenhado é serverless todo mundo tem esse conceito parecido com o da lambda ou seja você vai abstrair infra então aqui você está tendo todo um conjunto de plataforma usando só serverless é o melhor dos dos mundos? Não. Sendo muito honesto, se tiver toda uma plataforma desenhada assim, talvez no seu dia a dia você vai estar com muito lock-in. Mas aqui eu fiz desse jeito só para a gente ter como ponto de vista aqui de como ficaria, tá bom? Então, basicamente, vamos de novo. Tem o site estático, esse site estático chama o meu API Gateway, o API Gateway starta a a minha Lambda, Lambda bate no banco de dados, no Dynamo no nosso caso, volta e responde o que precisa para o front, ou por exemplo faz o include, também podia ser, qualquer coisa nesse sentido, beleza? Aqui eu fiz uma brincadeira bem simples, aí você imagina a aplicação que você quiser imaginar na sua cabeça que dá para fazer desse jeito beleza? Vamos falar um pouquinho sobre a parte de Finobs, a parte de pagamento, como é que isso vai funcionar o modelo de precificação do Lambda. Quando a gente está falando da precificação, para Lambda é bem complicado de a gente colocar igual a gente vem colocando, quanto que custa? Porque você vai pagar por número de execução, tamanho de máquina, ou seja, é muita variável para você entender como é que fica essa precificação. Mas o que você tem na cabeça é que você só vai pagar pelo que você está consumindo, ou só enquanto o seu código está rodando. Se o seu código parou de rodar, você não paga mais nada. Diferente de uma instância que você sobe e se você não matar ela, ela continuar lá gastando, essa ela já sobe e morre. Então você não precisa ficar tendo todo esse trabalho de ficar fazendo a gestão dessa instância. E por isso que ela acaba sendo mais performática. Porque como ela já faz isso automaticamente, não corre o risco de você criar alguma aplicação que sobe e fica lá ligado o tempo todo. Mas tem um grande problema. Você deve estar pensando aí. Beleza, então a minha aplicação sobe e morre. Coloquei ela lá para rodar e depois ela não está mais lá. O que vai acontecer? Imagina que é uma aplicação, por exemplo, que tem alguma coisa rodando em cache, ou ela tem algum tipo de estratégia que ela tem que estar sempre online e assim por diante. É o melhor modelo? Não. Já vamos entrar nisso. Qual que é a grande diferença? A Lambda, ela é stateless, ou seja, ela não vai ficar disponível o tempo todo. Ela não tem um ela não mantém um estado entre as suas execuções ela nasce e morre, se você precisa de continuidade de informação você precisa prestar atenção nisso, você precisa manter esse estado vivo, e pra isso você precisa usar algum tipo de serviço externo por exemplo o S3, ou você pode usar alguma coisa que quando você vai precisar de mais armazenamento por mais tempo, ou algum tipo de ideia de armazenamento para você ficar buscando informação o DynamoDB você tem outras estratégias ou seja sempre pensando em colocar algum tipo de banco de dados ou repositório onde você consiga descansar os seus dados de estado não é só dado que nem eu falei ali de um insert então imagina que você tem por exemplo eu coloquei aqui o nosso desenho de novo. Imagina que você está fazendo, por exemplo, um select. Então, você tem aqui a sua página web, ela está indo lá no seu API Gateway, acertou a sua Lambda e fez um select. Então, eu vou buscar na sua base, por exemplo, a sua forma de pagamento. Imagina que eu estou fazendo o seu pagamento e eu vou buscar a sua forma de pagamento. Busquei a forma de pagamento. Imagina que eu estou fazendo o seu pagamento e eu vou buscar a sua forma de pagamento. Busquei a forma de pagamento aqui. Voltei e respondi para o meu front. Imagina que, em vez dessa aplicação fazer só isso, agora vamos usar a nossa imaginação porque eu não tenho outro desenho, tá gente? Em vez da gente fazer só essa parte de buscar, eu tenho também um outro fluxo onde eu estou fazendo um workflow. Não é a melhor ferramenta, não é o melhor jeito, mas imagina que é isso para a gente conseguir entender a ideia. Então, eu tenho um outro fluxo onde eu estou fazendo um workflow. O primeiro ponto do meu workflow é buscar meio de pagamento. O segundo ponto é olhar qual é o seu limite, por exemplo. E o terceiro ponto é efetivar o pagamento. Então, imagina que o primeiro ponto foi buscar o meu meio de pagamento. Voltei e estartei uma Lambda Function e falei assim, meio de pagamento está ok, pode estartar o próximo. Ele vai lá e estarta o próximo cara que é, por exemplo, constar o seu limite. Na hora que ele voltar para essa primeira Lambda, ela vai ter morrido. E daí ela vai perguntar, e aí, já buscou o meio de pagamento? Então, você está vendo que ela morreu, ela não tem mais o estado. Ela buscou o primeiro step e morreu. Para você conseguir fazer essa gestão de estado, você tem que pegar, subir, falar, beleza, já recebi o meio de pagamento. Flega num DynamoDB, por exemplo. Volta e manda para o próximo estado. Aí a pessoa vai, a próxima lambda vai lá e busca, por exemplo, o seu limite de crédito voltou respondeu para essa daqui ela tem que subir e lá e flegar já tem o limite de crédito próximo step então pra você fazer algum tipo de caso lógico que eu fiz aqui uma abstração maluco uma arquitetura horrível mas é só pra gente ter aqui um case pra vocês entenderem porque é importante a gente olhar para o estado da ação quando está falando de lambda function se a gente morre não não prestar atenção nisso e colocar alguma coisa que seja diferente, por exemplo, de um CRUD, colocar alguma coisa mais complexa, que você tem que manter o estado da aplicação, possivelmente você vai capotar porque ela não faz isso. Depois que ela nasce, ela morre. Então, é muito simples. Você sabe que ela não vai estar lá de pé o tempo todo, ou seja, você não vai ter informação aqui, pensa que você por exemplo, tem que ter log pra você ter log, você vai ter que jogar isso pra fora da lambda, jogando num cloud watch por exemplo, pra depois você conseguir entender o que está acontecendo se você depois quiser buscar na máquina o que aconteceu, você não vai ter porque ela morreu, ela já subiu e morreu então é interessante a gente pensar nisso, tá bom? outra coisa também, a Lambda vai escalar automaticamente. Então outra coisa que a gente tem que pensar é se começar a ter um número de instâncias e de eventos chegando muito rápido, você pode configurar ela para ela escalar sozinha. Na verdade, ela vai escalar sozinha, você pode configurar ela para você deixar algumas instâncias reservadas para garantir essa capacidade. Ou seja, em vez de começar de uma Lambda, já começa logo de cinco. Já starta o dia ali com cinco e na hora que vier uma pancada eu subo para dez. E assim por diante. Então você consegue deixar já uma capacidade de processamento ali pré-estabelecida e você sabe que ela vai escalar conforme for chegando mais coisa, beleza? Aqui a gente tem alguns modelos de execução da Lambda Function. Eu falei pra vocês do assíncrono bastante, mas você tem o síncrono, você pode ter um API REST batendo direto ou Amazon API Gateway ali, que é aquele carinha que eu falei pra vocês. No nosso caso tava o S3 batendo no Gateway e o Gateway indo direto ali na Lambda pra acionar ela. Você podia ter uma API REST batendo direto também, em vez de um site estático ali no começo. Seria até melhor, né? Porque no fim das contas, o desenho que eu fiz ali, eu tirei o BFF do meio do caminho. Mas você deveria ter, por exemplo, um site estático, um BFF, o BFF vai fazer uma chamada via API Gateway, o API Gateway bate na Lambda, ou na lambda ou algo desse sentido ou próprio BFF batendo direto na lambda mas aqui você pode fazer ou seja direto por uma chamada assíncrona ou seja via REST ou via API Gateway ou você pode fazer de forma assíncrona a gente ainda não falou tanto mas a gente pode ter eventos via S3 ali acontecendo que eu estou postando num bucket ou SNS ou até SQS dependendo do que a gente tem pra fazer eu posso usar o SQS pra isso também, mas depois a gente vai entrar mais nesses itens pra ver como é que a gente faz ou eu posso ter uma estratégia, onde eu coloco por exemplo, DynamoDB Streams ali e eu tenho que fazer processamento enfileirado de registro, ou seja, conforme eu vou streamando a coisa, eu não vou simplesmente fazer um