Abilita l'accesso a Internet per le funzioni Lambda connesse a VPC - AWS Lambda

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à.

Abilita l'accesso a Internet per le funzioni Lambda connesse a VPC

Per impostazione predefinita, le funzioni Lambda vengono eseguite in un VPC gestito da Lambda con accesso a Internet. Per accedere alle risorse in un VPC nel tuo account, puoi aggiungere una configurazione VPC a una funzione. Ciò limita la funzione alle risorse all'interno di quel VPC, a meno che il VPC non abbia accesso a Internet. Questa pagina spiega come fornire l'accesso a Internet alle funzioni Lambda connesse a VPC.

Creazione del VPC

Il flusso di lavoro Create VPC crea tutte le risorse VPC necessarie per una funzione Lambda per accedere alla rete Internet pubblica da una sottorete privata, incluse sottoreti, gateway NAT, gateway Internet e voci della tabella di routing.

Per creare il VPC
  1. Apri alla console Amazon VPC all'indirizzo https://console.aws.amazon.com/vpc/.

  2. Nel pannello di controllo, scegli Crea VPC.

  3. Per Risorse da creare, scegli VPC e altro.

  4. Configurazione del VPC

    1. Per Name tag auto-generation (Generazione automatica di tag nome), immetti un nome per il VPC.

    2. Per Blocco CIDR IPv4, mantieni il suggerimento predefinito o, in alternativa, inserisci il blocco CIDR richiesto dall'applicazione o dalla rete.

    3. Se l'applicazione comunica utilizzando indirizzi IPv6, scegli Blocco CIDR IPv6, Blocco CIDR IPv6 fornito da Amazon.

  5. Configurazione delle sottoreti

    1. In Numero di zone di disponibilità, scegli 2. Consigliamo almeno due AZ per un'elevata disponibilità.

    2. Per Number of public subnets (Numero di sottoreti pubbliche), scegli 2.

    3. Per Number of private subnets (Numero di sottoreti private), scegli 2.

    4. Puoi mantenere il blocco CIDR predefinito per la sottorete pubblica o, in alternativa, espandere Personalizza blocchi CIDR della sottorete e inserire un blocco CIDR. Per ulteriori informazioni, consulta Subnet CIDR blocks.

  6. Per Gateway NAT, scegli 1 per AZ per migliorare la resilienza.

  7. Per il gateway Internet solo Egress, scegli se hai scelto di includere un blocco CIDR IPv6.

  8. Per gli endpoint VPC, mantieni l'impostazione predefinita (Gateway S3). Questa opzione non prevede alcun costo. Per ulteriori informazioni, consulta Tipi di endpoint VPC per Amazon S3.

  9. Per le opzioni DNS, mantieni le impostazioni predefinite.

  10. Seleziona Crea VPC.

Configura la funzione Lambda

Per configurare un VPC quando si crea una funzione
  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegli Crea funzione.

  3. In Informazioni di base, immettere un nome per la funzione in Nome funzione.

  4. Espandere Advanced settings (Impostazioni avanzate).

  5. Seleziona Abilita VPC, quindi scegli un VPC.

  6. (Facoltativo) Per consentire il traffico IPv6 in uscita, selezionare Consenti il traffico IPv6 per sottoreti dual-stack.

  7. Per Sottoreti, seleziona tutte le sottoreti private. Le sottoreti private possono accedere a Internet tramite il gateway NAT. Il collegamento di una funzione a una sottorete pubblica non le consente l'accesso a Internet.

    Nota

    Se hai selezionato Consenti il traffico IPv6 per sottoreti dual-stack, tutte le sottoreti selezionate devono avere un blocco CIDR IPv4 e un blocco CIDR IPv6.

  8. Per Gruppi di sicurezza, seleziona un gruppo di sicurezza che consenta il traffico in uscita.

  9. Scegli Crea funzione.

