IT
EspañolEnglishFrançaisDeutschPortuguêsItaliano
Accedi Inizia gratis
Lambda

Come far rispondere una funzione Lambda da un indirizzo web, senza montare nient'altro

Spiegato da zero: cos'è una funzione Lambda, cos'è un URL di funzione e come attivarlo perché il tuo codice risponda quando qualcuno apre un indirizzo web o un programma lo chiama, con la sicurezza minima per non avere sorprese.

⏱ 10 minuti ◎ Per tutti Aggiornata il 26/10/2026

Immagina un piccolo programma che vuoi far girare solo quando qualcuno lo chiama: ricevere l'avviso che un cliente ha pagato, elaborare un modulo di contatto, convertire un'immagine. Non vuoi un server acceso 24 ore su 24 per questo. Per questo esiste Lambda: dai il tuo codice ad Amazon, e Amazon lo esegue solo quando serve e ti fa pagare solo quel tempo. Niente macchine da mantenere.

La domanda è: come lo chiami? La cosa più universale è dargli un indirizzo web, un URL come https://algo.on.aws/, in modo che qualsiasi browser o programma possa "aprirlo" e il tuo codice risponda. Questa guida fa esattamente questo con l'opzione che Lambda include di serie, chiamata URL di funzione. Non c'è da installare né sottoscrivere nient'altro.

Prima di iniziare: cosa significa ogni cosa

Funzione Lambda
Un pezzo di codice tuo (in Python, Node.js, ecc.) salvato in Amazon, che viene eseguito quando qualcosa lo chiama e si spegne quando finisce. Paghi per ogni esecuzione, non per tenere qualcosa acceso.
URL
Un indirizzo web, quello che si scrive nella barra del browser. Qui, l'indirizzo con cui si può chiamare la tua funzione.
Richiesta e risposta
Quando un browser o un programma apre un URL, invia una "richiesta" (cosa vuole) e riceve una "risposta" (quello che gli viene restituito). La tua funzione riceve la richiesta e costruisce la risposta.
Webhook
Un avviso automatico che un servizio (per esempio, il tuo gateway di pagamento) invia a un tuo URL quando succede qualcosa. Per riceverlo ti serve un URL che risponda: questa guida te lo dà.
API Gateway
Un altro servizio di Amazon, più completo e più complesso, che serve anch'esso a mettere un indirizzo web davanti a una funzione. Per anni è stata l'unica opzione. Oggi, per la maggior parte dei casi semplici, non serve, e questa guida non lo usa.
CORS
Una regola di sicurezza dei browser: una pagina web può chiamare indirizzi di altri siti solo se quei siti lo permettono espressamente. Se la tua funzione sarà chiamata da una tua pagina web, bisogna dire a Lambda quali pagine possono farlo.
Registri (log)
Il diario di quello che fa la tua funzione a ogni esecuzione: quanto ha impiegato, se ha fallito e perché. Si salvano in un altro servizio chiamato CloudWatch.

