Mas pra que?
Antes de começar um projeto e precisar de uma conexão com chaves da AWS esse recurso vai encurtar muito o tempo da sua primeira POC. No futuro esse simples passo pode te ajudar a construir testes robustos para uma aplicação até com cenários mais controlados.
Pré requisitos
- Docker
- AWS CLI
Como fazer?
Primeiro o que é necessário fazer o pull diretamente do dockerHub
docker pull amazon/dynamodb-local
Depois podemos executar, nesse caso testamos a porta 8000 para acesso
docker run -p 8000:8000 amazon/dynamodb-local
após executar deverá aparecer uma mensagem como a seguinte
Initializing DynamoDB Local with the following configuration:
Port: 8000
InMemory: true
DbPath: null
SharedDb: false
shouldDelayTransientStatuses: false
CorsParams: *
Testando
Agora utilizando o AWS CLI vamos executar alguns comandos para testar o docker. Após cada resposta é necessário escrever :q
para sair. Todos os comandos que podem ser executados podem ser vistos aqui.
Criar tabelas:
Comando para criar uma tabela de chamada Usuario
. A tabela possui Nome
como chave(key) e Email
como sort key.
aws dynamodb create-table \
--table-name Usuario \
--attribute-definitions \
AttributeName=Nome,AttributeType=S \
AttributeName=Email,AttributeType=S \
--key-schema AttributeName=Nome,KeyType=HASH AttributeName=Email,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
--endpoint-url http://localhost:8000
Comando para criar uma tabela de chamada Livro
. A tabela possui ISBN
como chave(key) e Nome
como sort key.
aws dynamodb create-table \
--table-name Livro \
--attribute-definitions \
AttributeName=ISBN,AttributeType=S \
AttributeName=Nome,AttributeType=S \
--key-schema AttributeName=ISBN,KeyType=HASH AttributeName=Nome,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
--endpoint-url http://localhost:8000
Após cada criação aparece um comando como o seguinte:
{
"TableDescription": {
"AttributeDefinitions": [
{
"AttributeName": "ISBN",
"AttributeType": "S"
},
{
"AttributeName": "Nome",
"AttributeType": "S"
}
],
"TableName": "Livro",
"KeySchema": [
{
"AttributeName": "ISBN",
"KeyType": "HASH"
},
{
"AttributeName": "Nome",
"KeyType": "RANGE"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": "2021-04-29T18:41:27.467000-03:00",
"ProvisionedThroughput": {
"LastIncreaseDateTime": "1969-12-31T21:00:00-03:00",
"LastDecreaseDateTime": "1969-12-31T21:00:00-03:00",
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 1,
"WriteCapacityUnits": 1
},
"TableSizeBytes": 0,
"ItemCount": 0,
"TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/Livro"
}
}
Listar tabelas:
aws dynamodb list-tables --endpoint-url http://localhost:8000
Put de item
Inserindo item na tabela.
aws dynamodb put-item \
--table-name Livro \
--item \
'{"ISBN": {"S": "1298DSAHI"}, "Nome": {"S": "Livro do Luiz"}}' \
--return-consumed-capacity TOTAL \
--endpoint-url http://localhost:8000
Inserindo item na tabela Livro com autor.
aws dynamodb put-item \
--table-name Livro \
--item \
'{"ISBN": {"S": "12343AOIDJOFA"}, "Nome": {"S": "Livro do Luiz2"}, "Autor": {"S": "Luiz Leite Oliveira"}}' \
--return-consumed-capacity TOTAL \
--endpoint-url http://localhost:8000
Como resultado recebemos:
{
"ConsumedCapacity": {
"TableName": "Livro",
"CapacityUnits": 1.0
}
}
Consultando registros:
Para consulta basta executar o comando query:
Query que não tem retorno pois não existe o ISBN
aws dynamodb query --table-name Livro --key-conditions \
'{"ISBN" : {"AttributeValueList": [{"S": "TESTE_NAO_EXISTE"}],"ComparisonOperator": "EQ"}}' \
--endpoint-url http://localhost:8000
Query que retorna livro que possuí autor:
aws dynamodb query --table-name Livro --key-conditions \
'{"ISBN" : {"AttributeValueList": [{"S": "12343AOIDJOFA"}],"ComparisonOperator": "EQ"}}' \
--endpoint-url http://localhost:8000
Resultado:
{
"Items": [
{
"ISBN": {
"S": "12343AOIDJOFA"
},
"Nome": {
"S": "Livro do Luiz2"
},
"Autor": {
"S": "Luiz Leite Oliveira"
}
}
],
"Count": 1,
"ScannedCount": 1,
"ConsumedCapacity": null
}
Conclusão
Além dessas operações existem muitas outras que podem ser executadas através do aws cli. O banco que criamos está totalmente operacional e podemos criar uma boa idéia de quanto será usado recurso gasto como unidades de leitura para o projeto, com esse dado mais o volume esperado pode-se chegar bem rápido a quando fica o custo além de demonstrar que a modelagem pode funcionar ou não.
Want to follow me?
You can get in contact me on this social media.
GitHub: luizleite-hotmart
Twitter: luizleite_
Twitch: coffee_and_code
Linkedin: luizleiteoliveira