Olá pessoal tudo bem? Bem vindo de volta a nossa Jornada Cloud. Vamos falar agora sobre um dos serviços de armazenamento mais populares da AWS. Estou falando aqui do DynamoDB. O que é o DynamoDB? Ele é um banco baseado em tabelas. Então, a primeira coisa que a gente tem que entender é que ele é um banco baseado em tabelas e ele é um banco sem servidor. Ou seja, eu não tenho que, dentro do DynamoDB, instanciar uma máquina, instalar o DynamoDB. Não, ele é totalmente serverless. Ele está na prateleira da AWS, tal qual o SQS está, SNS está e outros serviços ali. Eu preciso apenas criar os itens que eu preciso de uso, as minhas tabelas. Outra coisa importante a ressaltar é que o DynamoDB não é um banco relacional, ele é um no-cycle. Então ele é um banco baseado em tabelas. no CICOL. Então ele é um banco baseado em tabelas, ele não é um banco que tenha ali uma instanciação de máquina, então ele é mais um dos produtos de prateleira da AWS que a gente pode usar. Uma coisa importante também é ressaltar que sobre o daelamdb é que ele é um banco de baixíssima latência e tem capacidade de resposta nos seus milissegundos né e ele é um banco baseado em chave valor então como ele não é um banco é relacional ele tem ali o seu armazenamento através de chaves e valores bom e ele tem o seu armazenamento em ssd por isso que ele é muito rápido bom então uma coisa também interessante sobre o da e não devia que ele sempre está pelo menos em três data center está então vamos voltar aqui para relacionar as coisas. DynamoDB, banco no SQL, sem servidor, baseado em tabelas, com armazenamento de chave e valor. Então, se eu fosse resumir, o DynamoDB é isso. Mas tem algumas particularidades que a gente precisa entender. Primeiro, que existem duas formas de leitura no DynamoDB. A gente vai falar de Consistent Read e Strongly Consistent Read. Tá bom? Então, vamos lá. Consistent Read e Strongly Consistent Read. Imagina que você tem aí uma aplicação que ela lê e ela escreve o atributo e depois ela já precisa ler o atributo. Se esse valor, se essa leitura, se o tempo dessa resposta puder ser maior que um segundo, ele vai cair ali no constant read. Você vai configurar para que ele caia no constant read. no Constant Read, você vai configurar para que ele caia no Constant Read, se não, se ele tiver que ser bem menos que isso aí na casa dos milissegundos também, ele vai cair, você vai trazer ele no Strongly Constant Read, para ele trabalhar menor que um micro-skid, ali na casa dos milissegundos, melhor dizer. Então, como que ele se diferencia de um banco que você já deve estar acostumado? Você trabalhando ali em um modelo relacional, você vai ter ali o que? Colunas e linhas. O Dynamo tem uma similaridade a isso, só que com uma nomenclatura um pouco diferente. Como ele trabalha com chave e valor, ele tem um pouco de distância desse modelo relacional e ele trabalha mesmo com outras nomenclaturas. Então, no Dynamo eu não falo de linhas. Eu falo de itens. Então, eu crio uma tabela e uma tabela tem itens. Lá no Dynamo, eu não falo de colunas. Lá eu falo de atributos. Não, eu tenho itens e atributos. Então, se eu fosse fazer um paralelo, eu falaria assim. Olha, itens estão mais ligados a linhas, é a sequência que eu estou vindo dos itens. E os atributos são as colunas dessa tabela. Então, vamos lá. Eu tenho um atributo id, eu tenho um atributo nome, eu tenho um atributo data de nascimento. nome eu tenho um atributo data de nascimento essas seriam as colunas que eu tenho dentro dessa tabela numa matriz xy e os itens seriam as linhas dessas colunas tá então o key ele é o título que ele trabalha com key value key é o título da coluna é o que eu dou, e o value é o valor que vai estar nele ali, dentro dessa matriz de entendimento. Então, DynamoDB, um banco em tabelas, totalmente gerenciado pela AWS, e é um banco que a gente pode fazer uso dele como qualquer item de prateleira. Eu não tenho uma instanciação muito... Não tenho uma instanciação difícil para o uso dele. Então, uma outra coisa interessante sobre o Dynamo é que ele também tem a capacidade de armazenar arquivos. Então, eu posso pegar um arquivo e fazer um armazenamento dentro do Dynamo dos valores desse arquivo e hoje ele trabalha com três tipos de armazenamento de arquivos, JSON, HTML e XML. Uma outra parte interessante para se falar sobre o Dynamo é que ele tem sim chaves primáriasárias embora ele não tenha relacionamento ele não é um banco focado no relacionamento mas ele tem as suas chaves primárias tá bom então ele tem ele só chama isso de forma diferente ele chama de partition key e ele também tem a possibilidade de trabalhar chaves compostas ele também chama isso de Composition Key então se eu fosse falar ali a minha Partition Key ele é a minha chave primária e se eu quiser fazer uma chave composta eu vou criar ali uma Composition Key né E ela vai ser uma chave de ordenação ali pra que a gente possa estar trazendo os nossos itens no Dynamo, ok? Tem uma coisa muito importante pra se falar sobre DynamoDB. Questão de preço, tá? Então, eu tenho duas formas aqui de trabalhar. Preço sobre demanda e capacidade provisionada bom ele é um pouquinho difícil de calcular preço ele não tem ali um prefeito tem aí o free tire ele tem sempre de fogo nos ver dele né tem alguma algumas coisas aí que vai ser gratuita nele algum nível de armazenamento, mas no geral ele é um item que é um pouquinho difícil de calcular. Então, se você for calcular no Dynamo quanto que isso vai te custar, eu te indico que você use aqui o calculator.ws, certo? Calculator.ws. Cria aqui uma estimativa. Escolhe aí a região que você vai estar. Escolhe o serviço aí do Dynamo. Tá bom? E aí você vai ter aí as formas que você tem para uso do Dynamo. O Dynamo, eu posso ter um cache interno dele, que eu acho que é o DAX, tá bom? Posso colocar ali um acelerador. Eu posso ter um Dynam interno dele, que eu acho que é o DAX, tá bom? Posso colocar ali um acelerador. Eu posso ter um Dynamo Streams, o que é isso aí? O Dynamo, ele para leitura, quando eu preciso fazer um scan na tabela, ele é um item um pouco mais caro, tá? Porque ele é um serviço retorno gerenciado pela AWS e tudo mais. Então, ele é um serviço caro, né? Então, não caro quanto você ter que gerenciar uma coisa, obviamente, mas se eu estou fazendo isso em larga escala e sob demanda, ele pode ser um serviço que vai encarecer sim a minha operação, tá bom? O que acontece? Eu posso, em vez de fazer um scan, eu posso usar um DynamoStreams, por exemplo. Se eu tiver a necessidade de transformar, de repassar esse dado para algum outro item, eu posso usar a minha aplicação para fazer a leitura, a gravação desse item e usar o próprio Dynamo para fazer a distribuição desse item. Nós, inclusive, vamos estar fazendo algum teste sobre isso depois, ok? Então, vamos pensar que eu quero um Dynamo sob demanda, tá bom? A classe da tabela aqui não vai ser de acesso infrequente, eu vou usar ela como padrão. Tamanho do armazenamento em giga, eu vou falar que eu tenho 10 gigas aí, tá bom? 10 gigas aí tá bom a 10 dias tamanho médio do item em um cabaixo mesmo vou falar que eu tenho aqui 10 kb só porque é uma coisinha simples pra gente e aí gravação tipo de transação 100% gravações transacionais número de gravações colocar aqui que eu vou ter por milhões. Eu posso ter a unidade aqui. Então, eu posso falar que é por mês, por segundo, por minuto, por hora, por dia. Por isso que ele é um pouco complexo de calcular, porque eu te indico realmente usar aqui. Vou dizer que eu vou gravar 1 milhão, por exemplo. E a leitura? Eu vou dizer que eu também vou gravar ou ler 1 milhão. Esse Dynamo vai me custar 38 centavos de dólar, tá bom? Porque aqui ele está explicando, é um cálculo bem complexo dele, mas ele está explicando um cálculo bem complexo dele explicando conforme o aumentando isso por exemplo ele tem esse número 25 gigas de armazenamento então vamos dizer que eu quero 60 gb inicialmente que meu preço aumentou porque eu não tenho tamanho de dado o número de requisições suficientes. Mas é bem disso, tá bom? Se eu aumentar aqui o tamanho, fui para 100kB por item, tá? Já subiu. Meu custo mensal foi para 3 dólares agora, na mesma requisição. Então, se você quer ter um cálculo mais preciso do uso do DynamoDB, te recomendo usar aqui a estimativa da AWS, que ela vai te ajudar a se aproximar bem mais. Diferente dos outros serviços que tem aí um padrão mais claro de cobrança, não mais claro, mas eu digo mais fixo de cobrança, o Dynamo é um item muito sobre demanda, é um banco totalmente gerenciado, disponível ali em pelo menos 3 datacenters, tem uma garantia de entrega muito grande, então faz sentido que a gente use o calculator, ok? Bom, vamos testar isso aqui? bom vamos testar isso aqui a gente já tinha feito aqui a internet o nosso gateway chamando aqui uma lâmpada correto eu vou colocar meu dynamo aqui um dynamo db vou jogar aqui um dynamo db e eu quero que seja a mesma coisa, eu quero uma API gravando, lendo, atualizando itens do DynamoDB. Vou ter aqui a internet chamando meu API Gate que está integrado ao meu Lambda e vai estar aqui chamando o nosso Dynamo numa tabela. Bom, então como que eu faço isso? Primeira coisa, DynamoDB, o meu já está aqui no favorito, vou entrar dentro dele, vou nome da tabela, vou chamar de customer, chave da partição id, vou chamar de id aqui, a chave da partição, ele é string, a chave de classificação ali, que era para a gente fazer a composite ou alguma coisa, eu não vou trabalhar nisso, vou usar configuração padrão, vou por nenhuma tag eu poderia colocar tags aqui pra poder olhar o custo disso mais próximo e tal né mas não vou usar poderia usar aqui configurações personalizadas para usar o acesso infrequente sob demanda provisionada capacidade de leitura, auto-screen, capacidade de gravação, tem muitas coisas aqui. Eu poderia também colocar um KMS nesse Dynamo, então ele é bem interessante, mas eu vou usar a configuração padrão. Então, proteção contra exclusão desativado, você pode ativar também capacidade de leitura, capacidade de gravação, vou usar as configurações padrão da AWS. Vou criar a minha tabela. Pode demorar alguns minutos para a criação dessa tabela, ela não é uma criação automática, porque ele é um item que está sendo provisionado dentro da InfraWS para você. São várias coisas atreladas, não é como uma marcação de objetos, como um bucket 3, não é simplesmente uma fila como a SQS, né? Ele é um item que você está colocando aqui, então ele cria, mas já criou aqui a nossa tabela esse é o primeiro ponto, tá bom? segundo ponto, eu preciso que minha Lambda possa conversar com essa tabela então, o que eu tenho que fazer quando eu tenho um recurso na AWS que precisa fazer determinado acesso mas ele ainda não tem esse acesso. Eu vou lá na minha Lambda, pego a Role que ela tem e vou olhar lá se ela tem acesso a Dynamo. Hoje ela fala com S3, SNS, SQS, que são as features que a gente estava testando. Ele não tem aqui,, vou criar uma política. Vou criar uma política. Daí na mão. Daí na mão do bebê. Eu quero que ele possa listar algumas coisas não, não vou precisar disso mas de leitura eu vou vou precisar na parte de leitura do meu dialogue que ele tenha alguns algumas permissões então, vou colocar aqui getItem getItem vou falar que ele pode descobrir uma tabela, não seria muito necessário, quero Carry, CarryScan, vamos ver se eu tenho mais alguma coisa que eu preciso aqui de GetItem, não acredito que não. Gravação, vou precisar que ele delete o item, vou falar que ele pode atualizar o item, vamos ver mais, vou falar que ele pode fazer um put item que é para criar, tá bom? Então eu posso deletar, atualizar, posso criar, não vou mexer com os outros itens de tabela não vou precisar desses outros itens aqui marcação não vou fazer nenhuma marcação, permissão apenas esses itens aqui mesmo vou colocar que é pra tudo, poderia especificar uma tabela, mas vou colocar que é pra tudo poderia especificar uma tabela mas o próximo nome da emana o pólo minha política, agora eu vou lá para a minha função e vou associar ela aqui na minha função adicionar permissões, anexar ela e pronto, a partir deste momento ele já pode fazer tudo que eu queria aqui dentro da minha lambda com a integração do dynamo ok segunda coisa que eu vou ter que fazer aqui agora é ir lá no meu apgatway tá e começar a criar minhas rotas então vou vou criar algumas rotas aqui dentro. Vamos lá. Eu já tenho um get, ok? Mas eu vou criar um novo recurso no caminho do recurso customer não, não é um recurso, o recurso já está criado, eu vou criar apenas métodos eu tenho um get, eu vou criar aqui um método, é isso mesmo então eu vou precisar criar novos métodos dentro deste item x vamos lá então eu tenho aqui o recurso já tenho o custom aqui vamos criar um método vou falar que ele é um post para eu poder criar não vou criar ainda parâmetros de string, solicitação, nenhuma autorização, vou apenas criar um método post aqui para minha lambda testgate ok, integração via proxy criei o meu método aqui ok o que mais eu vou fazer aqui? Vamos ver se eu já consigo testar essa gravação. Vamos lá. Cabeçalho, corpo da solicitação, vou colocar aqui como name e vou colocar a minha dada. Vamos criar, vamos testar. Hum, rota não implementada. Por quê? Eu ainda não atualizei meu código. Eu atualizei a lambda, eu trouxe a policy da lambda, eu criei a rota aqui, ainda não a publiquei, mas eu ainda não atualizei meu código. Eu atualizei a Lambda. Eu trouxe a policy da Lambda. Eu criei a rota aqui. Ainda não a publiquei. Mas eu ainda não coloquei o meu código atualizado. Para que eu pudesse fazer essa criação de item. Então eu vou vir aqui dentro. Vou publicar uma nova versão que eu já escrevi aqui. Para esse item. Então vou fazer aqui, deploy esse novo código. Olha aí. Agora, o código já está lá dentro. Vamos dar uma olhadinha agora, se eu consigo fazer o teste. Vamos testar de novo. Vamos testar. Name, name, name, name, cache, opa, criou, aqui, ó, um id aleatório, com o nome eminadab, vamos ver se criou lá a minha base de dados na minha tabela, tenho aqui no meu dyno, explorar item, escolho a tabela, vou dar um, opa, olha aqui, criou, agora então o que acontece, eu já tenho minha Lambda funcionando Ela já está integrada ao meu Dynamo Ela já sabe falar com essa tabela Eu já tenho uma rota no meu gateway Que está feita aqui, mas ainda não está implantada Vou colocar isso agora para a internet E aí a rota, eu não pus validação de corpo Eu não pus outros tipos de validação de corpo, eu não pus outros tipos de validação. Vou apenas implantar a PEI aqui em breve. E implantei. Bom, vamos testar isso aqui? Vamos pegar aqui um sitezinho. Quem está aí na sua casa, você usa postman, você usa insônia, tá? Você pode estar testando a partir disso, tá bom? Se não, você pode simplesmente estar vindo aqui, você pode usar o 24x7 REST Tester API, tá? Vamos só chamar a nossa aplicação, vamos voltar aqui, vamos só chamar nossa aplicação vamos voltar aqui vamos chamar nossa aplicação vamos lá customer get copiar aqui vamos só chamar vamos ver se ele já está trazendo aquele nomezinho que a gente colocou lá aquele item que a gente criou opaa, trouxe aqui, vamos dar uma olhadinha aqui, response body, abri aqui, olha aí, eu não formatei, eu estou trazendo integralmente o que está vindo do Dynamo, não fiz ali uma formatação para item, mas você consegue identificar aqui, a chave, o id, o tipo string, você consegue identificar aqui a chave id do DeepStream, a key name do DeepStream com a minha data. Vamos ver se o post também funciona? Então a gente vem aqui, vamos dar para post. JSON. Vamos dar uma formatadinha. Name. vou mostrar uma formatadinha, nem, vou colocar aqui, vamos fazer um gerador de nomes, para garantir, gerador de nomes, aqui no for devs, vamos gerar um nome aleatório, vou pegar esse nome moello jason post raw jason vamos ver Opa 201 criado. Moel vamos dar uma olhada na nossa base, você criou mesmo? Olha ele aqui, vamos fazer mais um? Vou criar aqui o Higraki Nome legal esse aqui Vamos aqui para a nossa aplicação Igraki Vou dar um teste aqui Criou Olha, status 201 Criado Responsibor Igraki Vamos dar uma olhadinha aqui Perfeito, vamos ver se ele lista tudo Que é o que eu quero, não coloquei filtro nenhum, tá bom? Então, vou mudar novamente para GET e vamos testar, vamos ver se ele traz tudo que eu quero aqui dentro, olha aí, trouxe o Moel, trouxe o Aminatari, trouxe o Rijak, da forma como a gente especificou. Então, aqui agora eu tenho uma aplicação exposta na internet com uma rota de criação de itens, com uma rota de pesquisa de itens integrado com o Lambda, salvando num DynamoDB. Então, eu tenho aqui uma aplicação muito mais funcional, muito mais do dia a dia do que nós estamos acostumados. E a melhor parte, eu estou pagando o que nessas aplicações? Basicamente, milhão de requisições no Gateway, no Lambda e pagando ali pelo armazenamento da EnamoDB. Então, é muito importante, é muito interessante que a gente se atente a isso, que as possibilidades de criação aqui, vão de acordo apenas com os seus contratos. Então você pode ter essa aplicação, esse gateway, que ele é agnóstico a uma linguagem, trabalha por um determinado protocolo. Você pode ter este gateway criando itens no Dynamo e você ter ali uma Lambda em Java, uma Lambda em C Sharp, em Node, no caso aqui nós estamos com uma Lambda em Python e independente da linguagem você vai estar pagando pelo uso da mesma forma. Uma coisa interessante também é que dentro do Apegator você pode criar path parameters, você pode criar validação de body, sim, você pode já colocar itens obrigatórios, itens opcionais, validação de corpo. Você pode fazer, inclusive, transformação. Vamos dizer aí que você tem uma aplicação lá na sua Lambda que ele tem o JSON de determinada forma, ou os headers de determinada forma, e você sofreu uma atualização de contrato. Então, o meu contrato está exposto o meu cliente é um contrato com coesão com coerência mas a transferência desses desses dados para dentro por exemplo é para uma aplicação legada tá bom então eu posso no próprio gate ainda fazer transformação de dados eu posso falar olha o campo x que vem aqui no API Gateway, entra no campo Y aqui nessa aplicação, nessa Lambda, entendeu? Então, você consegue fazer também essa parte de transformação. As opções vão de acordo com o seu contrato. Vai ser realmente mais ligado à sua necessidade do que à possibilidade, porque as possibilidades aqui são muito grandes, tá bom? Então, não existe uma coisa que você vá fazer que vai te tirar algum recurso, né? O API Gateway, na verdade, ele te provê dentro do modelo HTTP, que você vai ter aqui path variables, que você vai ter aqui path variables, rotas, você vai ter aqui carry strings. Então, dentro desse modelo, ele vai te prover tudo o que você precisa e não tem uma restrição. E eu também não vou pagar mais por ter mais rotas ou menos por ter menos rotas. Eu vou estar sempre pagando por milhões de requisições no gateway. Ok? É isso, pessoal. Você pode fazer aqui rotas para deleção, você pode fazer aqui com vários verbos que você quiser, então lembrando aqui que dentro dos recursos que você tem, dentro dos métodos, você pode criar delete, read, patch, put, vai muito do modelo REST que você está seguindo, tá bom? Dentro da sua aplicação e o limite realmente é o seu contrato, tá bom? Então, conseguimos aqui fazer a nossa aplicação integrar com o DynamoDB. Depois nós vamos explorar outras opções dentro do DynamoDB, tá bom? E é isso por enquanto. Boa sorte!