Olá pessoal, tudo bem? Bem-vindos de volta à nossa Jornada Cloud. Vamos começar falando agora sobre um dos temas mais esperados para aqueles que são desenvolvedores, que é como que eu faço que os serviços AWS executem o meu código. Eu já entendi aqui sobre rede, já entendi aqui sobre máquina, já entendi aqui sobre um pouco de armazenamento de arquivos, políticas de acesso, mas onde é que essas coisas se juntam? Onde é que essas coisas de fato começam a ser executadas para a gente aqui dentro? Então, vamos falar agora sobre um dos serviços que ele é um dos mais queridos dos programadores dentro da Cloud AWS, que é o AWS Lambda. Antes de falarmos de deploy máquinas EC2 ou em outros mecanismos de disponibilidade aqui de recursos da AWS, vamos falar do AWS Lambda, que é um recurso serverless. O que é isso? Ele não tem uma configuração de servidores, eu não tenho um gerenciamento de servidores. Eu tenho a capacidade de executar o meu código como função dentro da AWS. Eu crio ali uma função Lambda, dou a ela as permissões necessárias, coloco ali o meu código, que pode ser Sharp, Java, Python, Node, enfim, aquilo que a sua convenção de equipe definiu para aquela aplicação, e você vai apenas escolher quanto você precisa de memória, é essa carga cognitiva a nível de máquina que você vai ter que gastar. É quanto eu preciso de memória, você vai escolher quanto você vai executar de memória, vai colocar o seu código lá e a AWS ela se responsabiliza pelo restante. Imagina que isso de fato tem um custo. E você deve estar pensando, poxa, para ter um serviço aonde eu não vou gerenciar servidor, aonde eu posso me preocupar apenas com oço, aonde eu não vou gerenciar servidor, aonde eu posso me preocupar apenas com o código, aonde eu posso simplesmente colocar ele para executar como função, imaginando que eu posso expor ali dentro uma API RESTful, processando aí em alguma base, SQL ou NoSQL, fazendo request em base, recebendo inputs para gravação, fazendo aí response para pesquisa dentro da web, e você acha que você vai pagar um preço absurdo porque você não vai estar gerenciando nada. Muito pelo contrário. Na verdade, o AWS Lambda, se bem utilizado, ele é um dos serviços mais baratos da AWS, tá? Porque eu não estou, de fato, executando na AWS um recurso de máquina muito avançado, eu estou falando para ela me dar esse determinado recurso que eu preciso para executar a minha função e ela vai provisionar isso para você e ela tem garantia de disponibilidade, tá? Então assim, aonde eu vou usar esse tipo de recurso? Não tem de fato uma receita de bolo, tá pessoal? Posso usar em processamento de arquivos, processamento de pultos, aplicações web, então, tantas coisas, internet das coisas, tá? Tem tantas coisas aí que eu posso estar usando o AWS Lambda, tá bom? E vagando muito pouco por isso, tá? Então, para você ter uma noção de custo, vamos lá. Se eu estiver aqui na arquitetura x86, os primeiros 6 bilhões de GBs dos meses, ou seja, o tempo de execução, aquela de cobra por execução e por tempo, são esses modelos de cobrança. Gente, isso aqui dá muito menos que 1 centavo por cada gigabyte segundo, tá bom? Que você está executando. Vamos dizer que você vai executar aqui em uso de memória, para o Last Virginia, olha aí. O primeiro um milhão de solicitações, gente, por uso de memória aqui nesse, pagar 20 centavos de dólar. Muito barato, né? Imagina que tem uma outra surpresa aqui, tá bom? Porque o primeiro 1 milhão de execuções do AWS Lambda é gratuito, tá bom? Principalmente se você está aí no Twitter, você vai ver que esse primeiro 1 milhão é gratuito. Eles não vão te cobrar por esse processamento. Então, é possível ter aplicações muito baratas rodando no AWS Lambda. Mas tem uma coisa importante a ser ressaltada. O AWS Lambda possui algumas cotas, tá bom? Então, ele não vai te dar núcleos de processadores por seleção. Você não escolhe isso você precisar de mais processamento consequentemente você vai ter que executar mais memória consequentemente você pode acabar gastando mais tá bom é nesse ponto ainda que muito barato ainda tá mas aquele deixa claro pra você que olha é existe aí sim uma limitação de memória então ele vai te entregar é a memória ao processamento conforme você escalar sua memória vamos pensar que eu preciso de um core então eu vou pedir um giga e meio tá bom de de memória é para poder executar então é sempre incrementos de 1 MB com 1769 MB uma função tem equivalente a 1 vcpu então se eu precisar de 2 vcpus eu dobro esse valor se eu precisar de 3 eu triplico esse valor assim ele vai tendo esse incremento de memória cada x é gigas que eu vou pedindo tá ainda que isso ainda é muito barato mas é somente para se entender ele não não é como ali numa má não escolha de uma máquina e c2 aonde lá na máquina e c2 eu vou lá escolha família escolhe o modelo que eu quero de marco traga memória e traga cpu aqui eu trago numa escolha de uma máquina EC2, onde lá na máquina EC2 eu vou lá, escolho a família, escolho o modelo que eu quero de máquina, trago memória e trago CPU. Aqui eu trago CPU conforme eu instalo memória, tá bom? Então, vamos começar a entender? Vamos fazer um trabalhozinho aqui? Então, eu vou propor uma coisinha para a gente treinar, tá bom? O que a gente vai fazer aqui? Eu abri aqui o dry.io. Vamos entender primeiro a arquitetura que a gente vai fazer aqui. Eu vou criar aqui um S3. Deixa eu pegar aqui um bucket do S3. Vamos criar um bucket S3. Vamos pegar aqui uma lambda na AWS. Vamos criar também uma lambda na AWS. E vamos postar um arquivo no S3. E lembra que lá quando a gente estava falando de S3, a gente falou que eu posso criar gatilhos ali dentro, né? Para poder acessar algumas funções, por exemplo. Então, quando eu criar um arquivo aqui dentro, eu quero que a própria AWS comunique esse arquivo com o Lambda, pode ser esse de log string que eu vou nos ter, tá bom? E eu quero que a minha lambda poste um log disso, tá bom? Um log dessa execução. Então, pensando numa arquitetura, vai ser muito simples, vai ser isso aqui que a gente vai fazer, tá? Então, primeira coisa, pessoal, que a gente vai precisar fazer aqui, tá bom? Vamos criar a nossa função, não a Lambda, mas a nossa função no IAM, tá bom? Vamos criar ali nossa política e a nossa função no IAM para garantir o acesso dessa Lambda ao Bufs3. Está vendo que aqui as coisas começam a começar, começa a começar a ficar um pouco redundante, mas as coisas começam a fazer sentido. As pessoas começam aqui a linkar um trabalhinho com o outro. Então, a primeira coisa que a gente vai ver aqui é vir no IAM. Vamos criar primeiramente uma política. Vou criar uma política. Vou chamar essa política para S3. Você escolhe aqui o serviço da AWS. Você pode fazer direto no JSON? Posso. Se você não tem esse conhecimento ainda Use o editor Use o visual Porque ele vai te garantir Uma confiabilidade muito maior Tá bom? Então vou escolher aqui o serviço Você pode escolher vários serviços Todos da AWS estão aqui Vou escolher o serviço S3 Eu posso falar todas as permissões? Posso galera, posso sim Mas Lembra que a gente falou falar todas as permissões? Posso, galera, posso sim. Mas, lembra que a gente falou, pô, é bom você colocar ali como permissão apenas aquilo que você precisa? Então, vamos colocar aqui apenas a de leitura. Eu quero apenas pesquisar um objeto. Então, eu não preciso das outras coisas. Ele tem aqui as permissões de listagem, as permissões de leitura, as permissões de gravação. Por exemplo, lembra que tudo no bucket é um objeto? Então, o delete object e tudo mais é o put para atualizar, para criar o objeto aqui dentro. Então, tudo isso aqui é item de gravação. Nós vamos usar apenas um item de leitura, tá bom? Qual que é o recurso, tá bom? Que ele pode acessar. Lembra que eu falei, eu poderia criar ali um recurso específico. Poderia falar, para esse bucket sim, para os demais buckets não. Ele nasceria com um deny. No nosso caso aqui, para exemplificar, eu vou deixar ele ler tudo, tá bom? Apenas para a gente poder dar seguimento aqui porque a gente ainda vai precisar criar o nosso bucket depois como o bucket não está aqui criado ainda eu não vou pesquisar por ele então eu vou falar que eu quero todos os recursos eu quero poder ler todos os Vou para o próximo. Nome da política. Vou chamar de S3 Policy. Tá bom? Por que isso? S3 Policy. Porque eu posso editar a política, tá? Então, eu vou chamar de pesquisa, de leitura, porque depois eu posso querer fazer alguma coisa de gravação, eu posso usar essa política se fizer sentido. Não quer dizer que seja a regra. Então, está aqui. Nível de leitura para todos os recursos. Não tem condição. S3 Policy. Criei minha política. Se eu precisar aqui, já está aqui dentro. Vamos criar agora a função que a gente vai estar atribuindo. A função aqui que é a minha role. Vamos criar agora a função que a gente vai estar atribuindo. Função aqui que é a minha role, né? Então, eu vou, primeira coisa, criar aqui, criar aqui em perfil. Ó, aqui eu posso criar várias coisas. Provedores de identidades e tal, tal. Vamos para serviços web, que é o que a gente vai estar provisionando, tá bom? Aqui dentro. Ele ainda tem aqui exemplos, casos de uso e tudo mais, que vai te garantir algum reuso, tá bom? Aqui dentro. Ele ainda tem aqui exemplos, casos de uso e tudo mais, que vai te garantir algum reuso, tá bom? Mas eu vou pegar aqui em Serviços AWS, vou pegar aqui o Lambda, tá bom? Selecionar aqui o Lambda, como meu caso de uso. E vou vir para cá, tá bom? Então, qual é a permissão que eu quero ter dele? Eu quero, por enquanto, só o S3 Poly, Tá bom? Então, qual é a permissão que eu quero ter dele? Eu quero por enquanto só o S3 poli. Tá bom? Então, subo pra cá. Qual que é o nome da minha função? Vou chamar ela de lambda test test test test tá bom? test role tá bom? então eu vou colocar aqui ela é uma função aqui, uma role que eu vou usar na minha função lambda que eu vou criar política de permissões o que tiver dentro dessa policy vou criar ela pronto está aqui dentro se você olhar aqui dentro essa aqui é a política de acesso se eu olhar aqui eu consigo ver tudo que ela pode fazer tá bom? então criei a minha política agora eu vou criar a minha lambda a gente pessoal vai seguir aqui o uso do console bom em algum momento nós vamos falar de outras formas de uso como já dizemos mas vamos trabalhar agora neste momento pela console vamos criar a função cria do zero vou cham chamar minha função de lambda test. Eu fiz a minha aplicação em Java. Vou usar aqui o Java 17. Vou usar x86. Permissão. Criar. Não. Vou usar uma função existente. Olha ela aqui. Lambda test row. Tá bom? Por enquanto é isso aqui. Não vou habilitar mais nada. A minha função está criada. Tá certo? Minha função está criada. Esquecemos de uma coisa. Lá dentro do nosso arquitetura, a gente falou que ele teria que buscar o arquivo, o bucket vai vir para cá No caso, a lambda vai vir aqui depois, em um movimento bidirecional Vai fazer uma leitura desse arquivo, deixa eu procurar aqui Vai fazer uma leitura de um arquivo aqui dentro opa vamos lá aqui, e também vai guardar log disso, só que ele não tapa permissão de log eu não criei ali nessa, na minha lambda aqui dentro uma permissão de log, nessa policy aqui dentro, então vamos aqui na nossa política, vamos editar ela vamos pegar ela aqui dentro, vamos editar, vou no visual, e eu vou adicionar mais permissões, serviço CloudWatch, cloudwatch deixa eu ver aqui cloudwatch logs, não é este não é este carinha, cloudwatch logs vamos lá cloudwatch logs vamos ver quais as permissões que a gente precisa, eu preciso poder criar eventos, vamos ver, put log even, eu preciso poder criar um log group, create log group e também preciso criar um log stream, vamos ver se eu tenho esse carinha aqui dentro. Tenho carinha aqui dentro. Pessoal, como eu sei o que eu preciso de permissão? A AWS tem documentações vastas para isso. E não se preocupe. Como eu falei, a ela vai te avisar ela nasce negado os itens então caso você precise de um recurso que você não tiver acesso por trás são consumos de APIs ele vai dar um 403, ele vai dar um recado indicando que você não tem acesso e aí sempre que você for criar um recurso você fala por por exemplo, como criar ou pesquisar no Bunch, o que eu preciso ter? Aí ele vai ter ali vários itens de política, como eu mostrei aqui para vocês, que você pode acessar. Tá bom? Então, próximo. Tá bom? A específica aqui, eu coloco tudo. Vou deixar tudo. Tá bom? Para qualquer item. Próximo. Salvei alterações. Está aqui. Salvamos as alterações do nosso CloudWatch. Então, se eu chegar aqui na minha função, LambdaTestRole, ele tem uma política. Olha aqui agora. Opa. Será que ele ainda não atualizou para a gente? Provavelmente ele ainda não atualizou a minha política aqui dentro. Limite de permissões não está definido. Mas como vocês viram lá na minha política, esse três policies, vamos ver aqui. Como vocês viram, esse três policies, ele já está com a política aqui, tá bom? Lá ainda não apareceu por uma questão aí de timing mesmo, tá bom? Mas a gente pode sempre, se você quiser, garantir algum reforço, você pode editar, mas olha aí a descrição, então aqui, máxima de sessão, cancelar, bom, as políticas devem estar aqui dentro, a gente pode inclusive simular, se você clicar aqui em simular, se você quiser saber se você tem ou não acesso a um item, você pode clicar aqui na simulação dele você pode escolher aqui a sua política tá bom e vamos por exemplo pegar o que a gente falou com o CloudWatch Logs com ação você pode procurar aqui a ação vamos pegar uma ação que a gente criou só pra vocês testarem Cultivate Logs Run, tá permitido, tá vendo? vamos ver se eu tenho uma outra aqui dentro, ó, que ele não estaria vamos colocar uma qualquer That Logs Upfield opa, essa ela não faz tá vendo? Por quê? porque não tá lá configurado na política pra fazer então lembre-se nasce o default da AWS. É negar tudo. Bom, já temos então, pessoal, a nossa Lambda. Já temos, se você olhar aqui em configuração, as nossas permissões. Já tem aqui a Amazon S3, tudo certinho. Já temos nossa Lambda aqui dentro, tá bom? Então, vamos também agora colocar o nosso código, tá? Isso aqui é uma parte bem interessante, tá? Por quê? Vou fazer o upload de um zip que eu já tenho em Mac. Então, vou fazer o upload do arquivo, tá? Tá aqui dentro, ó. Vou pegar arquivo tá aqui dentro vou pegar ele tá aqui salvo vamos esperar um pouquinho Está carregando Pronto Atualizou Está aqui o meu pacote Agora você tem que editar uma segunda coisa O que você precisa fazer? Você precisa falar aonde a sua função inicia Então você vem aqui Editar aqui essa configuração Eu vou usar a configuração de memória default, não vou alterar, mas vou colocar aqui a minha função ela inicia aqui, esse aqui é o manipulador dele, dela, tá bom? Salvei. Com isso aqui, minha função já estaria executável. Eu posso testar, tá bom? Eu posso testar bom eu posso testar eu vou tomar um erro aqui vou forçar um erro nela só pra vocês terem uma idéia de como ela vai funcionar posso testar pelo console aqui da AWS vou colocar aqui um s3 put nota que eu não estou alterando nada eu não tenho esse bucket exemplo não tenho nada vou apenas testar ele vai dar um erro aqui, obviamente tá bom? porque eu não tenho aquele é eu não tenho aquele bucket, eu não tenho aquelas coisas, mas olha aí tá vendo? ele tomou um erro aqui dentro. Então, o erro subiu conforme esperado. Agora, vamos lá para o F3. Vamos criar o nosso bucket. Está bom? Porque aquele bucket não existe. A gente não tem nada. Vou criar um bucket aqui. Vou criar um bucket aqui vou criar um bucket propósito geral nome do bucket vou chamar de test lambda aminadab lembra que o bucket único no mundo, tá bom? Teste, vou manter aqui desabilitado, vou bloquear acesso público, vou ativar versionamento, vou manter a criptografia ainda padrão, não vamos falar ainda de KMS, a gente vai falar disso em algum outro momento. Vamos continuar aqui dentro, criar o bucket. Criei meu bucket. Está aqui. Então, teste lambda, minha data. Agora, vamos pegar aqui na propriedade e vamos fazer uma notificação de evento. Então, vamos criar aqui uma notificação de evento o nome do evento vou chamar de criação não quero prefixo não quero sufixo eu quero todos os eventos de criação vou marcar ali eu poderia ter outros todos os eventos de criação apenas. E destino função lambda. Escolher dentre as suas funções lambda. Ela já aparece para mim aqui. Está vendo? Então, com isso aqui, eu vou salvar minhas alterações. Pronto. notificação criada tá bom? vou entrar aqui em monitor eu tive aqui uma execução apenas que foi com falha mas agora eu tenho possibilidade de um evento vir pra cá e com a política que já temos isso deve acontecer vamos dar uma olhadinha? Clique aqui no objeto, vou carregar o objeto, vamos pegar aqui um objeto que nós já temos aqui dentro, é um teste JSON aqui, carreguei, bem sucedido. Vamos olhar aqui a Lambda? Vamos ver, daqui a pouco isso pode demorar um pouquinho, não quer dizer que ele é automaticamente, porque é uma regressão de API, mas a gente pode olhar lá no CloudWatch e ver se a gente teve alguma execução. Se você vier aqui no CloudWatch, você pode ver grupos de logs, você vai notar que ele tem aqui um grupo de log que ele criou a gente, que é o da nossa LambdaTest. E vamos ver aqui, stream de informações. Vamos ver se ele teve evento. Qual foi o evento que ele está constando aqui? Ele está constando apenas aquele evento de erro que nós tivemos. Vamos, então, carregar aqui. Vamos ver. Aqui. Partou. Finalizou. Essa requisição nossa aqui. Foi exatamente o que ele fez. Vamos ver se no lambda ele apareceu. Vamos dar uma olhadinha. ele apareceu? Vamos dar uma olhadinha. Vamos ver se na Lambda ela apareceu. Vamos em monitor. Opa! Olha aqui agora! Tive uma execução. Está vendo? Olha aqui. Tive uma execução de sucesso Ou seja Se nós olharmos aqui no CloudWatch Ele acumulou o log, ele iniciou Dentro da minha aplicação E ele finalizou aqui E ele falou, eu usei isso aqui de memória Eu usei isso aqui durante X milissegundos E é isso que eu estou te cobrando Está vendo aqui? Cobrado 253 segundos, usado dessa maneira. Lembra quanto ele me cobra por giga de execução. Então, funcionou. Tivemos uma execução dentro do AWS Lambda que veio a partir do nosso bucket, entrou na nossa lambda e fez uma execução. Vamos fazer um segundo teste? Só para a gente ter certeza, vou colocar um outro objeto lá e vamos ver aqui. Ele está agrupando no mesmo string de logs. Está vendo aqui? Então, eu vou chegar aqui no objeto. Vou carregar um segundo objeto aqui dentro. Opa! Espera aí. Vou fechar aqui. Vou carregar esse arquivo. Carreguei. Todos os eventos de criação. Né? Todos os eventos de criação. Vamos dar uma olhada aqui no cloud watch vamos atualizar esse log às vezes ele vai para outro stream tá pessoal às vezes ele vai para outros stream tá bom vamos lá aqui olha esse segundo aqui ó tá vendo inici, fechou. Então, pessoal, é exatamente isso aqui que a gente queria ver, essa execução. Eu posso configurar logs melhores? Posso. Eu posso ir lá na minha aplicação e colocar ali um context log da própria AWS e começar a postar conteúdo do meu log, postar conteúdo do arquivo e não só logs de execução das minhas funções tá se a gente olhar aqui vamos ver se eu tive mais uma execução vamos lá opa hum ainda não está constando aqui vamos ver se a gente força ainda não consta mas já já ela aparece aqui no monitor com mais uma execução de sucesso como a gente evidenciou aí pelos logs então aqui muito interessante isso, tá bom pessoal? Então, vamos entender agora o quanto o AWS Lambda é útil para a gente. para você aplicar na sua empresa. É também um dos itens mais simples de se configurar e de se usar. Tá bom? Então, aqui, se você quiser entender a documentação, joga aí a AWS Lambda e você vai ver dentro da documentação dela tudo o que você pode fazer com todas as linguagens. Então, ele tem vários run times, não tem um run time apenas, ele não tem apenas um caso de uso, tá bom? Eu posso usar Lambda para API, eu posso usar Lambda para processamento worker, puramente batch, tá bom? Uma coisa interessante de falar ainda de Lambda, é que você, dentro dessa configuração, tem também um timeout, tá? O default de uma Lambda é 5 minutos de duração. Então, a instancia, o tempo default, ela mesmo terminando o processamento, ela ainda está ali guardando outras execuções durante 5 minutos naquela instância, mas eu posso estender isso até 15 minutos. Então, se você tem um processamento que vai passar disso e que não pode sofrer interrupção, a AWS Lambda não é a aplicação que você precisa usar. Não é o modelo mais indicado de uso. Existem modelos mais inteligentes na AWS. Posteriormente, a gente vai passar aqui para vocês também. Ok? Então, pessoal, é isso. Agradeço vocês por terem nos acompanhado. Treinem suas lâminas na sua casa. Não esqueçam de deletar, tá bom? Ah, uma outra coisa importantíssima, gente. Cloud Watch, grupo de log. Isso aqui é uma coisa que costuma ser um pouquinho caro, tá bom? Então, sempre que você precisar criar, como aqui ele está sem retenção, nunca expirar, configura aí uma retençãozinha, dá uma editada, vê quanto tempo você precisa daquele log, tá bom? Para que isso não fique muito tempo aqui na AWS e ele não acabe te cobrando indefinidamente por isso, tá? Então, vamos lembrar que a AWS a gente paga por uso. Então, vamos lembrar que a AWS a gente paga por uso. Então, vamos trabalhar também essa questão de Finops, que é a responsabilidade financeira dentro da Cloud Public. Obrigado por terem esperado até aqui, obrigado por terem acompanhado e tenham novamente boa sorte. Até a próxima.