Passo dopo passo

  1. Verifica che la tua funzione sappia rispondere a una richiesta web

    Quando la funzione viene chiamata dal suo indirizzo web, Lambda le consegna un pacchetto di dati con la richiesta (cosa chiedeva, con quali dati) e si aspetta che il tuo codice restituisca una risposta con due cose: un codice di stato (200 vuol dire "tutto bene") e un corpo (il testo o i dati che restituisci). Se la tua funzione è stata fatta per un altro uso, va adattata. Un esempio minimo, in Node.js, che risponde "ciao, mondo":

    export const handler = async (event) => ({
      statusCode: 200,
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ hola: "mundo" })
    });

    Se non programmi tu, passa questo paragrafo a chi lo fa: saprà cosa significa.

  2. Decidi chi potrà chiamare la funzione

    È l'unica decisione importante della guida, e conviene capirla bene. Ci sono due opzioni:

    • Solo con credenziali AWS (l'opzione si chiama AWS_IAM): potrà chiamarla solo un tuo programma che abbia permessi nel tuo account Amazon. È la più sicura, ma un browser normale o un servizio esterno non potranno usarla.
    • Aperta (l'opzione si chiama NONE): chiunque conosca l'indirizzo potrà chiamarla. È quello che ti serve se la chiamerà un servizio esterno (un webhook) o una pagina web. In cambio, la sicurezza deve metterla il tuo codice: controllare una password o una firma a ogni chiamata. Lo vediamo nell'ultimo passo.

    Regola semplice: se non sai quale scegliere, scegli la prima. Se la funzione deve ricevere chiamate da fuori del tuo account, scegli la seconda e non saltare l'ultimo passo.

  3. Attiva l'indirizzo web

    Nella console AWS entra in Lambda, apri la tua funzione e clicca sulla scheda Configuration. Nel menu a sinistra scegli Function URL e clicca su Create function URL. Scegli il tipo di accesso del passo precedente.

    Se la chiamerà una tua pagina web da un altro dominio, espandi CORS e scrivi l'indirizzo di quella pagina in "Allow origin" (per esempio https://miweb.com). Se metti un asterisco, qualsiasi sito al mondo potrà chiamarla dal browser; evitalo a meno che sia quello che vuoi. Salva. In alto compare il nuovo indirizzo, con questo aspetto: https://xxxxxxxx.lambda-url.eu-west-1.on.aws/. Quello è il tuo URL.

  4. Provalo

    Se hai scelto l'opzione aperta, copia l'indirizzo e incollalo nel browser: dovresti vedere la risposta della tua funzione (nell'esempio, il testo "ciao, mondo"). Funziona già.

    Se preferisci provarlo da un terminale, in CloudShell (l'icona del terminale nella barra superiore della console AWS) scrivi:

    curl -i https://xxxxxxxx.lambda-url.eu-west-1.on.aws/

    Se hai scelto l'opzione con credenziali, il browser dirà "Forbidden": è quello che ci si aspetta, perché non porta credenziali. La prova dovrà farla il tuo programma che la chiamerà, usando le librerie AWS, che sanno già firmare le richieste.

  5. Guarda il diario delle esecuzioni

    Scheda Monitor, pulsante View CloudWatch logs. Ogni chiamata lascia un'annotazione con quanto ha impiegato e quello che il tuo codice ha scritto. Se una chiamata restituisce un errore, qui vedrai il motivo. Un consiglio che fa risparmiare: in quel gruppo di log, imposta una conservazione di, per esempio, 30 giorni; altrimenti i log si conservano per sempre e si pagano.

  6. Se l'hai lasciata aperta, proteggila

    Aperta vuol dire che chiunque può chiamarla, quindi il tuo codice deve controllare qualcosa a ogni chiamata. Di solito: il servizio che ti invia il webhook include una firma o una chiave segreta in ogni avviso, e la tua funzione verifica che sia corretta prima di fare qualsiasi cosa. Quella chiave salvala nelle variabili d'ambiente della funzione (scheda Configuration), non scritta nel codice.

    E metti un tetto a quante volte può essere eseguita contemporaneamente (concorrenza riservata, in Configuration): se qualcuno bombarda l'indirizzo, il tetto evita che la fattura schizzi.

Cosa può andare storto

La pagina web dice qualcosa su "CORS" e non riceve risposta

È il browser che protegge l'utente: la tua funzione non ha detto che quella pagina può chiamarla. Modifica l'URL di funzione, sezione CORS, e aggiungi l'indirizzo esatto della tua pagina e il tipo di richiesta che usa (GET, POST). Se anche il tuo codice restituisce intestazioni CORS per conto suo, toglile da uno dei due posti: duplicate falliscono lo stesso.

Restituisce "Forbidden" anche se l'ho lasciata aperta

Alla funzione manca il permesso che lascia chiamarla a chiunque. Creando l'URL dalla console si aggiunge da solo; se l'ha creato un programma o uno script, chiedi a chi l'ha fatto di aggiungere il permesso lambda:InvokeFunctionUrl per il pubblico (principal *).

La prima chiamata impiega vari secondi e poi va veloce

Si chiama "avvio a freddo": se la funzione non viene usata da un po', Amazon deve caricarla di nuovo. Per un webhook non importa. Per un sito con utenti in attesa, si può ridurre rendendo la funzione più piccola o pagando per tenerla sempre pronta (concorrenza con provisioning).

Mi serve che l'indirizzo sia del mio dominio, o controllare chi chiama e quanto

Per questo serve già API Gateway, il servizio più completo che citavamo all'inizio, oppure mettere CloudFront davanti. L'URL di funzione è la via breve e per la maggior parte basta; quando non basterà più, te ne accorgerai.

In Simplio

In Simplio le tue funzioni Lambda compaiono con il loro stato e i loro log in un elenco; se sono in Python, Node.js o Ruby puoi modificare il codice, salvare con il secondo fattore e provarle al momento vedendo la risposta. E dar loro un indirizzo web è un clic, con il tipo di accesso spiegato in chiaro. Ogni persona del tuo team vede solo le funzioni che le assegni.

La stessa cosa, in AWS e in Simplio

Nella console di AWSIn Simplio
Dare l'indirizzo web alla funzioneLambda, Configuration, Function URL, tipo di accesso, CORS: 5 passiPulsante "URL pubblico" nella funzione, con il tipo di accesso spiegato: 1 clic
Provarla e vedere cosa ha restituitoBrowser o curl, e CloudWatch per i logProvare da Simplio vedendo risposta e log nella stessa schermata
Cambiare il codiceEditor di Lambda, senza controllo su chi l'ha toccatoEditor con secondo fattore al salvataggio, e registro attività

Provalo gratis per 15 giorni Vedi come funziona

Tutto questo, senza la console di AWS

Simplio è un pannello in italiano per gestire i tuoi account AWS: macchine, copie programmate, database, domini, e-mail e quanto ti addebita AWS, con permessi per persona e doppio fattore. Senza installare nulla sui tuoi server.

Inizia gratis per 15 giorni, senza carta

Sei già cliente? Area clienti.