Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Tutorial: creazione di un endpoint webhook utilizzando l'URL di una funzione Lambda
In questo tutorial, crei l'URL di una funzione Lambda per implementare un endpoint webhook. Un webhook è una comunicazione leggera basata sugli eventi che invia automaticamente i dati tra le applicazioni tramite HTTP. È possibile utilizzare un webhook per ricevere aggiornamenti immediati sugli eventi che si verificano in un altro sistema, ad esempio quando un nuovo cliente si registra su un sito Web, viene elaborato un pagamento o viene caricato un file.
Con Lambda, i webhook possono essere implementati utilizzando gli URL delle funzioni Lambda o l'API Gateway. Gli URL delle funzioni sono un'ottima scelta per webhook semplici che non richiedono funzionalità come l'autorizzazione avanzata o la convalida delle richieste.
Suggerimento
Se non sei sicuro di quale sia la soluzione migliore per il tuo caso d'uso particolare, consulta. Seleziona un metodo per richiamare la tua funzione evento Lambda utilizzando una richiesta HTTP
Prerequisiti
Per completare questo tutorial, devi avere Python (versione 3.8 o successiva) o Node.js (versione 18 o successiva) installato sul tuo computer locale.
Per testare l'endpoint utilizzando una richiesta HTTP, il tutorial utilizza curl
Creare la funzione evento Lambda
Per prima cosa crea la funzione Lambda Event che viene eseguita quando una richiesta HTTP viene inviata al tuo endpoint webhook. In questo esempio, l'applicazione di invio invia un aggiornamento ogni volta che viene inviato un pagamento e indica nel corpo della richiesta HTTP se il pagamento è andato a buon fine. La Lambda Event Function analizza la richiesta e interviene in base allo stato del pagamento. In questo esempio, il codice stampa solo l'ID dell'ordine per il pagamento, ma in un'applicazione reale è possibile aggiungere l'ordine a un database o inviare una notifica.
La funzione implementa anche il metodo di autenticazione più comune utilizzato per i webhook, l'autenticazione dei messaggi basata su hash (HMAC). Con questo metodo, sia l'applicazione di invio che quella di ricezione condividono una chiave segreta. L'applicazione di invio utilizza un algoritmo di hashing per generare una firma univoca utilizzando questa chiave insieme al contenuto del messaggio e include la firma nella richiesta del webhook come intestazione HTTP. L'applicazione ricevente ripete quindi questo passaggio, generando la firma utilizzando la chiave segreta e confronta il valore risultante con la firma inviata nell'intestazione della richiesta. Se il risultato corrisponde, la richiesta viene considerata legittima.
Crea la funzione utilizzando la console Lambda con Python o runtime. Node.js
Crea la chiave segreta
Per autenticare la richiesta webhook, la funzione evento Lambda utilizza una chiave segreta che condivide con l'applicazione chiamante. In questo esempio, la chiave viene memorizzata in una variabile di ambiente. In un'applicazione di produzione, non includere informazioni sensibili come le password nel codice funzione. Invece, crea un AWS Secrets Manager segreto e poi usa l'estensione Lambda AWS Parameters and Secrets per recuperare le credenziali nella tua Lambda Event Function.
Crea e archivia la chiave segreta del webhook
-
Genera una stringa lunga e casuale utilizzando un generatore di numeri casuali crittograficamente sicuro. Puoi usare i seguenti frammenti di codice in Python o Node.js per generare e stampare un segreto di 32 caratteri, oppure usare il tuo metodo preferito.
-
Memorizza la stringa generata come variabile di ambiente per la tua funzione effettuando le seguenti operazioni:
-
Nella scheda Configurazione della funzione, seleziona Variabili di ambiente.
-
Scegli Modifica.
-
Scegli Add environment variable (Aggiungi variabile d'ambiente).
-
Per Chiave
WEBHOOK_SECRET, inserisci, quindi per Valore, inserisci il segreto generato nel passaggio precedente. -
Selezionare Salva.
-
Dovrai utilizzare nuovamente questo segreto più avanti nel tutorial per testare la tua funzione, quindi prendine nota ora.
Crea l'endpoint URL della funzione
Crea un endpoint per il tuo webhook utilizzando l'URL di una funzione Lambda. Poiché utilizzi il tipo di autenticazione di NONE per creare un endpoint con accesso pubblico, chiunque disponga dell'URL può richiamare la tua funzione. Per ulteriori informazioni sul controllo dell'accesso agli URL delle funzioni, consulta. Controllo dell'accesso agli URL della funzione Lambda Se hai bisogno di opzioni di autenticazione più avanzate per il tuo webhook, prendi in considerazione l'utilizzo di API Gateway.
Crea l'endpoint URL della funzione
-
Nella scheda Configurazione della funzione evento, seleziona URL della funzione.
-
Scegli Crea URL della funzione.
-
Per il tipo di autenticazione, seleziona NESSUNA.
-
Selezionare Salva.
L'endpoint per l'URL della funzione appena creato viene visualizzato nel riquadro URL della funzione. Copia l'endpoint per utilizzarlo più avanti nel tutorial.
Prova la funzione degli eventi nella console
Prima di utilizzare una richiesta HTTP per richiamare la funzione evento utilizzando l'endpoint URL, testala nella console per confermare che il codice funzioni come previsto.
Per verificare la Event Function nella console, devi prima calcolare una firma webhook utilizzando il segreto generato in precedenza nel tutorial con il seguente payload JSON di test:
{ "type": "payment.success", "orderId": "1234", "amount": "99.99" }
Usa uno dei seguenti esempi di Python o di Node.js codice per calcolare la firma del webhook usando il tuo segreto.
Ora puoi testare il codice della funzione utilizzando una richiesta HTTP di prova nella console.
Verifica la funzione degli eventi nella console
-
Seleziona la scheda Codice per la tua funzione evento.
-
Nella sezione EVENTI DI TEST, scegli Crea nuovo evento di test
-
Per Event name (Nome evento), immettere
myEvent. -
Sostituisci il JSON esistente copiando e incollando quanto segue nel riquadro Event JSON. Sostituisci la firma del webhook con il valore calcolato nel passaggio precedente.
{ "headers": { "Content-Type": "application/json", "x-webhook-signature": "2d672e7a0423fab740fbc040e801d1241f2df32d2ffd8989617a599486553e2a" }, "body": "{\"type\": \"payment.success\", \"orderId\": \"1234\", \"amount\": \"99.99\"}" } -
Selezionare Salva.
-
Scegli Richiama .
Verrà visualizzato un output simile al seguente:
Verifica la funzione dell'evento utilizzando una richiesta HTTP
Usa lo strumento da riga di comando curl per testare il tuo endpoint webhook.
Testa la funzione degli eventi utilizzando le richieste HTTP
-
In un terminale o in un programma shell, esegui il seguente comando curl. Sostituisci l'URL con il valore dell'endpoint URL della tua funzione e sostituisci la firma del webhook con la firma calcolata utilizzando la tua chiave segreta.
curl -X POSThttps://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/\ -H "Content-Type: application/json" \ -H "x-webhook-signature:d5f52b76ffba65ff60ea73da67bdf1fc5825d4db56b5d3ffa0b64b7cb85ef48b" \ -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'Verrà visualizzato l’output seguente:
{"received": true} -
Controlla CloudWatch i log della tua funzione per confermare che abbia analizzato correttamente il payload effettuando le seguenti operazioni:
-
Apri la pagina del gruppo Logs
nella CloudWatch console Amazon. -
Seleziona il gruppo di log della tua funzione (
/aws/lambda/myLambdaWebhook). -
Seleziona il flusso di log più recente.
Dovresti vedere un output simile al seguente nei log della tua funzione:
-
-
Verifica che il codice rilevi una firma non valida eseguendo il seguente comando curl. Sostituisci l'URL con il tuo endpoint URL della funzione.
curl -X POSThttps://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/\ -H "Content-Type: application/json" \ -H "x-webhook-signature: abcdefg" \ -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'Verrà visualizzato l’output seguente:
{"error": "Invalid signature"}
Pulizia delle risorse
Ora è possibile eliminare le risorse create per questo tutorial, a meno che non si voglia conservarle. Eliminando AWS le risorse che non utilizzi più, eviti addebiti inutili ai tuoi. Account AWS
Per eliminare la funzione evento Lambda
-
Apri la pagina Event Functions
della console Lambda. -
Seleziona la funzione di evento che hai creato.
-
Scegliere Operazioni, Elimina.
-
Inserisci
confirmnel campo di immissione del testo, quindi scegli Elimina.
Quando hai creato la Lambda Event Function nella console, Lambda ha anche creato un ruolo di esecuzione per la tua funzione.
Come eliminare il ruolo di esecuzione
-
Aprire la pagina Ruoli
della console IAM. -
Seleziona il ruolo di esecuzione creato da Lambda. Il ruolo ha il formato
myLambdaWebhook-role-<random string>del nome. -
Scegliere Elimina.
-
Inserisci il nome del ruolo nel campo di immissione testo e seleziona Elimina.