Lambda crea automaticamente un ruolo di esecuzione con la policy AWSLambdaVPCAccessExecutionRole AWS gestita. Le autorizzazioni in questa politica sono necessarie solo per creare interfacce di rete elastiche per la configurazione VPC, non per richiamare la tua funzione. Per applicare le autorizzazioni con privilegi minimi, puoi rimuovere la AWSLambdaVPCAccessExecutionRolepolicy dal tuo ruolo di esecuzione dopo aver creato la funzione e la configurazione del VPC. Per ulteriori informazioni, consulta Autorizzazioni IAM richieste.

Per configurare un VPC per una funzione esistente

Per aggiungere una configurazione VPC a una funzione esistente, il ruolo di esecuzione della funzione deve disporre dell'autorizzazione per creare e gestire interfacce di rete elastiche. La politica AWSLambdaVPCAccessExecutionRole AWS gestita include le autorizzazioni richieste. Per applicare le autorizzazioni con privilegi minimi, puoi rimuovere la AWSLambdaVPCAccessExecutionRolepolicy dal tuo ruolo di esecuzione dopo aver creato la configurazione VPC.

  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegliere una funzione.

  3. Scegli la scheda Configurazione, quindi scegli VPC.

  4. In VPC, scegli Modifica.

  5. Seleziona il VPC

  6. (Facoltativo) Per consentire il traffico IPv6 in uscita, selezionare Consenti il traffico IPv6 per sottoreti dual-stack.

  7. Per Sottoreti, seleziona tutte le sottoreti private. Le sottoreti private possono accedere a Internet tramite il gateway NAT. Il collegamento di una funzione a una sottorete pubblica non le consente l'accesso a Internet.

    Nota

    Se hai selezionato Consenti il traffico IPv6 per sottoreti dual-stack, tutte le sottoreti selezionate devono avere un blocco CIDR IPv4 e un blocco CIDR IPv6.

  8. Per Gruppi di sicurezza, seleziona un gruppo di sicurezza che consenta il traffico in uscita.

  9. Selezionare Salva.

Test della funzione

Usa il seguente codice di esempio per confermare che la tua funzione connessa al VPC possa raggiungere la rete Internet pubblica. In caso di successo, il codice restituisce un 200 codice di stato. In caso di esito negativo, la funzione scade.

Node.js

Questo esempio utilizzafetch, che è disponibile nei runtime nodejs18.x e nelle versioni successive.

  1. Nel riquadro Codice sorgente della console Lambda, incolla il codice seguente nel file index.mjs. La funzione effettua una richiesta HTTP GET a un endpoint pubblico e restituisce il codice di risposta HTTP per verificare se la funzione ha accesso alla rete Internet pubblica.

    Editor di codice per console Lambda.
    Esempio — Richiesta HTTP con async/await
    const url = "https://aws.amazon.com/"; export const handler = async(event) => { try { // fetch is available with Node.js 18 and later runtimes const res = await fetch(url); console.info("status", res.status); return res.status; } catch (e) { console.error(e); return 500; } };
  2. Seleziona Deploy (Implementa).

  3. Seleziona la scheda Test.

    Scheda Test della console Lambda.
  4. Scegli Test (Esegui test).

  5. La funzione restituisce un codice di 200 stato. Ciò significa che la funzione dispone di un accesso a Internet in uscita.

    Scheda Test della console Lambda.

    Se la funzione non riesce a raggiungere la rete Internet pubblica, viene visualizzato un messaggio di errore simile al seguente:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }
Python
  1. Nel riquadro Codice sorgente della console Lambda, incolla il codice seguente nel file lambda_function.py. La funzione effettua una richiesta HTTP GET a un endpoint pubblico e restituisce il codice di risposta HTTP per verificare se la funzione ha accesso alla rete Internet pubblica.

    Editor di codice per console Lambda.
    import urllib.request def lambda_handler(event, context): try: response = urllib.request.urlopen('https://aws.amazon.com') status_code = response.getcode() print('Response Code:', status_code) return status_code except Exception as e: print('Error:', e) raise e
  2. Seleziona Deploy (Implementa).

  3. Seleziona la scheda Test.

    Scheda Test della console Lambda.
  4. Scegli Test (Esegui test).

  5. La funzione restituisce un codice di 200 stato. Ciò significa che la funzione dispone di un accesso a Internet in uscita.

    Scheda Test della console Lambda.

    Se la funzione non riesce a raggiungere la rete Internet pubblica, viene visualizzato un messaggio di errore simile al seguente:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }

