Skip to content

Commit 47139ed

Browse files
committed
Miglioramenti automatic-test e Esecuzione su Azure con Cosmos e MsSql con esecuzione su VirtualMachine Azure
1 parent 1572d24 commit 47139ed

File tree

8 files changed

+525
-27
lines changed

8 files changed

+525
-27
lines changed

README.md

Lines changed: 82 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ Il progetto è pensato per essere agnostico rispetto al cloud provider: sono svi
4040
- 🐳 [Esecuzione su AWS ECS Fargate](#-Esecuzione-su-aws-ecs-fargate)
4141
- ☁️ [Esecuzione profilo Azure (con CosmosDB e SqlServer)](#-Esecuzione-profilo-Azure-in-locale)
4242
- 🚀 [Esecuzione su Azure con Cosmos e MsSql con run locale del servizio](#-Esecuzione-su-Azure-con-Cosmos-e-MsSql-con-run-locale-del-servizio)
43-
- 🐳 [Esecuzione su Azure con CosmosMongo e Postgresql con run locale del servizio](#-Esecuzione-su-Azure-con-CosmosMongo-e-Postgresql-con-run-locale-del-servizio)
43+
- 🐳 [Esecuzione su Azure con CosmosMongo e Postgresql con run locale del servizio (profilo kube)](#-Esecuzione-su-Azure-con-CosmosMongo-e-Postgresql-con-run-locale-del-servizio)
44+
- 🚀 [Esecuzione su Azure con Cosmos e MsSql con esecuzione su VirtualMachine Azure](#-Esecuzione-su-Azure-con-Cosmos-e-MsSql-con-esecuzione-su-VirtualMachine-Azure)
4445
- 📝 [Roadmap & todo-list](#-Roadmap-&-todo-list)
4546
-[Test di non regressione](#-Test-di-non-regressione)
4647

@@ -956,6 +957,58 @@ Script bash per la creazione automatica di risorse Azure con profilo *kube* (Cos
956957
| **TOTALE 24/7** | | **€0.0227/h** | **€0.56/day** | **€3.89/week** | **~€16.80/mese** |
957958

958959

960+
### 🚀 Esecuzione su Azure con Cosmos e MsSql con esecuzione su VirtualMachine Azure
961+
Script bash per la creazione automatica di risorse Azure (CosmosDB + SQL Server + ServiceBus) ed esecuzione dell'applicazione Spring Boot in una Virtual Machine su Azure
962+
- ⚠️ Nota importante: l'esecuzione di questo profilo on cloud potrebbe causare costi indesiderati ⚠️
963+
- 📋 **Prerequisiti**
964+
- Azure CLI installato e autenticato (`az login`)
965+
- Docker installato e in esecuzione
966+
- Immagine Docker `alnao/gestioneannotazioni:latest`
967+
- Componenti creati dallo script
968+
0. **Login**: per essere eseguito necessita della login eseguita con il comando `az login`
969+
1. **Crea Resource Group** su Azure nella regione North Europe
970+
2. **Provisiona CosmosDB** (tier Free) con database e container per annotazioni
971+
3. **Provisiona SQL Server** (tier Basic) con database per metadati e autenticazione
972+
4. **Configura Firewall** per accesso locale e servizi Azure
973+
5. **Inizializza Database** con tabelle (`users`, `annotazione_metadata`, `storico_stati`) e utenti di test
974+
6. **Provisiona ServiceBus** come servizio per la gestione delle code di invio annotazioni
975+
7. **Virtual Machine** come macchine virtuale dove viene eseguito l'immagine docker del servizio
976+
8. **Configurazione rete** per accesso della VM verso il database SQL
977+
978+
- ▶️ Esecuzione
979+
```bash
980+
./script/azure-dbremoti-cosmos-vm/start-all.sh
981+
```
982+
- Rimozione completa
983+
```bash
984+
./script/azure-dbremoti-cosmos-vm/stop-all.sh
985+
```
986+
- ⚠️ Note importanti
987+
- CosmosDB Free Tier: Limitato a 1000 RU/s e 25GB storage. Solo 1 account Free per subscription.
988+
- SQL Server Basic: 5 DTU e 2GB storage. Costo stimato: ~5€/mese.
989+
- VM Standard_B1s: 1 vCPU, 1GB RAM. Ideal per carichi leggeri con burstable performance.
990+
- Firewall: Lo script configura l'accesso dal tuo IP e dalla VM. Aggiorna le regole se l'IP cambia.
991+
- Password: Cambia P@ssw0rd123! con una password sicura prima di eseguire.
992+
- Connection String: Salva le connection string restituite dai comandi in modo sicuro.
993+
- SSH Key: La chiave SSH viene generata automaticamente in `$HOME/.ssh/azure-vm-key.pub`
994+
- ⚠️ Costi: Con l'aggiunta della VM, i costi aumentano. Spegni la VM quando non la usi per risparmiare. ⚠️
995+
996+
| Risorsa | Tier/SKU | Costo Orario | Costo Giornaliero | Costo Settimanale | Costo Mensile |
997+
|---------|----------|--------------|-------------------|-------------------|---------------|
998+
| **Cosmos DB SQL API** | Free Tier (1000 RU/s, 25GB) | €0.00 | €0.00 | €0.00 | **€0.00** |
999+
| **SQL Server Basic** | 5 DTU, 2GB | €0.0068 | €0.16 | €1.14 | **~€5.00** |
1000+
| **VM Standard_B1s** | 1 vCPU, 1GB RAM | €0.0105 | €0.25 | €1.76 | **~€7.60** |
1001+
| **VM IP Pubblico Standard** | Static IP | €0.0043 | €0.10 | €0.72 | **~€3.10** |
1002+
| **VM OS Disk** | 32GB Standard HDD | €0.0006 | €0.01 | €0.10 | **~€0.40** |
1003+
| **Storage SQL** | 2GB incluso | €0.00 | €0.00 | €0.00 | €0.00 |
1004+
| **Egress Data** | <100GB/mese | ~€0.00 | ~€0.01 | ~€0.07 | **~€0.30** |
1005+
| **Service Bus Standard** | 12.5M ops/mese | €0.0118 | €0.28 | €1.99 | **~€8.50** |
1006+
| **TOTALE 24/7** | | **€0.0340/h** | **€0.81/day** | **€5.78/week** | **~€24.90/mese** |
1007+
1008+
1009+
1010+
1011+
9591012

9601013
## 📝 Roadmap & todo-list
9611014
- ✅ ⚙️ Creazione progetto con maven, creazione dei moduli adapter, adapter web con pagina web di esempio, test generale di esecuzione
@@ -1004,9 +1057,9 @@ Script bash per la creazione automatica di risorse Azure con profilo *kube* (Cos
10041057
- ✅ ▶️ Script deploy su Azure della versione con cosmos e sqlserver con run in locale
10051058
- ✅ 🎯 Script deploy su Azure della versione con cosmos-mongodb e postgresql con run in locale
10061059
- ✅ 📖 Export annotazioni verso servizio Azure service dockerbus
1007-
- 🚧 🔧 Verifica inserimento in storico stati quando una annotazione viene inviata
1060+
- 🔧 Verifica inserimento in storico stati quando una annotazione viene inviata
10081061
- ✅ 📝 Esportazione delle annotazioni su Azure in sistema code
1009-
- 🚧 🚀 Script deploy su Azure della versione con cosmos e sqlserver con run in VM-azure
1062+
- 🚀 Script deploy su Azure della versione con cosmos e sqlserver con run in VM-azure
10101063
- 🚧 🎡 Script deploy su Azure della versione con cosmos-mongo e postgres con run in VM-azure
10111064
- 🚧 🛠️ Script deploy su Azure con Azure Container Instances (ACI)
10121065
- 🚧 📦 Script deploy su Azure con Azure Container Apps
@@ -1021,7 +1074,7 @@ Script bash per la creazione automatica di risorse Azure con profilo *kube* (Cos
10211074
- 🚧 🧑‍🤝‍🧑 Gestione modifica annotazione con lock
10221075
- 🚧 🕸️ Gestione invio notifiche singolo se ci sono più istanze dell'applicazione in esecuzione (minikube)
10231076
- 🚧 🔄 Import annotazioni (JSON e/o CSV): creazione service per l'import di annotazioni con cambio di stato dopo averle importate con implementazioni su tutti gli adapter
1024-
- 🚧 🎯 Notifiche real-time (WebSocket): creazione `adapter-notifier` che permetta ad utenti di registrarsi su WebSocket e ricevere notifiche su cambio stato delle proprie notifiche
1077+
- 🚧 🎯 Notifiche real-time (WebSocket): creazione `adapter-notifier` che permetta ad utenti di registrarsi su WebSocket e ricevere notifiche su cambio stato delle proprie annotazioni
10251078
- 🚧 👥 Social Reminders: Notifiche quando qualcuno interagisce con annotazioni modificate
10261079
- 🚧 🧭 Sistema che gestisce la scadenza di una annotazione con spring-batch che elabora tutte le annotazioni rifiutate o scadute, con nuovo stato scadute.
10271080
- 🚧 💾 Backup & Disaster Recovery: Cross-region backup, point-in-time recovery, RTO/RPO compliance
@@ -1071,27 +1124,25 @@ Per ogni modifica, prima del rilascio, *bisognerebbe* eseguire un test di non re
10711124
./script/docker-build.sh
10721125
./script/push-image-docker-hub.sh
10731126
```
1074-
risultato atteso: nessun arrore
1127+
risultato atteso: nessun errore
10751128
- Pulizia globale prima di partire (meglio partire da situazione pulita con volumi vuoti!)
10761129
```bash
10771130
docker volume rm $(docker volume ls -q)
10781131
```
1079-
- Script per eseguire il profilo `sqlite` eseguito in locale (con solo sqlite) senza docker
1080-
```
1081-
./script/sqlite-locale/test.sh
1082-
```
1083-
- Script per eseguire il profilo `kube` eseguito in locale (con Postgresql e MongoDB) con docker compose
1084-
```
1085-
./script/kube-local-test.sh
1086-
```
1087-
- Script per eseguire il profilo `kube` eseguito in locale con **minikube** e **kubernetes**
1088-
```
1089-
./script/minikube/test.sh
1090-
```
1091-
- Script per eseguire il profilo `aws` eseguire in locale con docker
1132+
- Script generale per eseguire tutti i gli script di test *automatici*
10921133
```
1093-
./script/aws-onprem/test.sh
1134+
./script/automatic-test/test-all.sh
10941135
```
1136+
- Che esegue gli script
1137+
```
1138+
# Script per eseguire il profilo `sqlite` eseguito in locale (con solo sqlite) senza docker
1139+
./script/automatic-test/test-sqlite-onprem.sh
1140+
# Script per eseguire il profilo `kube` eseguito in locale (con Postgresql e MongoDB) con docker compose
1141+
./script/automatic-test/test-aws-onprem.sh
1142+
# Script per eseguire il profilo `kube` eseguito in locale con **minikube** e **kubernetes**
1143+
./script/automatic-test/test-minikube.sh
1144+
```
1145+
10951146
- Profilo `aws` in Cloud AWS con MySql e MySql ed esecuzione su EC2
10961147
- ⚠️ Nota importante: l'esecuzione di questo profilo on cloud potrebbe causare costi indesiderati ⚠️
10971148
- Script per creare lo stack in AWS (RDS, Dynamo e EC2)
@@ -1100,7 +1151,7 @@ Per ogni modifica, prima del rilascio, *bisognerebbe* eseguire un test di non re
11001151
```
11011152
- L'output finale dello script mostra l'IP pubblico EC2 e la porta applicativa (default 8080)
11021153
- Accedi da browser: `http://<EC2_PUBLIC_IP>:8080`
1103-
- L'invio delle annotazioni avvinee in una coda SQS reale, le istruzioni per leggere
1154+
- L'invio delle annotazioni avviene in una coda SQS reale, le istruzioni per leggere
11041155
```bash
11051156
SQS_QUEUE_NAME=gestioneannotazioni-annotazioni
11061157
SQS_QUEUE_URL=$(aws sqs get-queue-url --queue-name $SQS_QUEUE_NAME --region eu-central-1 --query 'QueueUrl' --output text)
@@ -1122,7 +1173,17 @@ Per ogni modifica, prima del rilascio, *bisognerebbe* eseguire un test di non re
11221173
```bash
11231174
./script/azure-dbremoti-cosmos-runlocale/stop-all.sh
11241175
```
1125-
1176+
- Profilo `azure` in Cloud Azure con MySql e MySql ed esecuzione in VirtualMachine su azure
1177+
- Script per creare lo stack in Azure (Cosmos e MsSql) e l'esecuzione del microservizio una VistualMachine su Azure
1178+
```bash
1179+
./script/azure-dbremoti-cosmos-vm/start-all.sh
1180+
```
1181+
- L'applicazione web sarà disponibile all'url ritornato dallo script
1182+
- Verifica che le annotazioni sono correttamente inviate nella console web del servizio ServiceBus
1183+
- Rimozione dello stack
1184+
```bash
1185+
./script/azure-dbremoti-cosmos-runlocale/stop-all.sh
1186+
```
11261187
- Profilo `kube` in cloud Azure con Postgresql e MongoDB ed esecuzione in locale
11271188
- ⚠️ Nota importante: l'esecuzione di questo profilo on cloud potrebbe causare costi indesiderati ⚠️
11281189
- Script per creare lo stack in Azure (Postgresql e Cosmos-Mongo) ma esecuzione del microservizio in locale

script/automatic-test/test-all.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Script per chiamare tutti i test inclusi quelli per SQLite
2+
#!/bin/bash
3+
# set -e
4+
5+
echo "Posizione script: $(dirname "$0")"
6+
#cd "$(dirname "$0")/.."
7+
echo "Directory di lavoro: $(pwd)"
8+
9+
# Script per eseguire il profilo `sqlite` eseguito in locale (con solo sqlite) senza docker
10+
./script/automatic-test/test-sqlite-onprem.sh
11+
# Script per eseguire il profilo `kube` eseguito in locale (con Postgresql e MongoDB) con docker compose
12+
./script/automatic-test/test-aws-onprem.sh
13+
# Script per eseguire il profilo `kube` eseguito in locale con **minikube** e **kubernetes**
14+
./script/automatic-test/test-minikube.sh
15+
16+
echo "---------------------------------------------------------"
17+
echo "✅ Tutti i test sono completati con successo!"

script/aws-onprem/test.sh renamed to script/automatic-test/test-aws-onprem.sh

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ echo "DynamoDB Admin: [http://localhost:8087](http://localhost:8087)"
2020
# Funzione per terminare l'applicazione in caso di errore
2121
cleanup() {
2222
docker-compose -f script/aws-onprem/docker-compose.yml down
23-
docker volume rm $(docker volume ls -q)
24-
docker rmi $(docker images -q)
23+
docker volume rm $(docker volume ls -q) > /dev/null 2>&1
24+
docker rmi $(docker images -q) > /dev/null 2>&1
2525
}
2626
trap cleanup EXIT
2727

@@ -133,7 +133,12 @@ while [ $attempt -lt $max_attempts ]; do
133133

134134
# Verifica se ci sono messaggi
135135
message_count=$(echo "$RISPOSTA" | jq -r '.Messages | length' 2>/dev/null || echo "0")
136-
136+
137+
# Gestione valori null o vuoti
138+
if [ -z "$message_count" ] || [ "$message_count" = "null" ]; then
139+
message_count=0
140+
fi
141+
137142
if [ "$message_count" -gt 0 ]; then
138143
# Verifica se il messaggio contiene l'ID dell'annotazione creata
139144
if echo "$RISPOSTA" | jq -r '.Messages[].Body' | grep -q "$id_creato"; then
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Test Azure Cosmos DB con Spring Boot
2+
# Questo script avvia l'applicazione Spring Boot configurata per utilizzare un'istanza di Azure Cosmos DB remota.
3+
#!/bin/bash
4+
5+
#echo "🚀 Avvio test applicazione con Azure Cosmos DB remoto..."
6+
7+
# TODO: Implementare il test automatico dell'applicazione con Azure Cosmos DB remoto

script/minikube/test.sh renamed to script/automatic-test/test-minikube.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ echo "Usando Freelens/Openlens si può verificare lo stato dei servizi/pod..."
2020

2121
# Funzione per terminare l'applicazione in caso di errore
2222
cleanup() {
23-
./script/minikube/stop-all.sh
24-
minikube delete
23+
./script/minikube/stop-all.sh > /dev/null 2>&1
24+
minikube delete > /dev/null 2>&1
2525
}
2626
trap cleanup EXIT
2727

script/sqlite-locale/test.sh renamed to script/automatic-test/test-sqlite-onprem.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#./script/push-image-docker-hub.sh
99

1010
echo "Posizione script: $(dirname "$0")"
11-
cd "$(dirname "$0")/.."
11+
#cd "$(dirname "$0")/.."
1212
echo "Directory di lavoro: $(pwd)"
1313

1414
echo "Preparazione database SQLite in /tmp/database.sqlite..."

0 commit comments

Comments
 (0)