Olá pessoal, sejam muito bem-vindos ao nosso curso de Edge Computing. Iremos agora para o nosso laboratório. Neste laboratório aqui, nós iremos abordar o Greengrass executando um Lambda localmente. Então, vamos lá pessoal. um lambda localmente. Então vamos lá pessoal. Então vamos aqui falar um pouquinho, fazer uma introdução rápida do que é esse laboratório, o que a gente quer demonstrar nesse laboratório. Então vamos pegar aqui um case só para vocês entenderem. Então, temos aqui o nosso dispositivo Greengrass fazendo uma requisição HTPS para fazer uma chamada ali numa lambda. A lambda vai processar e vai retornar o resultado para o nosso dispositivo. Percebam que aqui é um cenário que não tem nada de novo. Aqui, basicamente, é muito comum na área de TI, a gente ter esse cenário de alguma aplicação chamando um lambda e o lambda devolvendo a sua resposta. E esse é o primeiro ponto. Não é isso que a gente quer mostrar aqui. Então, não queremos fazer com que o Greengrass faça uma chamada HTTP ou uma chamada com qualquer outro protocolo para o Lambda. E aí, o porquê disso? Porque, na verdade, se eu fizer isso no conceito aqui de Edge Computing, e aí a ideia aqui é mostrar um pouquinho mais sobre Edge Computing, isso daqui não é Edge Computing. não é que você não possa fazer mas é que a gente está focado em processamento local processamento muito mais próximo ali da da do seu cliente das fontes geradoras então vamos lá vou falar comentar o que que é o grande objetivo aqui deste laboratório. Então, na verdade é o dentro do seu Greengrass. Então, no final do dia, a gente quer rodar a Lambda localmente, porque a gente quer diminuir a nossa latência e a gente quer ganhar poder aqui de processamento, a gente quer processar dentro do nosso dispositivo Greengrass. Então, vamos lá para o nosso laboratório e aí a gente vai fazer aqui um step by step de como que a gente configura o nosso Greengrass e como que a gente roda uma lambda no nosso Greengrass. roda uma lambda no nosso Greengrass. Então, vamos lá, pessoal. Então, aqui, vamos falar um pouquinho mais sobre o nosso Lab. Então, nessa primeira fase aqui do nosso Lab, a gente vai configurar o nosso dispositivo Greengrass para que ele possa suportar o lambda. Então, iremos aqui instalar alguns pacotes algumas coisas dentro da do nosso dispositivo ali dentro da nossa máquina tá é aqui no nosso laboratório a gente vai usar o node 20 então é vocês podem estar utilizando qualquer outro tipo de linguagem tudo bem e aí alguns pontos aqui só para pincelar, né? Então, essa primeira fase aqui, quando você roda um Lambda dentro do seu dispositivo Greengrass, ele necessita você instalar aqueles pré-requisitos, né? Instalar normalmente ali, por exemplo, um Python, né? Se você for rodar um Python, se o Lambda for um Python e você quer rodar esse Python dentro do seu dispositivo Greengrass, então você necessita instalar esse runtime. Isso funciona para todas as linguagens, então quando você fala de Java é a mesma coisa, quando você fala de Node, que vai ser o nosso exemplo aqui, é a mesma coisa. Tudo bem? Então, é uma parte super importante aqui dentro do nosso processo. Então, nós vamos aqui começar a rodar aqui alguns comandos para que a gente possa instalar o nosso Node. Então, primeiramente aqui, eu vou rodar um Curr. Esse Curr, ele faz download de um script, então o script aqui é esse NodeSource Setup que basicamente o que que ele faz no final do dia aqui? Ele vai configurar os repositórios do Node, os repositórios mais atuais do Node na nossa máquina. Então vamos rodar esse script. Vamos executar aqui o nosso script e aí ele começa a fazer uma série de downloads aqui e upgrades também do nosso repositório aqui, para a gente poder instalar o Node. Então, legal. Então, aqui está finalizado, né? Então, a primeira parte aqui, ele dá até uma sugestão, né? De como que você instala aqui o Node, né? A gente vai usar um comando aqui muito similar também ao que ele está apresentando ali na nossa tela ali, né? Que está com uma cor destacada em verde né uma corzinha diferente ali tá então vamos rodar aqui o nosso comando tá então eu tô rodando esse comando primeiramente o sul da ptget update na real tô fazendo um upgrade da dos pacotes da minha da minha máquina né do meu dispositivo né e posteriormente eu estou fazendo aqui a instalação do Node para que a gente possa rodar o nosso Lambda. Então, aqui é uma parte muito importante do nosso processo aqui, da nossa configuração. E aí, vocês vão entender também, e aí eu vou puxar alguns ganchos para vocês entenderem o porquê que isso é importante e aonde isso é utilizado tá então vocês vão entender alguns pontos aqui legal então a gente já tem o nosso no dia que instalado a gente pode rodar um comando que é o node.js . Legal, estamos aqui com o Node 20 instalado. Agora nós vamos fazer também uma configuração e isso daqui, essa configuração também é super importante em todos os environments quando a gente fala de rodar a Lambda dentro do greengrass tá bom então vamos entrar aqui no diretório que barra o sr barra bim e aqui só para vocês terem uma ideia né aqui a gente tem basicamente os links né das execuções, os nossos binários. O nosso Node também está aqui, então vocês podem ver que o Node está aqui. E o Node.js também. Então, o Node e o Node.js são a mesma coisa no final do dia aqui. E ele criou aqui alguns links simbólicos para a gente poder executar aqui na nossa máquina. E aí é uma parte super importante. Então, eu vou copiar aqui um comando, onde ele vai criar um link simbólico do Node, para que a gente possa utilizá-lo na execução do Lambda. Então, percebam aqui, eu estou dando um ln menos s, então eu estou fazendo um link do Node.js para um novo nome que vai ser Node.js 20.x. Então, isso daqui é uma etapa super importante, porque o Lambda vai rodar e vai procurar esse node.js 20.x, tudo bem? Então, vou rodar aqui, vou voltar para a raiz aqui, para o vou rodar aqui um node js 20.x menos, menos version e aí percebam que eu tenho o mesmo resultado quando eu rodo o node js então legal, a gente aqui fez a nossa configuração do nosso Node, né? Então, ainda a gente precisa de alguns pré-requisitos instalados na máquina para que a gente possa rodar o Lambda, tá? Então, o que a gente vai fazer agora? entrar aqui na console da AWS e a gente vai configurar alguns pré-requisitos que o Greengrass necessita para rodar o Lambda localmente. Então, vamos lá para a console da AWS. Aqui a gente vai procurar Greengrass. green grass vou entrar aqui um detalhe importante é que você tem esse dispositivo green grass já pré-instalado já pré-configurado aqui então vocês vão ver aqui eu vou mostrar aqui na tela só para vocês verem o meu dispositivo já está aqui instalado e ele já tá como health né então eu fiz um presset up dele tá não estalei nada eu só fiz literalmente a instalação do ingresso e aí ele ele tá aqui no na para gente utilizar tudo bem bom então agora nós vamos em deployments. Então, aqui vamos clicar aqui nesse nosso deployment aqui e vamos clicar em revise. Então, vamos fazer aqui uma revisão do nosso deployment, dos nossos pacotes instalados no nosso Greengrass. Esse passo aqui também é super importante, é um pré-requisito para que a gente possa rodar a Lambda dentro da conta, dentro do nosso dispositivo Greengrass. Tudo bem? Então, vamos clicar aqui em Next. Aqui, ele, percebam, ele só está mostrando o dispositivo público, o nosso CLI, o nosso CLI, é o único componente ali instalado no nosso dispositivo. Então, vamos aqui filtrar por Lambda, e aí vamos instalar os três. Então, AWS Greengrass Lambda Manager. Então, vamos clicar ali no mais para a gente poder instalar. Vamos também utilizar o AWS Greengrass Lambda Launch. E também o AWS Greengrass Lambda Runtimes. Tudo bem? E agora a gente vai procurar por token. E também um AWS Greengrass Lambda Runtimes. Tudo bem? E agora a gente vai procurar por token. E aí nós vamos utilizar este AWS Greengrass Token Exchange Service. E aí vamos só tirar aqui o filtro e vamos clicar aqui em show only selected components. Então, aqui a gente vai ter o overview de todos os componentes que a gente selecionou que a gente quer fazer o deploy, que a gente quer publicar dentro do nosso Greengrass, tudo bem? Então, vamos clicar aqui em next. Aqui ele vai mostrar, lembrando, todas as versões que vão ser instaladas neste pacote, neste deployment. Então, vamos clicar em Next. Aqui, vamos deixar como está, como default, Next. Aqui, ele vai estar mostrando um resumo de tudo que a gente está fazendo, de tudo que a gente está fazendo deploy, pelo menos nessa etapa aqui. Legal. E vamos clicar em deploy e aí ele vai começar a instalar todos esses pré-requisitos no nosso componente ali ingress tudo bem é vamos olhar a um o se está sendo feito realmente a instalação, se ela funcionou. Então, vamos fazer um double check se a instalação realmente está funcional. Então, vamos lá. Então, a gente pode entrar aqui no nosso core device. Então, podemos clicar aqui no nosso GGLab, no nosso device. E aí, por aqui, a gente consegue ver os deployments. Então, vocês percebam que ainda o deployment está em running. Então, ele está sendo executado sendo feito deploy ali no nosso dispositivo e aí vamos dar uma olhada no nosso dispositivo bom então a gente pode entrar aqui em um diretório aqui em um diretório. Então a gente vai dar aqui um ls-ltr no diretório greengrass v2 deployments. Então percebam aqui que dentro do nosso dispositivo greengrass a gente já está aqui com o nosso deployment com sucesso. O que isso significa? Significa que o nosso pré-requisito do Lambda, os nossos componentes que são pré-requisitos para a gente rodar um Lambda, eles já estão instalados e configurados dentro do nosso device, do Greengrass. Então, nessa primeira fase aqui, a gente falou bastante das configurações do dispositivo, como que a gente configura. Então, lembrando, a gente fez aqui a instalação do nosso Node, criamos um link simbólico, porque é necessário ter esse link simbólico, quando a gente fala de lambda e nós instalamos os componentes que são do green grass que eles conseguem executar ou as nossas funções lambdas localmente no nosso dispositivo green grass tudo bem então vamos pra próxima parte Vamos para a próxima parte. Então, pessoal, agora nós vamos falar um pouquinho sobre Lambda aqui. Então, a ideia agora dessa etapa é a gente configurar um Lambda aqui na AWS, então, dentro da Cloud, tudo bem? A ideia não é a gente ter um código complexo, a ideia não é a gente ter um código longo, difícil de entender, tá bom? Então a gente vai configurar aqui algo bem simples para que vocês entendam na real o processo de como que a gente pega um Lambda e realmente rode num dispositivo Greengrass. Tudo bem? Então, esse é o nosso escopo quando a gente fala de Lambda aqui. E agora, nós vamos para a etapa de configurar este Lambda na console da AWS. Então, vamos aqui para a nossa console. Vamos procurar por lambda. E aí, vamos comentar um pouquinho aqui o que é o Lambda, só para vocês também refrescar um pouquinho a memória, para alguns que saibam o que é o Lambda, e para outros que é um assunto novo. Então, o Lambda é um serviço muito famoso da AWS. Então, às vezes, quando você fala de AWS, a grande maioria dos desenvolvedores lembram do Lambda. Então, é um serviço muito famoso, disruptivo no mercado também, quando ele lançou o conceito e a ideia. Então, o Lambda é um serviço que roda sem servidor. Então, é o chamoso de serverless. Então, ele não precisa você configurar um servidor, uma máquina ou algo do tipo para que ele possa rodar. Então, ele acaba tirando essa complexidade do desenvolvimento ali, manutenção de um código e afins, e ele começa a focar muito na questão de desenvolver o código o seu código ser executado né então ele ser executado como uma função né então o lambda então ele traz essa simplicidade de você focar mais no código você conseguir olhar ali mais para o seu desenvolvimento. Coisas que são legais nele, questão de você não precisar configurar um servidor, é algo super interessante dentro do Lambda. A questão, que eu comentei aqui bastante, você conseguir focar no seu código. E uma outra questão do Lambda que é muito interessante, que ele é pago por uso. Então, o Lambda normalmente é apresentado em arquiteturas eventuais, que significa o quê? Eu tenho que gerar um estímulo para o Lambda, em alguns casos, eu preciso gerar algum evento para que ele seja executado. Então, você literalmente paga somente quantas vezes ele for executado. Então, é um pouquinho aqui só falando uma pincelada do âmbito tudo bem mas é não é o nosso foco falar a me aprofundar aqui muito em cloud né nosso foco aqui é de compute tá então a gente tá aqui obcecado por processar as coisas cada vez mais próximo do nosso cliente cada vez mais perto das nossas fontes geradoras. Tá bom? Então, vamos lá. Vamos clicar aqui em Create a Function. Boa. Então, primeira parte aqui, vamos dar um nome para a nossa função. Tá bom? parte aqui vamos dar um nome para a nossa função tá bom então o nome da nossa função ela vai ser hello lambida iremos utilizar aqui o lambda o nosso no dia é o runtime dela vai ser o novo de ds na versão 20 pontos x e é isso aqui link um pouco com que a gente fez a configuração ali no nosso dispositivo no nosso ingresso tá bom então, aqui eu vou utilizar as configurações de full da Lambda, não vamos alterar nada aqui por hora. Então, legal. Aqui, então, nossa lambda foi criada. E aí, agora, nós vamos aqui no code. O primeiro ponto aqui, e um ponto importante para que a gente consiga rodar o nosso laboratório aqui, nós precisamos alterar aqui a nossa extensão desse index MJ, tá bom? Então, a gente vai usar aqui um arquivo JavaScript, tá? Então, também não vou comentar os detalhes, enfim, sobre essa alteração aqui mas no final do dia essa alteração ela vai vai passar a funcionar ali com as nossas pré-requisitos que a gente configurou tá bom então vamos lá então vamos vou copiar aqui um códigozinho simples e vocês vão entender aqui e eu vou explicar ele um pouco tá é um código super simples tá aonde começamos aqui utilizando uma biblioteca né então a gente vai usar as bibliotecas de gs o que que já vem dentro do node Vamos utilizar uma biblioteca aqui útil. Vamos criar aqui uma constante onde ele vai falar qual é a nossa plataforma que a gente está rodando. Então, aqui vai dar algumas informações da nossa plataforma, se é um Linux, se fosse um Windows também. E aí só vale lembrar que o Greengrass com as funções lambdas não funcionam em Windows. Então é uma pena, mas é um ponto importante a se frisar aqui. Legal, então essa aqui é a nossa constante. Aqui temos a nossa função principal, né? Por que a função principal, né? Na verdade, é o que a gente vai querer mostrar aqui na tela, né? Como que a gente vai ver o Lambda rodando no Greengrass, tá? Então, primeiramente, a gente vai dar uma mensagem aqui, um hello world Greengrass on Lambda, tá? E, posteriormente, a gente vai printar aqui a nossa plataforma. Então, tem a ver com a nossa constante. Então, ele vai fazer aqui uma verificação. Se a variável is lambda não existe, então, ele vai executar aqui um intervalo onde ele vai chamar a nossa função. Então, a cada 10 segundos, ele vai fazer uma chamada naquela nossa função ali. E, por fim, nós temos aqui o nosso handler, o nosso handler, que é para que ele possa executar a nossa função lambda. E aí ele executa também a mesma função. Então, como eu comentei, a nossa função principal está desacoplada ali. E aí eu vou explicar o porquê. Então, quando a gente fala do Greengrass, o Greengrass, no final do dia, ele roda um pouco diferente conceitualmente das funções lâmbidas. Então, vamos só entender aqui um pouquinho referente à função lambda. Então, quando a gente fala de uma função lambda, ela procura sempre um arquivo e qual é a função que ela vai executar. Nesse caso aqui, no nosso caso, e na maioria dos casos, a gente usa algumas coisas de full. Vou pegar aqui o nosso exemplo. Então, a gente está falando que a gente vai executar um index e o handler, e a função chamada handler aqui. Então, quando a gente olha aqui para o lambda, a gente vai executar essa função, ele tem uma um pouco diferente a funcionalidade dele. Ele vai rodar literalmente um script. Como a gente conhece, a gente roda aqui, codando aqui localmente, enfim, ele vai rodar o script. E aí por isso que necessita ter uma chamada fora da sua função. Então, aqui a gente fez um jeito onde essa função pode ser rodada tanto no Greengrass, que é o nosso grande objetivo, como ela pode ser rodada também como uma função Lambda. Então, a gente ganha os dois mundos, a gente pode ter essa função híbrida. Então, ela pode estar rodando aqui na cloud como um evento, como algo eventual, como ela pode estar também rodando dentro ali dos seus dispositivos Greengrass. Até um cenário que a gente pode comentar aqui é, eu sempre vou rodar essa função lambda no Greengrass, por alguma falha, por alguma indisponibilidade daquele seu Edge Compute, né, ou dos seus Edge Computes, você pode utilizar como redundância, usar a Cloud como redundância. E aí você poderia estar utilizando aqui dentro da Cloud, tá? Então, vamos clicar aqui em Deploy, né, para a gente poder salvar essa nossa alteração que a gente fez aqui, tanto no nome do arquivo quanto no código. Então, a gente vai executar essa lambda na AWS, tá? Então, eu vou pegar aqui, então, esse nome aqui dessa variável de ambiente aqui, né, is lambda. Vamos clicar aqui em configuration legal vamos aqui em environment variables então as variáveis de ambiente vamos clicar aqui em edit e aí legal aqui a gente configura as nossas variáveis de ambiente. Então, caso a sua função lambda, caso você precise de alguma variável de ambiente aqui, um exemplo, qual que é o endereço do seu database? Você pode colocar aqui qual que é o endereço de uma secret, para pegar as senhas desse seu database. Vocês podem utilizar aqui as variáveis de ambiente para fazer essas configurações, saber se essa lambda está no environment de desenvolvimento, homologação, produção e assim por diante. Então, vamos criar a nossa variável aqui. O nome dela, a nossa chave é is lambda e a gente vai colocar aqui como true. Um detalhe importante, só para vocês entenderem, esse true ou false aqui não quer dizer muita coisa. Ali a gente está olhando se ela existe. Então, se a variável já existir, ele já entende que você está rodando no lambda. Então, só para uma convenção, a gente vai colocar aqui como true. Então, vamos dar um save. E aí, vamos voltar aqui para o code. Legal, então. Então, a gente aqui configurou a nossa variável de ambiente nesse lambda aqui e agora a grande ideia aqui é a gente conseguir rodar esse lambda aqui na nossa cloud, na nossa AWS. Então, a AWS te dá o poder de você conseguir rodar esse lambda, testar esse lambda aqui na sua console. a console, tá? Um ponto importante, acho que só vale frisar, toda vez que você roda o Lambda aqui, ele considera como uma execução de Lambda, logo você está pagando, porém a AWS também tem a questão do free tier, tá? São mil Lambdas para você executar aqui dentro da AWS, você não paga nada por isso, tá bom? Então dá para você brincar bastante, testar bastante os seus códigos, o seu Lambda, tá? Então a gente vai clicar agora em teste. Legal, ele vai aparecer aqui as configurações para a gente testar. Vocês podem ter aqui diversos testes, diversas entradas, diversos tipos de teste. Então, é um pouco interessante aqui da AWS. Então, você pode ter, por exemplo, um teste que tem uma trigger que vem de um API Gateway. Você consegue configurar aqui. Você pode também ter uma trigger que vem de um SQS. É fácil configurar. Então, vamos lá. Vamos colocar aqui o nome do evento. vai ser um teste, Greengrass. Greengrass. Legal. Aqui a gente pode falar se esse é um teste privado ou um teste compartilhado, então a AWS também possibilita você compartilhar esses testes. No nosso caso aqui vai ser um teste privado, um teste local aqui para que a gente possa fazer isso. Os templates é um pouco do que eu comentei, então você pode olhar aqui um exemplo, quando você faz uma chamada no API Gateway e o API Gateway chama o nosso Lambda, o que ele retorna? Então, um exemplo, ele mostra aqui todo o evento, todo um template que o IPI Gateway devolve para o seu Lambda. E aí, como eu comentei, tem outras coisas aqui, exemplo, SNS. Então, quando um SNS manda um evento para um Lambda, está aqui as informações. Legal? Por hora aqui, a gente não vai utilizar nenhum template complexo. Por quê? A gente não tem entradas dentro do nosso teste aqui. Então, vamos basicamente passar um json vazio tá então um objeto vazio aqui e vamos clicar aqui em salvar legal e agora basta clicar aqui em teste legal então o que ele fez aqui? ele pegou então todas aquelas configurações que a gente fez no teste e literalmente aplicou, literalmente ele rodou o nosso teste e aí percebam duas coisas aqui importantes então ele dá um log para a gente também, de sucesso ou falha dá para vocês olharem o log um pouquinho mais detalhado com outras ferramentas, o CloudWatch, tá? Eu não vou entrar em detalhes aqui, mas você vai conseguir olhar com mais detalhes aquela execução, tá? Mas percebam que ele aqui segundo é as nossas informações de plataforma tá é apesar do lambda não está rodando em um servidor é um servidor que a gente configura o lambda ele sobe sim e um servidor e aws orquestra todas as questões de servidor ali e ele roda assim sim, em uma plataforma. Então, a gente consegue ver aqui que é no Linux, então, em uma versão de Linux. E ele está utilizando aqui o Amazon Linux, o próprio Linux da AWS. Então, os Lambdas rodam em Amazon Linux. E aqui a gente também tem a plataforma da x86-64. Tudo bem? a plataforma da x864. Tudo bem? Então, aqui a gente configurou a primeira parte do nosso Lambda. E aí, o que a gente precisa fazer? Então, a gente precisa clicar aqui. Então, a gente vai gerar uma versão. Então, a gente vai criar uma versão final para que a gente possa fazer deploy no nosso Greengrass. Então, vocês vão clicar aqui em Action e Publish New Version. Então, o Greengrass necessita que você crie uma versão. Ele não consegue rodar na Latest, então aqui ele comenta um pouquinho do que a lei testa né aqui a gente vai literalmente criar uma versão então a gente vai travar na pedra que aquela versão é que essa versão é a que a gente está rodando tá então vamos clicar em Publish. E aí, legal. Então, ele criou aqui a nossa versão 1. Quando a gente fala de versão também, dentro do Lambda, diferente do Alias, a versão é imutável. O que significa isso? A versão 1 vai ser sempre essa versão 1, você nunca mais consegue alterar. Isso é um bom ponto. Então, aqui também traz um pouquinho de governança dentro do Lambda, e para você ter um controle de versão, enfim, é uma boa estratégia de versionamento para Lambdas.