Tutorial: creazione di una funzione Lambda@Edge di base (console)
Questo tutorial mostra come iniziare a utilizzare Lambda@Edge creando e configurando una funzione Node.js di esempio che viene eseguita in CloudFront. Questo esempio aggiunge intestazioni di sicurezza HTTP a una risposta quando CloudFront recupera un file. Questo può migliorare la sicurezza e la privacy di un sito web.
Per questo tutorial non è necessario avere un proprio sito web. Tuttavia, quando scegli di creare una soluzione Lambda@Edge, segui passaggi simili e scegli tra le stesse opzioni.
Argomenti
Fase 1: registrazione ad un Account AWS
Se non l’hai ancora fatto, registrati per ottenere un Account AWS. Per ulteriori informazioni, consulta Registrati per creare un Account AWS.
Fase 2: creazione e configurazione di una distribuzione CloudFront
Prima di creare la funzione Lambda@Edge di esempio, è necessario disporre di un ambiente CloudFront su cui lavorare che includa un'origine da cui distribuire contenuti.
In questo esempio, si crea una distribuzione CloudFront che utilizza un bucket Amazon S3 come origine per la distribuzione. Se disponi già di un ambiente da utilizzare, puoi saltare questa fase.
Per creare una distribuzione CloudFront con origine Amazon S3
-
Crea un bucket Amazon S3 con un file o due, ad esempio file di immagini, come contenuti di esempio. Se hai bisogno di aiuto, puoi procedere come descritto in Caricamento dei contenuti su Amazon S3. Assicurati di impostare le autorizzazioni per assegnare l'accesso pubblico in lettura agli oggetti nel bucket.
-
Crea una distribuzione CloudFront e aggiungi il tuo S3 bucket come origine seguendo i passaggi descritti in Creazione di una distribuzione Web CloudFront. Se disponi già di una distribuzione, puoi aggiungere il bucket come origine di quella distribuzione.
Suggerimento
Annota l'ID della tua distribuzione. Più avanti in questo tutorial, quando aggiungi un trigger CloudFront per la funzione, devi scegliere l’ID della distribuzione in un elenco a discesa, ad esempio
E653W22221KDDL.
Fase 3: creare la tua funzione
In questa fase, devi creare una funzione Lambda, a partire da un modello blueprint nella console Lambda. La funzione aggiunge il codice per aggiornare le intestazioni di sicurezza nella tua distribuzione CloudFront.
Per creare una funzione Lambda
-
Accedere alla Console di gestione AWS e aprire la console AWS Lambda all'indirizzo https://console.aws.amazon.com/lambda/
. Importante
Assicurati di essere nella regione Stati Uniti orientali (Virginia settentrionale) Regione AWS (us-east-1). È necessario essere in questa regione per creare funzioni Lambda@Edge.
-
Selezionare Create function (Crea funzione).
-
Nella pagina Crea funzione scegliere Usa blueprint, quindi filtrare per i blueprint CloudFront immettendo
cloudfrontnel campo di ricerca.Nota
I blueprint CloudFront sono disponibili solo nella regione US-East-1 (N. Virginia) (us-east-1).
-
Scegli il blueprint Modifica intestazione risposta HTTP come modello per la funzione.
-
Immettere le seguenti informazioni sulla funzione:
-
Nome funzione: immetti un nome per la funzione.
-
Ruolo di esecuzione: scegli come impostare le autorizzazioni per la funzione. Per utilizzare il modello di policy di autorizzazioni Lambda@Edge di base consigliato, seleziona Crea un nuovo ruolo dai modelli di policy AWS.
-
Nome ruolo: immetti un nome per il ruolo creato dal modello di policy.
-
Modelli di policy: Lambda aggiunge automaticamente il modello di policy Autorizzazioni Lambda@Edge di base poiché hai scelto un blueprint CloudFront come base per la funzione. Questo modello di policy aggiunge le autorizzazioni del ruolo di esecuzione che consentono a CloudFront di eseguire la funzione Lambda per te in posizioni CloudFront in tutto il mondo. Per ulteriori informazioni, consulta Configurazione di ruoli e autorizzazioni IAM per Lambda@Edge.
-
-
Scegli Crea funzione nella parte inferiore della pagina.
-
Nel riquadro Implementa in Lambda@Edge visualizzato, scegli Annulla. Per questo tutorial, devi modificare il codice della funzione prima di implementarla in Lambda@Edge.
-
Scorri fino alla sezione Origine del codice della pagina.
-
Sostituire il codice modello con una funzione che modifica le intestazioni di sicurezza restituite dall'origine. Ad esempio, puoi usare un codice simile a quanto segue:
'use strict'; export const handler = (event, context, callback) => { //Get contents of response const response = event.Records[0].cf.response; const headers = response.headers; //Set new headers headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age= 63072000; includeSubdomains; preload'}]; headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}]; headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}]; headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}]; headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}]; //Return modified response callback(null, response); }; -
Scegli File, Salva per salvare il codice aggiornato.
-
Seleziona Deploy (Implementa).
Procedere alla sezione successiva per aggiungere un trigger CloudFront ed eseguire la funzione.
Fase 4: aggiungere un trigger CloudFront per eseguire la funzione
Ora che disponi di una funzione Lambda per aggiornare le intestazioni di sicurezza, configura il trigger CloudFront per eseguire la funzione e aggiungere le intestazioni in qualsiasi risposta che CloudFront riceve dall'origine per la tua distribuzione.
Per configurare il trigger CloudFront per la funzione
-
Nella console Lambda, nella pagina Panoramica della funzione relativa alla funzione desiderata, scegli Aggiungi trigger.
-
Per Configurazione del trigger, scegli CloudFront.
-
Scegli Implementa in Lambda@Edge.
-
Nella pagina Implementa in Lambda@Edge, nella sezione Configura il trigger CloudFront, immetti le informazioni seguenti:
-
Distribuzione: l’ID della distribuzione CloudFront associata alla funzione. Nell’elenco a discesa, scegli l’ID della distribuzione.
-
Comportamento cache: il comportamento cache da utilizzare con il trigger. Per questo esempio, lascia il valore impostato su *, che applica a tutte le richieste il comportamento cache predefinito della distribuzione. Per ulteriori informazioni, consulta Cache Behavior Settings (Impostazioni del comportamento della cache) nell'argomento Riferimento a tutte le impostazioni di distribuzione.
-
Evento CloudFront: il trigger che specifica quando sarà eseguita la funzione. Desideriamo che la funzione per le intestazioni di sicurezza venga eseguita ogni volta che CloudFront restituisce una risposta dall'origine. Nell’elenco a discesa, scegli Risposta origine. Per ulteriori informazioni, consulta Aggiunta di trigger per una funzione Lambda@Edge.
-
-
Seleziona la casella di controllo Conferma implementazione in Lambda@Edge.
-
Scegli Deploy (Distribuisci) per aggiungere il trigger and replicare la funzione per le sedi AWS in tutto il mondo.
-
Attendi che la funzione venga replicata. Questo richiede in genere diversi minuti.
È possibile controllare se la replica è terminata accedendo alla console CloudFront
e visualizzando la distribuzione: Attendi che lo stato di distribuzione cambi da Implementazione in corso a una data e un’ora, il che significa che la funzione è stata replicata. Quindi segui la procedura nella sezione successiva per verificare che la funzione sia attiva.
Fase 5: verificare che la funzione venga eseguita
Ora che hai creato la funzione Lambda e configurato un trigger per eseguirla per una distribuzione CloudFront, verifica che la funzione si comporti come previsto. In questo esempio, controlliamo le intestazioni HTTP restituite da CloudFront, per assicurarci che vengano aggiunte le intestazioni di sicurezza.
Per verificare che la funzione Lambda@Edge aggiunga le intestazioni di sicurezza
-
In un browser, digita l'URL di un file del tuo S3 bucket. Ad esempio, puoi usare un URL simile a
https://d111111abcdef8.cloudfront.net/image.jpg.Per ulteriori informazioni sul nome di dominio CloudFront da utilizzare nell'URL del file, consulta Personalizzazione del formato URL per i file in CloudFront.
-
Apri la barra degli strumenti per sviluppatori del tuo browser Web. Ad esempio, nella finestra del browser in Chrome, apri il menu contestuale (pulsante destro del mouse) e scegli Inspect (Ispeziona).
-
Scegliere la scheda Network (Rete).
-
Ricarica la pagina per visualizzare l'immagine e quindi scegli una richiesta HTTP nel riquadro a sinistra. Vedrai le intestazioni HTTP visualizzate in un riquadro separato.
-
Scorri l'elenco delle intestazioni HTTP per verificare che le intestazioni di sicurezza previste vi siano incluse. Ad esempio, potresti vedere intestazioni simili a quelle mostrate nella schermata seguente:
Se le intestazioni di sicurezza sono incluse nel tuo elenco di intestazioni, è perfetto: hai creato la tua prima funzione Lambda@Edge. Se invece CloudFront restituisce errori o ci sono altri problemi, continua con la fase successiva per risolverli.
Fase 6: risolvere i problemi
Se CloudFront restituisce errori o non aggiunge le intestazioni di sicurezza come previsto, è possibile esaminare l'esecuzione della funzione analizzando i file di log CloudWatch. Assicurati di utilizzare i log archiviati nella sede AWS più vicina alla posizione in cui viene eseguita la funzione.
Ad esempio, se visualizzi il file da Londra, prova a modificare nella console CloudWatch la regione in Europa (Londra).
Per esaminare CloudWatch Logs per la funzione Lambda @Edge
Accedi alla Console di gestione AWS e apri la console CloudWatch all’indirizzo https://console.aws.amazon.com/cloudwatch/
. -
Cambia regione nella posizione visualizzata quando visualizzi il file nel browser. Questo è dove la funzione è in esecuzione.
-
Nel riquadro sinistro, scegli Logs (Log) per visualizzare i log per la tua distribuzione.
Per ulteriori informazioni, consulta Monitoraggio delle metriche CloudFront con Amazon CloudWatch.
Fase 7: eliminare le risorse di esempio
Se hai creato un bucket Amazon S3 e una distribuzione CloudFront solo per questa esercitazione, elimina le risorse AWS allocate in modo da non accumulare più addebiti. Una volta eliminate le risorse AWS, gli eventuali contenuti aggiunti non saranno più disponibili.
Attività
Elimina il bucket S3
Prima di eliminare il bucket Amazon S3 in uso, accertarsi che le attività di registrazione siano disattivate per quel bucket. Altrimenti, AWS continua a scrivere i log nel bucket via via che vengono eliminati.
Per disattivare il log per un bucket
Apri la console Amazon S3 su https://console.aws.amazon.com/s3/
. -
Seleziona il bucket, quindi Proprietà.
-
Da Properties (Proprietà), selezionare Log.
-
Deseleziona la casella Attivato.
-
Scegliere Save (Salva).
È possibile ora eliminare il bucket. Per ulteriori informazioni, consulta Eliminazione di un bucket nella Guida per l'utente della console di Amazon Simple Storage Service.
Eliminazione della funzione Lambda
Per istruzioni su come eliminare l’associazione della funzione Lambda e, facoltativamente, la funzione stessa, consulta Eliminazione delle funzioni e delle repliche Lambda@Edge.
Eliminazione della distribuzione CloudFront
Prima di eliminare una distribuzione CloudFront, devi disattivarla. Una distribuzione disattivata non è più funzionante e non accumula addebiti. Puoi attivare una distribuzione disattivata in qualsiasi momento. Una volta eliminata una distribuzione disattivata, non è più disponibile.
Per disabilitare ed eliminare una distribuzione CloudFront
Aprire la console CloudFront all'indirizzo https://console.aws.amazon.com/cloudfront/v4/home
. -
Selezionare la distribuzione che si vuole disattivare e scegliere Disable (Disattiva).
-
Quando viene richiesta la conferma, seleziona Sì, disattiva.
-
Selezionare la distribuzione disattivata e scegliere Delete (Elimina).
-
Quando viene richiesta la conferma, selezionare Yes, Delete (Sì, elimina).
Informazioni correlate
Ora che hai un'idea di come operano le funzioni Lambda@Edge, puoi approfondire i concetti consultando queste risorse: