Então, galera, agora nós vamos para a nossa cereja do bolo aqui. Então, vamos aqui, vamos entrar no nosso Greengrass. Então, vamos pesquisar aqui. Greengrass. Legal. nós vamos entrar no menu de componentes, então nós vamos criar um novo componente aqui, e aí vamos clicar em create component. Agora nós vamos transformar nossa Lambda em um componente. Nós vamos pegar a Lambda que a gente criou ali, que a gente fez toda aquela configuração, e a gente vai trazê-la para dentro aqui do nosso Greengrass, dos componentes do Greengrass. Vamos clicar aqui em Import Lambda Function. Legal. E aí aqui, a primeira coisa que ele mostra, ele vai mostrar aqui uma lista de lambdas que você tem na conta. Então, no nosso caso aqui, no nosso lab, eu tenho uma única lambda na conta. Então, ele já veio selecionado a a lamb daqui que o que eu tenho na minha conta tá então vamos ao hello world lambda segunda parte a parte que eu comentei que é super importante é um componente lambda no green grass ele precisa saber qual é a versão da sua lambda. E aí, aqui você também pode selecionar a versão que você desejar. No meu caso aqui, novamente, como só tem uma versão desse lambda, a gente vai utilizar aqui a versão 1. Legal. E aí, tem uma coisa interessante. O nome do componente é algo opcional isso, mas o nome do component não necessariamente precisa ser o mesmo nome da lambda, tudo bem? Então você pode criar padrões de nomes de component diferentes dos nomes das functions. E aí eu vou colocar aqui um nome que vai ser com ponto example ponto lambda. Boa. Outra boa prática é versionem os seus componentes né então é uma boa prática né você versionar para você saber qual componente está instalado no seu dispositivo é talvez algum componente que tem algum bug então importante você versionar então vou colocar uma versão aqui, 1.0.0. Legal. Aqui nessa outra parte, eu vou mostrar para vocês, mas a gente não vai configurar nada, tá? Aqui a gente vai usar as configurações default, mas só para dar uma pincelada e para vocês verem o poder do que a gente pode configurar aqui dentro do nosso component Greengrass com Lambda. Então, a gente pode configurar eventos onde você recebe eventos do seu Greengrass através de MQTT e ele execute a sua Lambda. Então, como eu comentei, a Lambda tem muito conceito de ser executado eventualmente, como uma função. Então, ela executa, acaba, executa, acaba. Então, essa parte aqui de eventos você pode configurar para que a sua Lambda seja estimulada como um evento. Essa parte aqui, Pined, basicamente você fala se sua Lambda é uma Long Running ou se ela é uma Lambda que ela é executada conforme algum estímulo, né? Então, ela vai executar conforme alguma Trigger, algum evento. Aqui a gente também tem o Timeout, então a gente pode falar o quanto tempo que essa lambda pode ser executada. Exemplo, se você tiver algum problema na sua lógica e a lambda fique presa por algum motivo em um looping eterno, isso daqui vai te ajudar a parar de executar a sua lambda. Então, ela vai ter um timeout e ela vai encerrar. Por default, aqui é 3 segundos. Não vou mudar. A nossa função por default aqui é 3 segundos, não vou mudar, a nossa função consegue rodar em 3 segundos. Vou clicar aqui em parâmetros adicionais, aqui também a gente tem uma série de outras configurações de times, eu vou pular aqui um pouquinho sobre essas configurações, pular aqui um pouquinho sobre essas configurações. Vou pular aqui para a parte dos tipos de invocação, dos tipos de input que ela pode receber uma Lambda. Então, ela pode receber JSON ou binário. Então, ela aceita os dois tipos de input para que você estimule sua Lambda. Aqui a gente pode colocar as plataformas que esse componente pode rodar, esse componente aqui, Greengrass, ele pode rodar, tudo bem. Então, a Lambda não pode rodar em Windows, então esse é um ponto importante. Por default, se você tentar rodar essa lâmina no windows não vai funcionar tá aqui eu não vou fazer também uma configuração então aqui eu vou tô falando que eu vou suportar todos os sistemas operacionais e arquiteturas está porém lambda tem esse ponto do do windows pisando novamente aqui tá eu posso falar as dependências dessa lambda tá então eu posso colocar que essa lambda tenha dependências de outros componentes, quando a gente olha aqui. A gente pode colocar os argumentos de entrada para essa execução, então quais são os argumentos que eu preciso de entrada aqui para que a nossa função lambda rode. E por fim aqui, e eu acho que vale conectar, então quando a gente configurou a variável de ambiente is lambda, a gente também pode configurar aqui no nosso componente uma variável de ambiente default. Então a gente poderia colocar aquela variável do is lambda aqui, ou qualquer outra variável que você precisar. Então, só para puxar esse gancho e para vocês entenderem que... Como que eu coloco variáveis de ambiente? Você colocou lá no lambda ali na console, mas como que eu faço aqui para um component? O lambda também compartilha as variáveis de ambiente da máquina que você está rodando, isso vale comentar também, tá? Mas se você quiser algo mais próximo ali do seu componente, né? A variável que aí a gente chega aqui numa outra etapa que a gente fala como que ele vai rodar, como que ele vai ser, como que essa lambda, como que ela roda, né? Existem duas possibilidades. A primeira possibilidade que é a recomendada, né? Que é a Greengrass Container, que basicamente ela é como se fosse um docker, né? Então, é um container como se fosse um docker né então é um contender não é um docker tá pessoal mas ela é um contender que ela o Greengrass vai subir e ele vai isolar o seu dispositivo né então ele vai isolar execução ali do Lambda vai dar uma protegida ali e ele vai executar a Lambda naquele contender tá qual que é a vantagem disso? Segurança, maior segurança. Então, se você tem vários componentes, eles não vão compartilhar as configurações deles, não vão compartilhar as configurações da máquina. Outra coisa que é importante, quando a gente fala do Greengrass Contender, você consegue limitar a questão de CPU. Então, você consegue falar assim, de memória, CPU, quanto que eu posso rodar dentro desse meu componente? Para que ele, por exemplo, não cause um problema, um out of memory na sua máquina e ela fique reiniciando o seu dispositivo. Então, é uma boa configuração utilizar o Greengrass Contender. Porém, também existe o NoContender. O NoContender, basicamente, ele vai rodar no seu dispositivo Greengrass. Então, significa o quê? Ele não vai criar essa camada, esse Contender, né? Então, essa camada de isolação. E ele vai rodar no seu dispositivo local ali mesmo, tá? No nosso caso aqui, vamos utilizar um pouquinho das boas práticas. Então, a gente vai utilizar o Greengrass Contender. Vou utilizar aqui as configurações default dele, então a questão da memória. Então, você está aqui em 16 MB, dá para rodar o suficiente o nosso case aqui. mega, dá para rodar suficiente o nosso case aqui aqui a gente pode falar se ele consegue ler alguns diretórios, você pode colocar que sim ou não aqui a gente não precisa, então no false, você consegue montar volumes físicos, então esses volumes que eles vão te auxiliar, talvez a processar um arquivo e você colocar aqui dentro do seu Greengrass. Aqui também você pode escolher os seus dispositivos. Então, você poderia aqui fixar algum dispositivo, algum path dentro do seu dispositivo. Tudo bem. Também não vamos utilizar. E vamos clicar aqui em Create Component. Legal, então criamos aqui o nosso componente a partir da nossa função lambda. E aí agora eu vou dar uma pincelada para a gente conectar lá com o nosso começo ali, quando a gente configurou o node, quando a gente fez as configurações do node. Então, quando a gente desce aqui no nosso componente, ele mostra uma série de configurações. Por mais que a gente não colocou as dependências do lambda, ele sabe que é um lambda e a gente não colocou as dependências do lambda ele sabe que é um anda e ele fala aqui quais são as dependências que ele precisa ter para rodar esse componente dentro do do Green grass tá então ele já coloca aqui também as dependências tá E aí o ponto importante a gente e fez um link simbólico do Node né Então, percebam que dentro dos comandos, quando ele sobe o contender lambda no Greengrass, ele executa o comando Node.js 20.x. Por isso que a gente fez aquele link simbólico. E é necessário para que a gente possa rodar o nosso component. Se a gente fizesse um outro Lambda, exemplo Python, usando Python 3.12, ele teria que fazer a mesma configuração aqui, caso não tenha na instalação. Então, pessoal, sempre se atentem a essa variável aqui, AWS Greengrass Lambda Exec Args. Aqui você vai ver como que o Greengrass executa o Lambda. E é importante, então, esse ponto aqui, que nem eu comentei aqui do Node. Tudo bem? Então, agora a gente vai fazer a parte que é, literalmente, a gente vai pegar esse componente que a gente criou, todas essas configurações, tudo que a gente já fez, e a gente vai aplicar este componente dentro do nosso do nosso greengrass o nosso dispositivo greengrass tá bom então a gente pode entrar aqui no nosso componente mesmo né então a gente pode subir aqui a gente pode selecionar o componente então com exemplo. Lambda. Hello World e a gente pode clicar aqui no nosso deploy. Legal? Então, aqui vai aparecer os nossos deployments. Lembrando, poderia ser um grupo de devices, né? Como a gente tem um único deployment e um único dispositivo. Então, vamos selecionar aqui o deployment for GGLab. Clicar em next. Legal? Aqui a gente vai em next novamente. e aí aqui, percebam, no my components, nosso componente está selecionado aqui, tá? Então, o nosso lambda component já está aqui para a gente poder instalar, e lembrando que é super importante a gente ter os componentes públicos que são pré-requisitos. Então, Lambda Launch, Lambda Manager, Lambda Runtimes e o Token Exchange Service. Vamos clicar em Next. Aqui a gente tem a oportunidade de configurar os nossos componentes. Eu vou mostrar aqui também a nível de curiosidade, eu não vou alterar nada aqui, mas vamos lá. Então, eu vou selecionar aqui o nosso componente lambda, vou dar um Configure Component, e aí de novo, percebam, vocês conseguem configurar toda essa parte aqui que tem a ver como é o mode, como que ele vai rodar esse componente dentro do Greengrass. Aqui a gente está falando de Contender, então a gente vai usar o Contender Greengrass para rodar ele e uma série de outras configurações. Então, para cada deployment a gente pode customizar essas variáveis, porém, quando a gente cria o compon component ele já vem com algumas variáveis default. E basicamente é isso. Aqui também vocês podem configurar as variáveis de ambiente. Então, quero configurar a variável isLambdaTrue aqui. Vocês podem fazer também. Porém, lembrando que ele, Greengrass, ele não roda igual o Lambda, tá? Então, se vocês colocarem isLambdaTrue aqui, ele não vai conseguir rodar aqui no nosso caso, tá? E aí eu vou colocar aqui em cancelar, então não vou fazer nenhuma alteração. Eu vou clicar aqui em next, next novamente e eu vou clicar em deploy. Boa, legal. Vamos conferir se está rodando o nosso deploy aqui. Então, vamos core devices, vamos no nosso gglab aqui, vamos clicar em deploy, e a gente percebe que ele está rodando aqui o nosso deploy que a gente está executando. Então, vamos voltar aqui nos components, e aí só para vocês verem que o nosso component aqui, o Lambda está aqui, então com a versão dele aqui, ele está executando, a gente volta aqui no deployment, ele está falando que o nosso deployment foi realizado com sucesso, vamos conferir agora aqui no nosso device, então no nosso device é de compute, vamos lá, no nosso device né então no nosso device é de Compute vamos lá bom então a gente pode aqui não clica aqui então a gente pode entrar aqui primeiro vamos validar se realmente o nosso depoimento funcionou então a gente entra aqui no diretório a gente pode perceber que ele deu sucesso, né? E aí se a gente olhar ali com o nosso TICT, o nosso Deployment ID, é igual ao que está sendo apresentado aqui no nosso device, tá? E agora a gente vai conferir, literalmente, o nosso Lambda rodando no nosso dispositivo Greengrass, tá? Então a gente pode olhar os logs, é uma boa fonte ali de informações né do nosso componente para para gente ver se aquele componente ali ele tá sendo executado corretamente e a gente vai ver aquele Sprint ali que nem a gente comentou anteriormente, apresentando na tela, tá? Então, a gente vai dar aqui um tail, um tail, tail menos f, no nosso diretório aqui do nosso componente, tá? Então, vou dar. E aí, legal. Então, percebam aqui, ele já printou as nossas variáveis ali, ele já printou o que a gente colocou ali no nosso código. E um detalhe super importante, né? Este component, ele está executando aqui, ó, várias vezes. Então, aquele intervalo que foi configurado, o component, ele está executando várias vezes, tá? Então, ele está fazendo várias execuções aqui do lambda para que a gente então esse daqui é um lambda long running então ele é chamado de long running porque ele vai precisar executar sempre alguma coisa e aí ele tem alguns contextos então o lambda não é totalmente long running existem as estratégias, as mesmas estratégias que você usa para uma estratégia de um Lambda com long-running na AWS, podem ser utilizadas aqui, a questão do contexto e algumas outras coisas, vocês podem olhar a documentação, porém aqui ele está executando a cada 10 segundos, ele está reexecutando o nosso Lambda, então a cada 10 segundos reexecutando o nosso Lambda. executando o nosso lambda. Então, a cada 10 segundos, executando o nosso lambda. Ponto importante, por mais que o lambda esteja executando no nosso Edge Computing, então a gente está trazendo toda a inteligência da AWS para o nosso Edge Computing, a AWS cobra por essa execução do lambda. A cobrança é igual ao lambda, não é diferente. Então, você tem uns 1 milhão ali para executar. Você pode executar aqui, tanto aqui quanto na cloud. Então, ele vai compartilhar esse cálculo de quantidade de execuções. E aí, só para também como vocês podem desligar então componente ali então eu vou mostrar aqui pra vocês para que esse ano daqui não fique executando eternamente vocês tenham que pagar alguma coisa ou até mesmo é perder o seu free tire ali pra poder testar alguma outra coisa, enfim, tá? Então, vamos lá. Um comando super simples. Então, a gente vai usar o C-A-L-I do Greengrass para isso, tá? Então, a gente vai entrar aqui, né? Usar o C-A-L-I que fica no barra Greengrass, barra V2, barra BIM, barra Greengrass, traço CLi, espaço component, espaço stop, espaço menos n e o nome do component com example lambda hello world. Então, vou rodar aqui. E aí ele vai dar um stop no nosso component. Como que eu confiro se ele fez realmente esse stop? A gente pode voltar ali nos logs do component, e aí vocês vão perceber aqui que ele falou que esse componente aqui está parado. Então, esse componente aqui não está mais executando. Tudo bem? Então, aqui basicamente, este é o nosso lab, né? Então, um pouquinho aqui do nosso lab, né? Tudo que a gente fez. E aí, nós vamos aí falar um pouquinho da revisão deste laboratório. Então, pessoal, finalizamos aqui o nosso laboratório. Agora vamos para uma parte que a gente vai fazer uma revisão de tudo que a gente passou dentro aqui do nosso laboratório. Tudo bem? Então, na primeira parte aqui, nós fizemos a configuração do nosso dispositivo Greengrass para poder executar o Lambda. Então, só para recapitular, configuramos o Node na máquina, configuramos o link simbólico naquela máquina, instalamos os componentes do Greengrass que são necessários para rodar Lambda em um dispositivo. Nós criamos aqui uma função Lambda. Comentamos também um pouquinho sobre o que é uma função lambda, algumas características da função lambda. Um ponto importante, a gente também fez um código que pode ser utilizado tanto na cloud quanto no Greengrass. quanto no Greengrass. Aí aqui a gente brincou um pouquinho na Cloud, né? Apesar de não ser o contexto a Cloud, a gente está falando aqui de Edge Computing, a gente mostrou também como que a gente consegue rodar esse Lambda ali na Cloud, como que a gente executa e como que o nosso código consegue executar na cloud e no Greengrass. E aí, nesta outra etapa, nós configuramos o lambda para ele gerar um componente no Greengrass. Então, o que significa isso? A gente pegou aquele lambda que a gente fez na cloud, configurou na cloud, isso, a gente pegou aquele lambda que a gente fez na cloud, configurou na cloud e a gente fez com que ele virasse um componente do Greengrass, para que a gente pudesse disponibilizar este lambda nos nossos dispositivos. E aí, com este componente feito, com este componente preparado, a gente fez o deploy. Então, a gente pegou este componente e colocou no nosso dispositivo Greengrass para que ele executasse o Lambda dentro de um componente Greengrass. Conseguimos também validar esse lambda rodando, então ele rodou aqui a cada 10 segundos, printando várias vezes várias mensagens ali, então a gente vê que ele é um lambda long run, então ele executa várias vezes, ele não tem uma trigger de execução. E por fim, a gente parou esse Lambda que estava no dispositivo Greengrass para não gerar custo, para ele ficar paradinho ali, para a gente executar o nosso lab. Pegando todo esse review aqui, todos esses conceitos, o que eu quero frisar aqui para vocês nesse laboratório, só para vocês entenderem. Então, a gente tirou um poder de processamento ali da cloud, onde estava um pouco longe de nós. Lembrando, esse laboratório aqui a gente rodou todo em Virgínia. Então, imagina que a gente rodou esse Lambda lá em Virgínia, quando a gente rodou o Lambda em cloud. E a gente trouxe esse poder de processamento para próximo das fontes geradoras. Eu trouxe esse poder de processamento literalmente para o nosso dispositivo ali que está gerando a informação. Então, a gente literalmente aqui mostra o conceito de Edge Computing. Então, a gente estava rodando em Virgínia e fazendo esse laboratório aqui, a gente está rodando ele local, ele está rodando no dispositivo aqui, é de computing, então a gente trouxe a Lambda para rodar aqui. Então, não percam esse conceito que é, precisamos sempre pensar em executar as coisas mais rápido, precisamos processar mais rápido, armazenar mais rápido, ter menos latência. Então, é uma boa pedida você sempre trazer esse processamento para dentro do seu dispositivo. E é um pouquinho do que a gente fez nesse laboratório. you you you you you you you you you you you you you you you you you you you you you you you you you you you