Per a aquesta instal·lació, farem servir una màquina virtual amb Debian 11 i 2.5GB de RAM
Java
Necessitem instal·lar Java Runtime Environment (JRE)
sudo apt install openjdk-11-jre
Afegirem java path al final de l’arxiu
sudo nano /etc/bash.bashrc
export PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin:$PATH
DynamoDB
Descarreguem la darrera versió de dynamodb
wget https://s3.ap-south-1.amazonaws.com/dynamodb-local-mumbai/dynamodb_local_latest.tar.gz
Instal·lació
Crearem un directori en /usr/lib/ de nom dynamodb on situarem l’arxiu descarregat i el descomprimirem
sudo mkdir -p /usr/lib/dynamodb
sudo mv dynamodb_local_latest.tar.gz /usr/lib/dynamodb/
cd /usr/lib/dynamodb/
sudo tar xfz dynamodb_local_latest.tar.gz
Podem comprovar el funcionament amb:
sudo java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
Per a més comoditat farem que sigui un servei gestionable
sudo nano /etc/systemd/system/dynamodb.service
El contingut de l’arxiu creat, serà el següent:
[Unit]
Description=Dynamo DB Local Service
[Service]
Type=simple
WorkingDirectory=/usr/lib/dynamodb
ExecStart=/usr/lib/dynamodb/dynamodb
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
KillMode=process
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
Crearem l’arxiu executable:
sudo nano /usr/lib/dynamodb/dynamodb
Li donem permís d’execució
sudo chmod 744 dynamodb
Afegim la comanda que haviem provat en un principi, de forma manual.
#!/bin/bash sudo java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
Registrem i habilitem el servei: /etc/systemd/system/dynamodb.service
sudo systemctl daemon-reload sudo systemctl enable dynamodb
Initzialitzem i comprovem el servei
sudo systemctl start dynamodb sudo systemctl status dynamodb
Consola aws
Instal·lació de la consola aws
sudo pip install --upgrade aws-shell
Per entrar
aws-shell
Per sortir
.quit o .exit
Configurar aws
En aquest cas, treballarem en local, així doncs no serà necessari introduïr una regió aws real, como ara ‘eu-south-2‘ o altres
aws> configure AWS Access Key ID [None]: usuari AWS Secret Access Key [None]: passwdUsuari Default region name [None]: local Default output format [None]:
Aquesta informació es guardarà als arxius: ~/.aws/config (region) i ~/.aws/credentials (usuari i contrasenya)
Podem provar a entrar amb:
WS_DEFAULT_REGION=local AWS_ACCESS_KEY_ID=usuari AWS_SECRET_ACCESS_KEY=passwdUsuari aws dynamodb list-tables --endpoint-url http://localhost:8000
És important afegir –endpoint-url http://localhost:8000 ja que estem accedint en local
Com hem creat els paràmetres de configuració d’usuari, també podem accedir de forma més ràpida amb la comanda:
aws dynamodb list-tables --endpoint-url http://localhost:8000
El que ens hauria de mostrar un llistat buit de taules
{ "TableNames": [ ] }
Una altra opció de configuració, és la de crear un perfil i fer-lo servir
aws configure --profile proot AWS Access Key ID [None]: root AWS Secret Access Key [None]: passwdRoot Default region name [None]: local Default output format [None]:
Crear una taula i importar un arxiu .json
La mateixa documentació d’AWS ens mostra el següent exemple:
aws --profile proot --endpoint-url http://localhost:8000 dynamodb create-table \ --table-name GameScores \ --attribute-definitions AttributeName=UserId,AttributeType=S AttributeName=GameTitle,AttributeType=S AttributeName=TopScore,AttributeType=N AttributeName=Date,AttributeType=S \ --key-schema AttributeName=UserId,KeyType=HASH AttributeName=GameTitle,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=5 \ --global-secondary-indexes file://gsi.json
[ gsi.json ]
Podem comprovar el llistat de taules novament
aws --profile proot dynamodb list-tables --endpoint-url http://localhost:8000 { "TableNames": [ "GameScores" ] }
O veure la seva estructura i contingut
aws --profile proot dynamodb describe-table --table-name GameScores --endpoint-url http://localhost:8000
{
"Table": {
"AttributeDefinitions": [
{
"AttributeName": "UserId",
"AttributeType": "S"
},
{
"AttributeName": "GameTitle",
"AttributeType": "S"
},
{
"AttributeName": "TopScore",
"AttributeType": "N"
},
{
"AttributeName": "Date",
"AttributeType": "S"
}
],
"TableName": "GameScores",
"KeySchema": [
{
"AttributeName": "UserId",
"KeyType": "HASH"
},
{
"AttributeName": "GameTitle",
"KeyType": "RANGE"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": 1677344659.024,
"ProvisionedThroughput": {
"LastIncreaseDateTime": 0.0,
"LastDecreaseDateTime": 0.0,
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 10,
"WriteCapacityUnits": 5
},
"TableSizeBytes": 0,
"ItemCount": 0,
"TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/GameScores",
"GlobalSecondaryIndexes": [
{
"IndexName": "GameDateIndex",
"KeySchema": [
{
"AttributeName": "GameTitle",
"KeyType": "HASH"
},
{
"AttributeName": "Date",
"KeyType": "RANGE"
}
],
"Projection": {
"ProjectionType": "ALL"
},
"IndexStatus": "ACTIVE",
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
"IndexSizeBytes": 0,
"ItemCount": 0,
"IndexArn": "arn:aws:dynamodb:ddblocal:000000000000:table/GameScores/index/GameDateIndex"
},
{
"IndexName": "GameTitleIndex",
"KeySchema": [
{
"AttributeName": "GameTitle",
"KeyType": "HASH"
},
{
"AttributeName": "TopScore",
"KeyType": "RANGE"
}
],
"Projection": {
"ProjectionType": "ALL"
},
"IndexStatus": "ACTIVE",
"ProvisionedThroughput": {
"ReadCapacityUnits": 10,
"WriteCapacityUnits": 5
},
"IndexSizeBytes": 0,
"ItemCount": 0,
"IndexArn": "arn:aws:dynamodb:ddblocal:000000000000:table/GameScores/index/GameTitleIndex"
}
]
}
}
Bibliografia
https://github.com/awslabs/aws-shell
http://docs.aws.amazon.com/cli/latest/reference/dynamodb/create-table.html
https://docs.aws.amazon.com/cli/latest/userguide/cli-services-dynamodb.html