Se disponi già di un VPC ma devi configurare l'accesso pubblico a Internet per una funzione Lambda, segui questi passaggi. Questa procedura presuppone che il VPC disponga di almeno due sottoreti. Se non disponi di due sottoreti, consulta Create a subnet nella Amazon VPC User Guide.

Verifica la configurazione della tabella delle rotte

  1. Apri alla console Amazon VPC all'indirizzo https://console.aws.amazon.com/vpc/.

  2. Scegli l'ID VPC.

    Elenco dei VPC della console VPC.
  3. Scorri verso il basso fino alla sezione Mappa delle risorse. Nota le mappature della tabella dei percorsi. Apri ogni tabella di routing mappata su una sottorete.

    Sezione della mappa delle risorse della console VPC
  4. Scorri verso il basso fino alla scheda Percorsi. Controlla i percorsi per determinare se una delle seguenti condizioni è vera. Ciascuno di questi requisiti deve essere soddisfatto da una tabella dei percorsi separata.

    • Il traffico collegato a Internet (0.0.0.0/0per IPv4, ::/0 per IPv6) viene indirizzato a un gateway Internet (). igw-xxxxxxxxxx Ciò significa che la sottorete associata alla tabella delle rotte è una sottorete pubblica.

      Nota

      Se la sottorete non ha un blocco CIDR IPv6, vedrete solo la route IPv4 (). 0.0.0.0/0

      Esempio tabella di routing di sottorete pubblica
      Tabella di routing di sottorete pubblica con percorso verso il gateway Internet
    • Il traffico collegato a Internet per IPv4 (0.0.0.0/0) viene indirizzato a un gateway NAT (nat-xxxxxxxxxx) associato a una sottorete pubblica. Ciò significa che la sottorete è una sottorete privata che può accedere a Internet tramite il gateway NAT.

      Nota

      Se la sottorete ha un blocco CIDR IPv6, la tabella di routing deve inoltre indirizzare il traffico IPv6 legato a Internet () verso un gateway Internet di sola uscita (). ::/0 eigw-xxxxxxxxxx Se la sottorete non ha un blocco CIDR IPv6, vedrete solo la route IPv4 (). 0.0.0.0/0

      Esempio tabella di routing di sottorete privata
      tabella di routing di sottorete privata con percorso verso il gateway NAT
  5. Ripeti il passaggio precedente fino a quando non avrai esaminato ogni tabella di routing associata a una sottorete nel tuo VPC e avrai confermato di avere una tabella di routing con un gateway Internet e una tabella di routing con un gateway NAT.

    Se non disponi di due tabelle di routing, una con un percorso verso un gateway Internet e una con un percorso verso un gateway NAT, segui questi passaggi per creare le risorse mancanti e le voci della tabella di routing.

Segui questi passaggi per creare una tabella di routing e associarla a una sottorete.

Per creare una tabella di routing personalizzata utilizzando la console Amazon VPC
  1. Apri la console Amazon VPC all'indirizzo https://console.aws.amazon.com/vpc/.

  2. Nel riquadro di navigazione, seleziona Tabelle di routing.

  3. Selezionare Create route table (Crea tabella di instradamento).

  4. (Facoltativo) In Name (Nome), inserisci un nome per la tabella di instradamento.

  5. In VPC, seleziona il VPC.

  6. (Facoltativo) Per aggiungere un tag, scegli Add new tag (Aggiungi nuovo tag) e inserisci la chiave e il valore del tag.

  7. Selezionare Create route table (Crea tabella di instradamento).

  8. Nella scheda Associazioni sottorete scegli Modifica associazioni sottorete.

    Collega il gateway Internet al VPC
  9. Seleziona la casella di controllo per la sottorete da associare alla tabella di instradamento.

  10. Scegli Salva associazioni.

