Tutorial sulla creazione di applicazioni su Amazon Web Services (AWS)
Amazon Web Services (AWS) è una delle piattaforme di cloud computing più popolari al mondo. Con AWS, è possibile creare ed eseguire applicazioni senza dover acquistare server fisici, configurare spazio server o gestire la propria infrastruttura. Questo articolo illustra la creazione di una semplice applicazione su AWS utilizzando un approccio comune: la distribuzione di un'applicazione web tramite servizi di calcolo (EC2), un database gestito (RDS) come opzione, storage e un dominio, se necessario. Sebbene l'esempio seguente sia generico, è possibile applicarlo a molti tipi di applicazioni.
-
1. Preparazione iniziale: Contabilità e concetti di base
Prima di iniziare, assicurati di avere un account AWS. Molti servizi AWS offrono un livello gratuito (gratuito entro certi limiti) perfetto per fare pratica.
Ecco alcuni concetti importanti che devi comprendere:
– Regione: posizione del data center AWS (esempio: Singapore/ap-southeast-1). Scegli la regione più vicina per una bassa latenza.
– IAM (Identity and Access Management): un sistema di gestione degli accessi. Buona prassi: non utilizzare l'account root per le attività quotidiane.
– VPC (Virtual Private Cloud): una rete virtuale in cui vengono eseguiti i tuoi servizi.
– Gruppo di sicurezza: “firewall” per regolare l’accesso in entrata/uscita dal server.
Comprendendo questi quattro aspetti, ti sarà molto più facile orientarti tra le nozioni di base di AWS.
-
2. Creare utenti IAM e account sicuri
La sicurezza è sempre la nostra priorità assoluta. Accedi alla console AWS come utente root, quindi:
1. Aprire il servizio IAM.
2. Crea un nuovo utente (ad esempio `admin-dev`) e seleziona "Fornisci all'utente l'accesso alla console di gestione AWS".
3. Concedere le autorizzazioni: a scopo di esercitazione è possibile utilizzare AdministratorAccess (anche se nei progetti reali le autorizzazioni dovrebbero essere più limitate).
4. Abilita l'autenticazione a più fattori (MFA) per aumentare la sicurezza.
Una volta completata l'operazione, disconnettiti dall'account root e accedi utilizzando il nuovo utente IAM appena creato.
-
3. Determinare l'architettura dell'applicazione
In questo tutorial, costruiremo un'architettura semplice:
– EC2: esecuzione di applicazioni web (ad esempio Node.js/Express, Python Flask o PHP).
– RDS opzionale: database MySQL/PostgreSQL gestito, per archiviare i dati in modo ordinato.
– S3 (facoltativo): memorizza file statici come immagini, documenti o backup.
– Route 53 (facoltativo): gestione dei domini.
– CloudWatch: monitoraggio di base.
Se sei agli inizi, concentrati prima su EC2 per eseguire le tue applicazioni.
-
4. Creare un server EC2
a) Creare un'istanza
1. Accedi al servizio EC2.
2. Fare clic su Avvia istanza.
3. Selezionare il sistema operativo, ad esempio Ubuntu Server 22.04 LTS.
4. Seleziona il tipo di istanza: per il livello gratuito utilizza `t2.micro` o `t3.micro` (in base alla disponibilità).
5. Crea o seleziona una coppia di chiavi (ad esempio, `aws-key.pem`). Conserva il file `.pem` in un luogo sicuro, poiché verrà utilizzato per SSH.
b) Configurazione di rete e firewall
– Assicurati che l'istanza si trovi nella VPC predefinita (solo a scopo di esercitazione).
– Imposta gruppo di sicurezza:
– Porta 22 (SSH) solo dal tuo IP (es. "Il mio IP")
– Porta 80 (HTTP) di `0.0.0.0/0` (pubblica)
– Porta 443 (HTTPS) da `0.0.0.0/0` se successivamente si utilizza SSL
Nota: esporre SSH al pubblico è rischioso. Limitare sempre gli indirizzi IP.
Fai clic su Avvia e attendi che la regolazione venga eseguita.
-
5. Accedi al server tramite SSH
Su Windows, puoi usare WSL o PuTTY. Su macOS/Linux, puoi farlo direttamente dal terminale.
1. Modifica la chiave di autorizzazione:
“'bash
chmod 400 aws-key.pem
“`
2. Connettiti al server tramite SSH (utilizza l'indirizzo IPv4 pubblico di EC2):
“'bash
ssh -i aws-key.pem ubuntu@PUBLIC_IP
“`
In caso di successo, significa che ti trovi sul server AWS Ubuntu.
-
6. Installare il server Web e l'ambiente di runtime dell'applicazione
Ecco un esempio di applicazione Node.js, dato che è ampiamente utilizzato nel web moderno.
a) Aggiornare e installare le dipendenze
“'bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git
“`
b) Installare Node.js (versione LTS)
“'bash
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash –
sudo apt install -y nodejs
nodo -v
npm -v
“`
-
7. Crea una semplice applicazione
Crea una cartella di progetto:
“'bash
mkdir myapp && cd myapp
npm init -y
npm installa espresso
“`
Crea un file `index.js`:
“`js
const express = require("express");
const app = express();
app.get(“/”, (req, res) => {
res.send("Ciao! La tua applicazione è in esecuzione su AWS EC2.");
});
app.listen(3000, () => console.log("Server in esecuzione sulla porta 3000"));
“`
Avvia l'applicazione:
“'bash
indice del nodo.js
“`
Prova ad accedere tramite browser:
– `http://PUBLIC_IP:3000`
Tuttavia, la porta 3000 al momento non è aperta nel gruppo di sicurezza. È possibile:
1) aprire la porta 3000 nel gruppo di sicurezza, oppure
2) utilizzare un proxy inverso (soluzione più consigliata) in modo che l'applicazione rimanga su una porta interna ma sia accessibile tramite le porte 80/443.
-
8. Utilizzo di Nginx come proxy inverso (accesso tramite porta 80)
Installa Nginx:
“'bash
sudo apt install -y nginx
sudo systemctl abilita nginx
sudo systemctl start nginx
“`
Configurare Nginx:
“'bash
sudo nano /etc/nginx/sites-available/myapp
“`
Contenuto della configurazione:
“`nginx
server {
listen 80;
nome_server _;
posizione / {
proxy_pass http://127.0.0.1:3000;
proxy_http_versione 1.1;
proxy_set_header Aggiornamento $http_upgrade;
proxy_set_header Connessione 'upgrade';
proxy_set_header Host $ host;
proxy_cache_bypass $http_upgrade;
}
}
“`
Abilita la configurazione:
“'bash
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl ricarica nginx
“`
Accedi ora:
– `http://PUBLIC_IP/`
L'applicazione è in esecuzione sulla porta 3000, ma il pubblico vi accede tramite la porta 80.
-
9. Esecuzione persistente delle applicazioni con PM2
Per evitare che l'applicazione si blocchi in caso di disconnessione SSH, utilizzare PM2:
“'bash
sudo npm install -g pm2
pm2 start index.js –name myapp
salvataggio pm2
avvio pm2
“`
Il comando `pm2 startup` fornirà ulteriori istruzioni. Esegui il comando visualizzato per avviare automaticamente l'applicazione al riavvio del server.
-
10. (Facoltativo) Aggiunta di un database con RDS
Se la tua applicazione richiede un database, RDS semplifica le cose perché AWS si occupa di backup, patch e scalabilità.
Pochi passaggi:
1. Apri il servizio RDS → Crea database.
2. Seleziona MySQL o PostgreSQL (le regole del piano gratuito sono disponibili per determinate configurazioni).
3. Imposta nome utente e password.
4. Assicurarsi che l'istanza RDS si trovi nella stessa VPC dell'istanza EC2.
5. Impostare il gruppo di sicurezza RDS in modo che accetti connessioni solo dal gruppo di sicurezza EC2 (non dal pubblico).
Una volta che il database è attivo, recupera l'endpoint RDS e connettiti ad esso dalla tua applicazione utilizzando il driver del database.
-
11. (Facoltativo) Abilita HTTPS con certificato SSL
Per la produzione, HTTPS è obbligatorio. Metodo tipico:
– Utilizzare un dominio (ad esempio da Route 53 o da un altro registrar).
– Installa SSL tramite Let's Encrypt (Certbot) su EC2.
In breve:
“'bash
sudo apt install -y certbot python3-certbot-nginx
sudo certbot –nginx
“`
Segui la procedura guidata per selezionare un dominio e abilitare il reindirizzamento HTTPS.
-
12. Monitoraggio e costi
AWS offre CloudWatch per visualizzare metriche come CPU, rete e log specifici. È inoltre consigliabile monitorare i costi per evitare di perdere opportunità.
Consigli importanti:
– Abilita l'allarme di fatturazione in CloudWatch (ad esempio, un allarme se gli addebiti superano i 5 dollari).
– Spegnere l'istanza quando non in uso.
– Rimuovere le risorse non utilizzate (bilanciatori di carico, EBS, IP elastici, snapshot) poiché potrebbero comunque generare costi.
-
Chiusura
Congratulazioni! Hai imparato le basi per creare un'applicazione su AWS utilizzando EC2, eseguire un'applicazione web , configurare un reverse proxy Nginx e renderla sempre attiva con PM2. Hai anche acquisito una panoramica di servizi aggiuntivi come RDS per i database, S3 per l'archiviazione e i certificati HTTPS per la sicurezza.
Se vuoi salire di livello, i passaggi successivi sono generalmente:
– Distribuzione automatizzata con CI/CD (GitHub Actions + SSH o AWS CodeDeploy),
– Utilizzando container con Docker e orchestrazioni come ECS o EKS,
– Utilizzo di un'architettura serverless con Lambda + API Gateway.
Se lo desideri, specifica il tipo di applicazione che stai sviluppando (Node.js, Laravel, Django, React, ecc.) e il suo scopo (demo, produzione, su larga scala). In questo modo potrò personalizzare il tutorial con istruzioni più specifiche.