Benvenuti a Giorno 4 di 12 Giorni di DigitalOcean! Ieri, abbiamo aggiunto le notifiche SMS di Twilio al nostro Servizio di Promemoria per Compleanni, rendendolo in grado di inviare messaggi di testo per i compleanni di oggi. 🎂
Oggi, porteremo le cose al livello successivo distribuendo il nostro script su DigitalOcean Functions. Questo consente al nostro servizio di funzionare nel cloud senza la necessità di un server dedicato, rendendo la nostra app leggera, scalabile e pronta per l’automazione.
Con questa configurazione, riceverai promemoria per i compleanni anche quando il tuo computer è spento o non è connesso a Internet: non sarà più necessario eseguire lo script manualmente sul tuo dispositivo. 🎉
✨ Perché DigitalOcean Functions?
A volte, tutto ciò di cui hai bisogno è uno script semplice che gira occasionalmente. Gestire l’infrastruttura per qualcosa del genere può essere eccessivo. È qui che entrano in gioco Functions. È una piattaforma serverless, il che significa che puoi distribuire codice che viene eseguito solo quando necessario, e paghi solo per ciò che usi. Perfetto per il nostro caso d’uso: controllare i compleanni e inviare promemoria quotidianamente.
🚀 Cosa Imparerai
Entro la fine di oggi, saprai come:
- Impostare
doctl
di DigitalOcean strumento CLI. - Creare e connettersi a un namespace serverless (il modo di DigitalOcean per tenere organizzate le funzioni).
- Imballare e distribuire il tuo Servizio di Promemoria per Compleanni su DigitalOcean Functions.
- Testare la tua funzione distribuita nel cloud.
🛠 Cosa Ti Serve
Prima di iniziare, assicurati di avere:
- Un account DigitalOcean.
- Un file
.env
con le credenziali del tuo database PostgreSQL e le credenziali di Twilio
🧑🍳 Ricetta per il Giorno 4: Distribuzione su DigitalOcean Functions
Passo 1: Configura il doctl
CLI
Se hai già configurato doctl sul tuo computer, puoi saltare questo passaggio. Per chi deve configurarlo, segui queste istruzioni:
Prima di iniziare, parliamo brevemente di doctl
. È lo strumento ufficiale della linea di comando di DigitalOcean che ti consente di gestire le tue risorse cloud direttamente dal tuo terminale. Lo utilizzeremo per creare uno spazio dei nomi (una cartella per le nostre funzioni serverless), distribuire il nostro script Python e testare la funzione.
La configurazione è semplice:
-
Installa
doctl
: Segui la guida all’installazione per il tuo sistema operativo. -
Autenticare
doctl
: Collegalo al tuo account DigitalOcean eseguendo: -
Verifica l’installazione: Assicurati che tutto funzioni eseguendo:
Se ha successo, questo comando restituirà dettagli sul tuo account DigitalOcean, come la tua email e l’ID dell’account.
Passo 2: Installa il Software Serverless
DigitalOcean Functions richiede software di supporto serverless, che dovrai installare. Questa è una configurazione una tantum, quindi una volta installato, non sarà necessario farlo di nuovo per progetti futuri.
Esegui il seguente comando:
Puoi controllare lo stato dell’installazione con:
Se vedi un errore come:
Non preoccuparti: significa solo che non abbiamo ancora creato o collegato uno spazio dei nomi. Ci occuperemo di questo nel passo successivo.
Passo 3: Crea e Connettiti a uno Spazio dei Nomi
I namespace sono come cartelle per organizzare le funzioni serverless. Creiamo uno per il nostro Servizio di Promemoria per Compleanni:
-
Crea un nuovo namespace:
-
Collegati al namespace:
-
Verifica la connessione:
Ora dovresti vedere una conferma che sei connesso al namespace.
Consiglio Pro: Per vedere un elenco di tutti gli spazi dei nomi disponibili, utilizza il seguente comando:
Questo può essere utile se stai gestendo più progetti o vuoi verificare lo spazio dei nomi che hai appena creato.
Passo 4: Inizializza e Imposta la Struttura del Progetto
Le Funzioni di DigitalOcean si aspettano una struttura di progetto specifica per le distribuzioni senza server. Puoi avviare questa struttura usando doctl serverless init
, crearla manualmente o persino clonare un repository di avvio. Per semplificare le cose, la imposteremo usando doctl serverless init
:
-
Esegui il seguente comando per inizializzare il progetto:
Questo crea una directory di progetto locale chiamata
my-birthday-reminder-service
con la seguente struttura predefinita: -
Naviga nella directory del progetto:
-
Rinomina le cartelle per adattarle al nostro caso d’uso:
-
Crea i file necessari:
- Crea un file .env vuoto nella radice del progetto:
Questo conterrà le tue credenziali per il database e Twilio. Il file si troverà nella radice della cartella
my-birthday-reminder-service
.- Crea un file
requirements.txt
nella cartellabirthdays
:
Questo file elencherà le dipendenze Python necessarie per la tua funzione. Si troverà sotto
packages/reminders/birthdays
.- Crea un file build.sh nella cartella birthdays:
Lo script
build.sh
è necessario per il deployment di funzioni con dipendenze esterne. Il comandochmod
assicura che lo script sia eseguibile su sistemi Mac/Linux.
Struttura Aggiornata: Dopo aver completato questi passaggi, la struttura del tuo progetto dovrebbe apparire così:
Consiglio da Pro: Se rinomini accidentalmente una cartella, puoi eseguire di nuovo il comando o rinominarla manualmente nel tuo esploratore di file.
Passo 5: Aggiorna i File
Ora che la struttura è in atto, popoliamola con i file necessari. Apri la directory my-birthday-reminder-service nel tuo editor di codice preferito.
1. Aggiorna project.yml
Il file project.yml
è un file di configurazione che definisce la struttura, le variabili d’ambiente e le funzioni del tuo progetto serverless. Sostituisci il suo contenuto con:
Questo file configura il pacchetto dei promemoria e mappa le variabili d’ambiente alle Funzioni di DigitalOcean. Ogni variabile corrisponde alle credenziali necessarie per il tuo database e l’integrazione con Twilio.
2. Aggiorna il tuo file .env
Fai riferimento a Giorno 1: Configurazione di un Database PostgreSQL per Promemoria di Compleanno per le credenziali del database e Giorno 3: Controllo dei Compleanni e Invio di Notifiche SMS per le credenziali di Twilio per popolare i seguenti valori:
Nota: Il file .env
è utilizzato per memorizzare in modo sicuro le credenziali sensibili. Questi valori saranno letti dal tuo file project.yml
e mappati all’ambiente serverless durante il deployment, rendendoli accessibili alla tua funzione nel cloud.
3. Aggiungi Dipendenze
Aggiorna il file requirements.txt
con le seguenti dipendenze:
pg8000
: Una libreria client PostgreSQL in puro Python.
python-dotenv
: Utilizzato per caricare le variabili d’ambiente dal file .env
.
twilio
: La libreria Python di Twilio per l’invio di messaggi SMS.
4. Aggiorna build.sh
Aggiungi il seguente script al file build.sh
:
Questo script garantisce che tutte le dipendenze siano imballate correttamente con la tua funzione. Il comando chmod +x
dal Passo 4 garantisce che sia eseguibile.
5. Aggiorna __main__.py
Questo è lo script principale per il tuo Servizio di Promemoria per Compleanni. Fondamentalmente stiamo usando lo script che abbiamo costruito nel Giorno 3 per inviare le notifiche di compleanno. Tuttavia, per renderlo compatibile con le Funzioni di DigitalOcean, dobbiamo apportare alcune piccole modifiche.
Aggiorna il file __main__.py
con il seguente contenuto:
Ecco cosa abbiamo cambiato:
-
Aggiunta una funzione
main(params)
: DigitalOcean Functions si aspetta una funzione di entry point chiamatamain
, che accetta un argomentoparams
. Qui è dove inizia l’esecuzione della funzione. -
Spostata la logica dello script all’interno della funzione
main
:
Il codice del Giorno 3 è stato racchiuso all’interno della funzionemain
per allinearsi a questo requisito. -
Tutto il resto rimane invariato:
La logica di connessione al database, i controlli di compleanno e la logica di notifica SMS non sono cambiati.
Passo 5: Imballa e Distribuisci
Con tutto in ordine, distribuisci il tuo progetto su DigitalOcean Functions:
- Distribuisci il progetto:
Per verificare che la tua funzione sia stata distribuita con successo nello spazio dei nomi:
- Visita il Pannello di Controllo di DigitalOcean e vai su Functions nella barra laterale sinistra.
- Trova il tuo spazio dei nomi (ad esempio, my-birthday-reminder-namespace).
- Controlla che la tua funzione appaia sotto lo spazio dei nomi, tipicamente elencata come
reminders/birthdays
. - Clicca sul nome della funzione per visualizzare i dettagli, inclusi log, configurazione e cronologia delle invocazioni.
Passo 6: Testa la Tua Funzione Distribuita
Una volta che la tua funzione è stata distribuita, è tempo di testarla. Puoi invocare la funzione manualmente per assicurarti che funzioni come previsto. Ci sono due modi per farlo:
Opzione 1: Utilizzare il CLI di DigitalOcean
Se tutto è configurato correttamente, la tua funzione verrà eseguita nel cloud, controllando i compleanni di oggi e inviando notifiche SMS.
Opzione 2: Utilizzare il Dashboard di DigitalOcean
- Vai al Pannello di Controllo di DigitalOcean.
- Naviga a Funzioni e individua la tua funzione di promemoria/compleanni.
- Clicca su Esegui per avviarla manualmente.
- Visualizza l’output e i log direttamente nella console.
Questo metodo è particolarmente utile se preferisci un’interfaccia visiva o vuoi controllare i log in un formato pulito e facile da leggere.
Consigli per il Test
Quando invochi la funzione, controllerà i compleanni che corrispondono alla data di oggi. Se c’è una corrispondenza, riceverai un messaggio di testo con i dettagli. Per testare efficacemente la funzione:
- Aggiungi uno o più compleanni nel tuo database che corrispondono alla data attuale.
- Controlla la console o i log del CLI per confermare che la funzione sia stata eseguita con successo.
🎁 Conclusione
Ecco cosa abbiamo realizzato oggi:
✅ Configurato doctl
e creato uno spazio dei nomi per il nostro progetto.
✅ Rifattorizzato lo script Python per il deployment.
✅ Impacchettato e distribuito il Servizio di Promemoria Compleanni su DigitalOcean Functions.
✅ Testato la funzione nel cloud utilizzando sia il CLI che il Dashboard di DigitalOcean.
Prossimo: Anche se questo è un grande passo avanti, stiamo ancora eseguendo la funzione manualmente. Nel prossimo post, automatizzeremo questo processo affinché il Servizio di Promemoria Compleanni venga eseguito automaticamente ogni giorno a un’ora specifica. Immagina di svegliarti con un promemoria via testo senza muovere un dito—facciamo in modo che accada domani! 🚀