Segui questi passaggi per creare un gateway Internet, collegarlo al tuo VPC e aggiungerlo alla tabella di routing della sottorete pubblica.

Creare un gateway Internet
  1. Accedere alla console Amazon VPC all'indirizzo https://console.aws.amazon.com/vpc/.

  2. Nel pannello di navigazione, scegli Internet gateways (Gateway Internet).

  3. Scegliere Crea gateway Internet.

  4. (Facoltativo) Inserisci un nome per il gateway Internet.

  5. (Facoltativo) Per aggiungere un tag, scegli Add new tag (Aggiungi nuovo tag) e immetti la chiave e il valore del tag.

  6. Scegliere Crea gateway Internet.

  7. Scegli Collega a un VPC dal banner nella parte superiore dello schermo, seleziona un VPC disponibile, quindi scegli Collega gateway internet.

    Collega il gateway Internet al VPC
  8. Scegli l'ID VPC.

    Pagina dei dettagli del gateway Internet
  9. Scegli nuovamente l'ID VPC per aprire la pagina dei dettagli del VPC.

    Elenco VPC filtrato
  10. Scorri verso il basso fino alla sezione Mappa delle risorse, quindi scegli una sottorete. I dettagli della sottorete vengono visualizzati in una nuova scheda.

    Console VPC Mappa delle risorse con elenco di sottoreti.
  11. Scegli il link nella tabella delle rotte.

    Collegamento alla tabella delle rotte nella pagina dei dettagli della sottorete
  12. Scegli l'ID della tabella delle rotte per aprire la pagina dei dettagli della tabella delle rotte.

    Elenco filtrato della tabella dei percorsi
  13. In Percorsi, scegli Modifica percorsi.

    Elenco dei percorsi con il pulsante Modifica percorsi
  14. Scegli Aggiungi percorso, quindi inserisci 0.0.0.0/0 nella casella Destinazione.

    Aggiungi una destinazione per un nuovo percorso
  15. Per Target, seleziona Internet gateway, quindi scegli il gateway Internet creato in precedenza. Se la sottorete ha un blocco CIDR IPv6, devi anche aggiungere un percorso ::/0 per lo stesso gateway Internet.

    Aggiungi destinazione per una nuova rotta
  16. Seleziona Salvataggio delle modifiche.

Segui questi passaggi per creare un gateway NAT, associarlo a una sottorete pubblica e aggiungerlo alla tabella di routing della sottorete privata.

Per creare un gateway NAT e associarlo a una sottorete pubblica
  1. Nel riquadro di navigazione, scegli Gateway NAT.

  2. Scegli Crea gateway NAT.

  3. (Facoltativo) Inserisci un nome per il tuo gateway NAT.

  4. Per Subnet, seleziona una sottorete pubblica nel tuo VPC. (Una sottorete pubblica è una sottorete che ha un percorso diretto verso un gateway Internet nella tabella delle rotte.)

    Nota

    I gateway NAT sono associati a una sottorete pubblica, ma la voce della tabella di routing si trova nella sottorete privata.

  5. Per Elastic IP allocation ID, seleziona un indirizzo IP elastico o scegli Allocate Elastic IP.

  6. Scegli Crea gateway NAT.

