Olá pessoal, tudo bem? Bem-vindos de volta à nossa jornada cloud. Vamos estar falando hoje sobre um dos serviços mais utilizados da AWS, um dos serviços mais amplamente divulgados, que é o SQS, tá? SQS, que é o Simple Queue Service, ou seja, é o serviço de mensageria em fila simples para a AWS. Então, quando eu estou pensando nesse serviço, eu estou pensando em processamento batch, eu estou pensando em processamento assíncrono. Então, o SQS é basicamente uma fila onde eu posso colocar ali qualquer conteúdo a ser transitado, posso colocar um JSON, um dado sequencial ali que pode estar trafegando para o conteúdo dessa fila. Então, primeira coisa que a gente tem que entender sobre o SQS, ele tem duas formas de fila, ou seja, ele tem dois sabores ali para a gente se servir, o SQS Default e o SQS Fifth. Vamos falar um pouquinho sobre algumas particularidades desses itens aqui. O SQS Default tem uma garantia de entrega muito grande, então mais de 99,999% de garantia de entrega, ele garante que vai te entregar a mensagem pelo menos uma vez, o SQS default. Ou seja, o que ele está te dizendo com essa informação? Ele está te dizendo, olha, eu não tenho garantia de idempotência, tá bom? Então, ele não garante que vai te entregar a mensagem apenas uma vez. A mensagem pode se repetir dentro da fila. Vantagens de uso do SGS default, throughput quase infinito. Então, eu tenho ali um volume de saída de mensagens muito grande. Ele garante minimamente uma entrega para mim, mas ele não vai garantir que essa entrega não se repita. Se eu precisar de indepotência, se eu precisar de recursos em que a mensagem não possa se duplicar dentro da fila, então eu vou para esse segundo sabor do SQS, que é o SQS FIFO. Ele tem que terminar ali com o ponto FIFO, inclusive, não só configurar ali como FIFO, ele termina também com o ponto FIFO. O que é isso? Isso aí ele invoca um protocolo que é aquele First In, first out, então o primeiro que entra é também o primeiro que sai. Ele vai ter aqui uma garantia de entrega, mesmo a garantia de entrega, ele vai ter nesse modelo um ID de desduplicação, ou seja, quando você produz a mensagem no SQS FIFO, Obrigatoriamente vai ali um ID de desduplicação Então mesmo que isso se repita lá dentro Ele nunca vai te entregar duas vezes Ele vai sempre garantir que aquela mensagem não fique se replicando Consequência disso, eu tenho um throughput muito menor Então quando eu estou falando de um SQS default, estou falando de um throughput quase infinito. Quando eu estou falando de um SQS cliff, estou falando de um throughput, se eu não me engano, na casa de 3 mil mensagens por segundo. Ainda é um volume muito alto, ainda é uma possibilidade de consumo muito grande, mas a gente tem um universo bem mais reduzido. A própria produção de mensagens nesse modelo, de consumo muito grande, mas a gente tem um universo bem mais reduzido. A própria produção de mensagens nesse modelo, ela também é um pouco mais completa, porque eu preciso passar vários itens ali para a produção da mensagem, não apenas o corpo como no SQS Default. Então, SQS Default, resumidamente para a gente, é serviço de mensagem com garantia de entrega, mas não garantia de indepotência. Serviço de SQS FIFO, ele tem uma garantia de entrega, tem indepotência, mas ele tem também um throughput menor como consequência disso, tá bom? Então, vamos falar um pouquinho de uma coisa interessante. Você deve estar falando, poxa, mas para um serviço desse modelo, para um serviço desse tipo na AWS, na Cloud, onde eu posso transitar milhões de mensagens, onde ele tem um throughput tão alto, tão grande, eu devo estar pagando muito caro por isso. Então, vamos para uma coisa muito interessante aqui dentro da SQS. Para começar, ele usa gratuitamente. Todos os clientes aqui não é de free tier. Então, todo primeiro milhão de solicitações lá no Amazon SQS é gratuito. Primeiro milhão de solicitações é gratuito. Tá bom? Vamos entender como isso funciona? O SQS, no fundo, ele não é uma fila como você está acostumado a trabalhar com o RebtemQ. Por exemplo, a AWS tem suas filas para trabalhar nesses protocolos também. Então, ele não é um JMS da vida. O SQS, no fundo, é uma API que está simulando uma fila. Ela tem, inclusive, uma URL dela igual à URL do S3. A gente vai criar isso e vai mostrar isso para você aqui dentro, tá bom? Então, ele no fundo é uma API, e como uma API ela tem um controle de entrada de itens, de saída de itens, então ela vai ser requisitada tanto para envio de itens ao SQS, como para leitura de itens ao SQS, Mas o primeiro milhão de requisições é gratuito. E aí você me fala, como que eu pago no resto? Deve ser muito caro o resto. Aí é que está. Vamos lá. Primeiro milhão de solicitação, vamos colocar aqui onde a gente está trabalhando. Nós de Travegine, é o mesmo preço. Primeiro milhão de solicitações por mês, gratuito. Primeiro milhão de solicitação da FIFO, gratuito. Fila padrão, fila FIFO. Do um milhão seguinte, então, bate um milhão de requisição na SQS. Vou começar ali um milhão e um. De um milhão a cem bilhões, eu pago quarenta centavos de dólar por milhão de requisições no SQS Default e pago 50 centavos de dólar por milhão de requisições no SQS FIFO. Então, vamos dizer que você trabalha em uma empresa que processa milhões de dados assíncronos, né? Se tem uma solução muito assíncrona. O SQS default, ele pode ser um modelo muito interessante pra você implementar desde que você não necessite da indepotência ou você controle a indepotência por aplicação, tá bom? Eu posso também lá na minha aplicação na Lambda, no meu ECS ou no meu EC2, na aplicação do meu Java que está rodando, eu posso controlar a indepotência, eu posso ver ele dar o... já gravei esse item e já não faço nada com ele, eu faço simplesmente ler e tiro da fila. Então, também pode usar assim, não é a recomendação, tá bom? Mas também é uma forma de uso. Controle de indepotência na fonte. Isso é uma forma de usar o SQS. Mas se eu quiser uma indepotência já na fonte do SQS, eu uso a FIFO. E é muito barato, pessoal, para usar o SQS. Então, vamos entender isso aqui na prática? Trazendo um pouco da prática do SQS para a gente, lembra na outra aula, no momento que a gente falou de S3, da Trigger na Lambda, no Bucket, tudo certinho? Bom, vamos mudar um pouquinho aqui agora, vamos mudar um pouquinho essa arquitetura. Agora, além de eu ter a trigger que vai na lambda, lambda, buscando no bucket, guardando no log, eu quero que ele produza, vamos lá para a nossa arquiteturinha aqui, uma mensagem, vamos lá, meu querido, eu quero que ele produza uma mensagem no SQS, tá bom? Então, vamos lá. Vamos fazer isso na prática. Então, daqui ele vai lá e vai produzir uma mensagem no nosso SQS, tá? É isso. Vamos ver o que eu tenho que fazer? Bom, a primeira coisa que a gente tem que entender é a lambda que a gente tem não tem a policy para produzir nada no nosso SQS. Mas a nossa lambda já tem uma policy. Então, vamos agregar a informação? A primeira coisa que eu tenho que fazer é o item que vai produzir mensagem, ou o item que vai ler mensagem no SQS, ele precisa ter essa permissão. Vamos lá na nossa política. A gente tem uma política aqui, que é a S3 Policy, que é o que a gente está usando lá, né? Dentro do nosso SQS, eu posso só adicionar aqui dentro, editar, adicionar um novo item aí. Acho que eu vou fazer diferente. Eu vou criar uma nova política. Eu vou criar a política aqui para o SQS e aí eu tenho que entender. Posso colocar todas as ações na fila? Posso, gente. Mas isso não é uma coisa boa, por quê? Porque lá se eu coloco todas as ações, eu posso estar pedindo para esse cara deletar uma fila. Se eu tiver um problema, se eu tiver um risco de segurança, eu posso perder itens em fila. Por que isso é importante? Porque o SQS não é só uma fila que faz aqui, pega aqui, entrega aqui. Ele tem também persistência. Então, a fila acumula mensagens se você não estiver lendo. E isso é programável. Eu posso acumular por 4 dias, posso estender isso para 10 dias. Então, se eu colocar tudo, eu posso acabar colocando em risco. programável, posso acumular por 4 dias, posso estender isso para 10 dias, entendeu? Então, se eu colocar tudo, eu posso acabar colocando em risco, mas eu preciso de algumas coisas para começar a produzir. Primeira coisa que eu preciso, eu já sei disso, tá bom? Então, eu estou passando para vocês, mas você pode dar uma pesquisada lá no SQS Policies, você procura aí no Google SQS Policies e você vai ter a descrição de cada uma tá bom então eu preciso saber ali pegar os atributos da fila e eu quero também poder enviar mensagem é só o que eu quero no momento não quero deletar fila não quero criar fila não vou receber essa mens. Nossa arquitetura prevê que se eu colocar um objeto no bucket, ele vai ler nessa lambda, vai abrir esse objeto e vai postar o conteúdo dele numa fila. Então, vamos lá. Preciso então pegar os atributos de fila e enviar mensagem. Vamos para a próxima. e enviar mensagem. Vamos para a próxima. Opa! Não esqueci aqui das ações. Ele é tudo. Ele não era o específico. Só que eu terei que especificar a fila. A gente não criou a fila ainda. Então eu vou pedir para que essa política de SQS seja para todas as filas. Vamos lá? Nome da política. SQS, ela seja para todas as filhas. Vamos lá? Nome da política. SQS. Pólice. Não vou pôr uma gravação, vou pôr aqui uma inscrição. Ele está limitado a leitura e gravação. Então, criar política. Criei. Agora, vamos lá na nossa lambda. Lembrando, aqui eu tenho apenas uma policy, não é? Eu vou adicionar, eu vou anexar a política que eu criei aqui. Pronto. Agora a minha Lambda pode tanto receber do S3 como ele pode também fazer a sua postagem no SQS objetivamente se eu quisesse ler uma mensagem eu também poderia vir aqui e incluir depois a leitura, o receive message, aqui dentro dessa pólis, tá bom? Então, hoje ele está aqui, send message, get to attribute, beleza? Então, já tenho aqui. Agora que eu já tenho isso, eu preciso criar a minha fila. Então, vamos lá. Eu posso só jogar esse que é explicar aqui dentro o meu caso já estava favorito o vinho aqui para o meu esquece então como eu tenho que fazer agora a gente é a parte mais simples criar fila você escolhe que é padrão ou FIF, no nosso caso é a padrão, ele faz a melhor ordenação possível, mas ele não garante ordem, tá bom? Por isso que ele não é uma fila ordenada, e não um FIF como essa, como uma padrão. Vou colocar aqui o nome da minha fila, a minha fila vai se chamar testeSqs. Aqui eu tenho algumas configurações, por exemplo, quanto tempo essa mensagem vai ficar visível no momento que ela estiver sendo lida. eu posso aumentar, vou deixar os 30 segundos. O que isso quer dizer, pessoal? Quer dizer que se tua aplicação estiver lendo, vamos dizer que você cria ali uma aplicaçãozinha Java ali no EC2, tá bom? Ele vai lá e pega a mensagem do SQS. Ele demorou 20 segundos para processar essa mensagem e fazer tudo o que ele tem que fazer com ela, ele vem e vai tirar essa mensagem da fila. Foi bonito. Se ele demorar mais de 30 segundos, ele demorou 31 segundos, automaticamente essa mensagem vai voltar pra fila. Tá bom? Então essa mensagem volta pra fazer esse tráfego de novo. Então atraso e atrás entrega um delay eu quero que ele já começa a produzir a entregar essa mensagem no momento que o produto chega aqui na pele que recepciona talvez eu queira tipo a partir de uma recebeu mensagem eu quero que a entrega seja depois de 5 segundos, de 10 segundos ou mais, tá bom? Aqui eu configuro o atraso de entrega. Também tem uma coisa interessante, não adianta a gente tentar colocar o mundo dentro da SQS. Ele é muito grande por mensagem, mas ele tem uma limitação, 256kb aqui por mensagem, tá bom? Então, todo o texto, todo o payload da minha mensagem não pode passar de 256kb, senão ele vai truncar, tá? E vai dar problema aqui para você. Aqui, como mesma coisa do Buckeye, não vou trabalhar ainda o SKS, o KMS, vou usar a chave padrão daqui para baixo, não vou mexer nada, é básico, não vou trabalhar com nenhuma política específica por parte da própria fila, eu também posso. também posso outra coisa interessante tá bom é a a fila morta é a bl que eu posso criar aqui dentro tá bom não vou criar ela agora porque eu não vou apontar para nenhuma delique mas o que seria isso tá pessoal é dentro da delique eu poderia por, configurar aqui dentro um padrão de reentregas. Vamos dizer que lá na tua SDK, dentro da tua aplicação, você leu a mensagem, mas poxa, deu um probleminha numa integração com algum item da sua corporação. Deu uma exceção. item da sua corporação deu uma exceção automaticamente se você estiver trabalhando com exceções ele não vai terminar o processamento ele vai encerrar esse processamento e a mensagem que acontece com ela volta pra fila com uma mensagem a gente falou tenta de novo foi uma vez duas vezes três vezes quatro vezes isso aconteceu cinco vezes por exemplo tá a partir daqui então eu falo pra ela que dentro olha não manda não tenta ter processar mais manda para uma delícia é uma outra esquece bom? É uma outra fila SQS que vai estar recebendo os itens mortos dessa fila. Neste momento ele tira dessa fila A e joga aqui para a fila B, tá bom? Então, nesse movimento do SQS, você poderia ter aí a sua aplicação lendo, por exemplo, tá? Vou dar aqui um caso de uso legal pra você pensar poderia ter uma aplicação lendo essa dl que e olha automaticamente o que está na dele que quer dizer que eu pensei cinco vezes estou falando isso como exemplo mas eu posso configurar mais vezes tentativa até que eu tentei cinco vezes processar aquela mensagem mas não aconteceu eu posso jogar uma DLQ, eu posso ter uma aplicação lendo essa DLQ e essa aplicação gerando um alarme para mim. E aí eu posso receber alguma notificação falando, olha, está com problema nessa mensagem, está com problema, esse cliente foi impactado. São coisas aqui que você pode olhar. Então, na criação do SQS, eu tenho possibilidade também de trabalhar aqui com o DLQ. Se eu habilitar, ele vai me falar qual que é a próxima fila e ele já vai falar, ó, número máximo de recebimentos. Eu posso colocar aqui entre um e mil recebimentos. Posso configurar dez tentativas, vinte tentativas, tá bom? Isso que a gente pode configurar aqui, tá? Então, vamos continuar aqui. Fila vai ser padrão, teste S, que é S, criptografia usando a padrão aqui da WS e vou criar. Usando a padrão aqui da WS e vou criar. Prontinho. Já tenho uma fila e olha aqui, pessoal. Lembra que eu falei que ele tem até uma URL? Olha aqui. Tem aqui a nossa URL, tá? Da nossa fila SQS. Vamos testar? Vamos ver se isso que a gente falou aqui vai acontecer com a gente? Bom, primeiramente, a gente precisa ir lá na nossa lambda, aquela lambda que a gente já está usando de teste, e fazer uma publicação com ela agora usando o Sqs tá vamos confirmar vamos lá na nossa role vamos ver se nossa role já está podendo enviar mensagem então eu sempre recomendo que a gente simule né vamos lá eu quero testar esses lá eu quero deixar os dois legados e eu quero uma ação de enviar mensagem posso já posso vamos ver se eu posso outra coisa? vamos ver se eu posso receber? receber eu não posso por quê? porque aqui na minha pólice eu não coloquei receber ele não vai poder receber, ele vai poder produzir então vamos lá primeira coisa que eu vou fazer é uma nova publicação de uma nova versão de Lambda aqui. Tá bom? Então, vamos fazer um upload de novo do nosso zip. Vou jogar aqui dentro, nessa Lambazinha, com um novo código. E vamos publicar. Lembrando que a configuração do S3 para cá, do bucket, permanece a mesma. A gente agregou agora a possibilidade de enviar item em fila. Tá bom? Vamos olhar lá para o nosso SQS. E vamos ver a nossa fila. Tá aqui. Zero itens disponíveis. Tá bom? Vamos agora testar. Vamos entrar aqui no nosso S3 vamos entrar no nosso bucket vamos mandar um arquivo de teste novamente carregou aqui, test.json, minha lambda deve ter processado aqui já, tá bom? Olha, algumas execuções aqui com sucesso, tá vendo? Uma última execução com sucesso, daqui a pouco ele vai atualizar aqui, vamos ver se a gente tem log disso. Vamos lá no nosso cloud watch, tá bom? Tem log disso. Vamos lá no nosso cloud watch. Primeira coisa, a gente vai no grupo de logs. Vamos para o grupo de logs da nossa Lambda. Eu mudei minha retenção aqui para baratear. Mudei a retenção para um dia. Vamos ver se ele tem aqui alguma execução. Tem essa última execução aqui, tá bom? Vamos ver? Ó, eu melhorei um pouco os logs para a gente acompanhar. Então, ó, iniciou, iniciando o processamento, Conteúdo do arquivo. Teste. Vamos ver se é isso mesmo. Baixei. Teste. Consegui abrir aqui. Conteúdo do arquivo enviado para a fila SQS. Será que foi mesmo? Vamos atualizar aqui. Estou com SQS. Opa! Uma mensagem disponível. Funcionou! Então, ele fez toda a requisição, custou aqui, fez a cobrança de memória e encerrou o meu item. Vamos ver se o que está lá na fila é o conteúdo do arquivo. Posso entrar na fila para fazer um teste, enviar ou receber mensagens. Eu quero pesquisar uma mensagem. Recebi aqui a mensagem já. Ela tem 23 bytes, um recebimento. Opa, olha aí, gente. Teste, teste, vamos ver se eu confere aqui no log. Teste, teste, um JSONzinho. Concluí. Então pessoal, conseguimos aqui fazer uma prática bem interessante que é, a partir de uma trigger dentro do S3, ele acionou a minha Lambda, a minha Lambda abriu esse arquivo, ou seja, ele veio uma trigger para a minha Lambda, a minha Lambda foi no S3, buscou o arquivo, abriu o arquivo, pegou o conteúdo desse arquivo, postou numa fila SQF. Está vendo? Então, isso aqui é um dos modos de se usar. E tudo isso, muito barato. Porque eu não atingi um milhão ainda de requisições nesse SQS. Então, eu não vou pagar. Eu não vou pagar essas requisições aqui, esses testes que a gente está fazendo. Então, aproveite aí para brincar bastante, para explorar as possibilidades, tá bom? O SQS, ele é um dos itens mais robustos da AWS, tanto quanto outros, tá bom? Ele tem garantia de entrega, ele tem dois sabores para você usar, então você vai usar ou na fila default ou na fila FIFO, da forma como você necessitar, como a tua topologia pedir, tá bom? da forma como você necessitar, como a tua topologia pedir, tá bom? E você ainda tem uma grande vantagem no uso do SQS, tá bom? Que é você poder trabalhar com reenvios de mensagem, trabalhar com mensagens em filas mortas, né? Então, as possibilidades de configurações são muito interessantes. Então, vamos lá, vamos continuar trabalhando, vamos continuar nossa jornada. Obrigado por ter acompanhado aqui. Então, mais uma vez, muito obrigado e boa sorte para você.