Per aggiungere una route al gateway NAT nella tabella di routing della sottorete privata
  1. Nel pannello di navigazione, scegli Subnets (Sottoreti).

  2. Seleziona una sottorete privata nel tuo VPC. (Una sottorete privata è una sottorete che non ha un percorso verso un gateway Internet nella tabella delle rotte.)

  3. Scegli il link nella tabella delle rotte.

    Collegamento alla tabella delle rotte nella pagina dei dettagli della sottorete
  4. Scorri verso il basso e scegli la scheda Percorsi, quindi scegli Modifica percorsi

    Scheda Percorsi nella pagina dei dettagli della tabella dei percorsi
  5. Scegli Aggiungi percorso, quindi inserisci 0.0.0.0/0 nella casella Destinazione.

    Aggiungi una destinazione per un nuovo percorso
  6. Per Target, seleziona NAT gateway, quindi scegli il gateway NAT che hai creato in precedenza.

    Aggiungi destinazione per un nuovo percorso
  7. Seleziona Salvataggio delle modifiche.

Segui questi passaggi per creare un gateway Internet solo in uscita e aggiungerlo alla tabella di routing della tua sottorete privata.

Per creare un gateway internet egress-only
  1. Nel riquadro di navigazione, seleziona Gateway Internet solo in uscita.

  2. Seleziona Crea gateway Internet solo in uscita.

  3. (Facoltativo) Inserisci un nome.

  4. Selezionare il VPC nel quale creare l'Internet Gateway egress-only.

  5. Seleziona Crea gateway Internet solo in uscita.

  6. Scegli il link sotto Allegato VPC ID.

    Pagina dei dettagli del gateway Internet solo in uscita
  7. Scegli il link sotto VPC ID per aprire la pagina dei dettagli del VPC.

  8. Scorri verso il basso fino alla sezione Mappa delle risorse, quindi scegli una sottorete privata. I dettagli della sottorete vengono visualizzati in una nuova scheda.

    Console VPC Mappa delle risorse con elenco di sottoreti.
  9. Scegli il link nella tabella delle rotte.

    Collegamento alla tabella delle rotte nella pagina dei dettagli della sottorete
  10. Scegli l'ID della tabella delle rotte per aprire la pagina dei dettagli della tabella delle rotte.

    Elenco filtrato della tabella dei percorsi
  11. In Percorsi, scegli Modifica percorsi.

    Elenco dei percorsi con il pulsante Modifica percorsi
  12. Scegli Aggiungi percorso, quindi inserisci ::/0 nella casella Destinazione.

    Aggiungi una destinazione per un nuovo percorso
  13. Per Target, seleziona Gateway Internet Only Egress, quindi scegli il gateway creato in precedenza.

    Aggiungi destinazione per un nuovo percorso
  14. Seleziona Salvataggio delle modifiche.

Configura la funzione Lambda

Per configurare un VPC quando si crea una funzione
  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegli Crea funzione.

  3. In Informazioni di base, immettere un nome per la funzione in Nome funzione.

  4. Espandere Advanced settings (Impostazioni avanzate).

  5. Seleziona Abilita VPC, quindi scegli un VPC.

  6. (Facoltativo) Per consentire il traffico IPv6 in uscita, selezionare Consenti il traffico IPv6 per sottoreti dual-stack.

  7. Per Sottoreti, seleziona tutte le sottoreti private. Le sottoreti private possono accedere a Internet tramite il gateway NAT. Il collegamento di una funzione a una sottorete pubblica non le consente l'accesso a Internet.

    Nota

    Se hai selezionato Consenti il traffico IPv6 per sottoreti dual-stack, tutte le sottoreti selezionate devono avere un blocco CIDR IPv4 e un blocco CIDR IPv6.

  8. Per Gruppi di sicurezza, seleziona un gruppo di sicurezza che consenta il traffico in uscita.

  9. Scegli Crea funzione.

Lambda crea automaticamente un ruolo di esecuzione con la policy AWSLambdaVPCAccessExecutionRole AWS gestita. Le autorizzazioni in questa politica sono necessarie solo per creare interfacce di rete elastiche per la configurazione VPC, non per richiamare la tua funzione. Per applicare le autorizzazioni con privilegi minimi, puoi rimuovere la AWSLambdaVPCAccessExecutionRolepolicy dal tuo ruolo di esecuzione dopo aver creato la funzione e la configurazione del VPC. Per ulteriori informazioni, consulta Autorizzazioni IAM richieste.

Per configurare un VPC per una funzione esistente

Per aggiungere una configurazione VPC a una funzione esistente, il ruolo di esecuzione della funzione deve disporre dell'autorizzazione per creare e gestire interfacce di rete elastiche. La politica AWSLambdaVPCAccessExecutionRole AWS gestita include le autorizzazioni richieste. Per applicare le autorizzazioni con privilegi minimi, puoi rimuovere la AWSLambdaVPCAccessExecutionRolepolicy dal tuo ruolo di esecuzione dopo aver creato la configurazione VPC.

  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegliere una funzione.

  3. Scegli la scheda Configurazione, quindi scegli VPC.

  4. In VPC, scegli Modifica.

  5. Seleziona il VPC

  6. (Facoltativo) Per consentire il traffico IPv6 in uscita, selezionare Consenti il traffico IPv6 per sottoreti dual-stack.

  7. Per Sottoreti, seleziona tutte le sottoreti private. Le sottoreti private possono accedere a Internet tramite il gateway NAT. Il collegamento di una funzione a una sottorete pubblica non le consente l'accesso a Internet.

    Nota

    Se hai selezionato Consenti il traffico IPv6 per sottoreti dual-stack, tutte le sottoreti selezionate devono avere un blocco CIDR IPv4 e un blocco CIDR IPv6.

  8. Per Gruppi di sicurezza, seleziona un gruppo di sicurezza che consenta il traffico in uscita.

  9. Selezionare Salva.

Test della funzione

Usa il seguente codice di esempio per confermare che la tua funzione connessa al VPC possa raggiungere la rete Internet pubblica. In caso di successo, il codice restituisce un 200 codice di stato. In caso di esito negativo, la funzione scade.

Node.js

Questo esempio utilizzafetch, che è disponibile nei runtime nodejs18.x e nelle versioni successive.

  1. Nel riquadro Codice sorgente della console Lambda, incolla il codice seguente nel file index.mjs. La funzione effettua una richiesta HTTP GET a un endpoint pubblico e restituisce il codice di risposta HTTP per verificare se la funzione ha accesso alla rete Internet pubblica.

    Editor di codice per console Lambda.
    Esempio — Richiesta HTTP con async/await
    const url = "https://aws.amazon.com/"; export const handler = async(event) => { try { // fetch is available with Node.js 18 and later runtimes const res = await fetch(url); console.info("status", res.status); return res.status; } catch (e) { console.error(e); return 500; } };
  2. Seleziona Deploy (Implementa).

  3. Seleziona la scheda Test.

    Scheda Test della console Lambda.
  4. Scegli Test (Esegui test).

  5. La funzione restituisce un codice di 200 stato. Ciò significa che la funzione dispone di un accesso a Internet in uscita.

    Scheda Test della console Lambda.

    Se la funzione non riesce a raggiungere la rete Internet pubblica, viene visualizzato un messaggio di errore simile al seguente:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }
Python
  1. Nel riquadro Codice sorgente della console Lambda, incolla il codice seguente nel file lambda_function.py. La funzione effettua una richiesta HTTP GET a un endpoint pubblico e restituisce il codice di risposta HTTP per verificare se la funzione ha accesso alla rete Internet pubblica.

    Editor di codice per console Lambda.
    import urllib.request def lambda_handler(event, context): try: response = urllib.request.urlopen('https://aws.amazon.com') status_code = response.getcode() print('Response Code:', status_code) return status_code except Exception as e: print('Error:', e) raise e
  2. Seleziona Deploy (Implementa).

  3. Seleziona la scheda Test.

    Scheda Test della console Lambda.
  4. Scegli Test (Esegui test).

  5. La funzione restituisce un codice di 200 stato. Ciò significa che la funzione dispone di un accesso a Internet in uscita.

    Scheda Test della console Lambda.

    Se la funzione non riesce a raggiungere la rete Internet pubblica, viene visualizzato un messaggio di errore simile al seguente:

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }