Activer l'accès à Internet pour les fonctions Lambda connectées au VPC - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Activer l'accès à Internet pour les fonctions Lambda connectées au VPC

Par défaut, les fonctions Lambda s'exécutent dans un VPC géré par Lambda disposant d'un accès à Internet. Pour accéder aux ressources d'un VPC dans votre compte, vous pouvez ajouter une configuration VPC à une fonction. Cela limite la fonction aux ressources de ce VPC, sauf si le VPC dispose d'un accès à Internet. Cette page explique comment fournir un accès Internet aux fonctions Lambda connectées au VPC.

Créer le VPC

Le flux de travail Create VPC crée toutes les ressources VPC requises pour qu'une fonction Lambda accède à l'Internet public à partir d'un sous-réseau privé, y compris les sous-réseaux, la passerelle NAT, la passerelle Internet et les entrées de table de routage.

Pour créer le VPC
  1. Ouvrez la console Amazon VPC à l’adresse https://console.aws.amazon.com/vpc/.

  2. Sur le tableau de bord, choisissez Créer un VPC.

  3. Sous Ressources à créer, choisissez VPC et plus encore.

  4. Configurer le VPC

    1. Pour Name tag auto-generation (Génération automatique de balises de nom), saisissez un nom pour le VPC.

    2. Pour Bloc d'adresse CIDR IPv4, vous pouvez conserver la suggestion par défaut ou saisir le bloc d'adresse CIDR requis par votre application ou votre réseau.

    3. Si votre application communique à l'aide d'adresses IPv6, choisissez Bloc d'adresse CIDR IPv6, Bloc d'adresse CIDR IPv6 fourni par Amazon.

  5. Configurer les sous-réseaux

    1. Pour Nombre de zones de disponibilité, choisissez 2. Nous recommandons au moins deux AZ pour une haute disponibilité.

    2. Pour Number of public subnets (Nombre de sous-réseaux publics), choisissez 2.

    3. Pour Number of private subnets (Nombre de sous-réseaux privés), choisissez 2.

    4. Vous pouvez conserver le bloc d'adresse CIDR par défaut pour le sous-réseau public ou développer Personnaliser les blocs d'adresse CIDR du sous-réseau et saisir un bloc d'adresse CIDR. Pour plus d'informations, consultez la section Blocs CIDR de sous-réseau.

  6. Pour Passerelles NAT, choisissez 1 par zone de disponibilité afin d'améliorer la résilience.

  7. Pour la passerelle Internet de sortie uniquement, choisissez Oui si vous avez choisi d'inclure un bloc d'adresse CIDR IPv6.

  8. Pour les points de terminaison VPC, conservez la valeur par défaut (passerelle S3). Cette option est gratuite. Pour plus d'informations, consultez Types de points de terminaison VPC pour Amazon S3.

  9. Pour les options DNS, conservez les paramètres par défaut.

  10. Sélectionnez Create VPC (Créer un VPC).

Configurer la fonction Lambda

Pour configurer un VPC lorsque vous créez une fonction
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez Créer une fonction.

  3. Sous Informations de base, dans Nom de fonction, entrez un nom pour votre fonction.

  4. Développez Advanced settings (Paramètres avancés).

  5. Sélectionnez Activer le VPC, puis choisissez un VPC.

  6. (Facultatif) Pour autoriser le trafic IPv6 sortant, sélectionnez Autoriser le trafic IPv6 pour les sous-réseaux à double pile.

  7. Pour les sous-réseaux, sélectionnez tous les sous-réseaux privés. Les sous-réseaux privés peuvent accéder à Internet via la passerelle NAT. La connexion d'une fonction à un sous-réseau public ne lui donne pas accès à Internet.

    Note

    Si vous avez sélectionné Autoriser le trafic IPv6 pour les sous-réseaux à double pile, tous les sous-réseaux sélectionnés doivent avoir un bloc CIDR IPv4 et un bloc CIDR IPv6.

  8. Pour les groupes de sécurité, sélectionnez un groupe de sécurité qui autorise le trafic sortant.

  9. Choisissez Créer une fonction.

Lambda crée automatiquement un rôle d'exécution avec la politique AWSLambdaVPCAccessExecutionRole AWS gérée. Les autorisations définies dans cette politique ne sont requises que pour créer des interfaces réseau élastiques pour la configuration VPC, et non pour invoquer votre fonction. Pour appliquer les autorisations de moindre privilège, vous pouvez supprimer la AWSLambdaVPCAccessExecutionRolepolitique de votre rôle d'exécution après avoir créé la fonction et la configuration VPC. Pour plus d’informations, consultez Autorisations IAM requises.

Pour configurer un VPC pour une fonction existante

Pour ajouter une configuration VPC à une fonction existante, le rôle d'exécution de la fonction doit être autorisé à créer et à gérer des interfaces réseau élastiques. La politique AWSLambdaVPCAccessExecutionRole AWS gérée inclut les autorisations requises. Pour appliquer les autorisations de moindre privilège, vous pouvez supprimer la AWSLambdaVPCAccessExecutionRolepolitique de votre rôle d'exécution après avoir créé la configuration VPC.

  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez une fonction.

  3. Choisissez l'onglet Configuration, puis VPC.

  4. Sous VPC, choisissez Modifier.

  5. Sélectionnez le VPC.

  6. (Facultatif) Pour autoriser le trafic IPv6 sortant, sélectionnez Autoriser le trafic IPv6 pour les sous-réseaux à double pile.

  7. Pour les sous-réseaux, sélectionnez tous les sous-réseaux privés. Les sous-réseaux privés peuvent accéder à Internet via la passerelle NAT. La connexion d'une fonction à un sous-réseau public ne lui donne pas accès à Internet.

    Note

    Si vous avez sélectionné Autoriser le trafic IPv6 pour les sous-réseaux à double pile, tous les sous-réseaux sélectionnés doivent avoir un bloc CIDR IPv4 et un bloc CIDR IPv6.

  8. Pour les groupes de sécurité, sélectionnez un groupe de sécurité qui autorise le trafic sortant.

  9. Choisissez Enregistrer.

Tester la fonction

Utilisez l'exemple de code suivant pour vérifier que votre fonction connectée au VPC peut accéder à l'Internet public. En cas de succès, le code renvoie un code d'200état. En cas d'échec, la fonction expire.

Node.js

Cet exemple utilisefetch, qui est disponible dans les environnements d'exécution nodejs18.x et ultérieurs.

  1. Dans le volet Source du code de la console Lambda, collez le code suivant dans le fichier index.mjs. La fonction envoie une requête HTTP GET à un point de terminaison public et renvoie le code de réponse HTTP pour tester si la fonction a accès à l'Internet public.

    Éditeur de code pour console Lambda.
    Exemple — Requête HTTP avec 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. Choisissez Deploy (Déployer).

  3. Choisissez l’onglet Test.

    Onglet Test de la console Lambda.
  4. Sélectionnez Tester).

  5. La fonction renvoie un code d'200état. Cela signifie que la fonction dispose d'un accès Internet sortant.

    Onglet Test de la console Lambda.

    Si la fonction ne parvient pas à accéder à l'Internet public, le message d'erreur suivant s'affiche :

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }
Python
  1. Dans le volet Source du code de la console Lambda, collez le code suivant dans le fichier lambda_function.py. La fonction envoie une requête HTTP GET à un point de terminaison public et renvoie le code de réponse HTTP pour tester si la fonction a accès à l'Internet public.

    Éditeur de code pour 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. Choisissez Deploy (Déployer).

  3. Choisissez l’onglet Test.

    Onglet Test de la console Lambda.
  4. Sélectionnez Tester).

  5. La fonction renvoie un code d'200état. Cela signifie que la fonction dispose d'un accès Internet sortant.

    Onglet Test de la console Lambda.

    Si la fonction ne parvient pas à accéder à l'Internet public, le message d'erreur suivant s'affiche :

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

Si vous possédez déjà un VPC mais que vous devez configurer un accès Internet public pour une fonction Lambda, procédez comme suit. Cette procédure suppose que votre VPC possède au moins deux sous-réseaux. Si vous n'avez pas deux sous-réseaux, consultez la section Créer un sous-réseau dans le guide de l'utilisateur Amazon VPC.

Vérifiez la configuration de la table de routage

  1. Ouvrez la console Amazon VPC à l’adresse https://console.aws.amazon.com/vpc/.

  2. Choisissez l'ID du VPC.

    Liste des VPC de la console VPC.
  3. Faites défiler la page jusqu'à la section Carte des ressources. Notez les mappages des tables de routage. Ouvrez chaque table de routage mappée à un sous-réseau.

    Section de la carte des ressources de la console VPC
  4. Faites défiler la page jusqu'à l'onglet Routes. Passez en revue les itinéraires pour déterminer si l'une des conditions suivantes est vraie. Chacune de ces exigences doit être satisfaite par une table de routage distincte.

    • Le trafic Internet (0.0.0.0/0pour IPv4, ::/0 pour IPv6) est acheminé vers une passerelle Internet (). igw-xxxxxxxxxx Cela signifie que le sous-réseau associé à la table de routage est un sous-réseau public.

      Note

      Si votre sous-réseau ne possède pas de bloc d'adresse CIDR IPv6, vous ne verrez que la route IPv4 (). 0.0.0.0/0

      Exemple table de routage du sous-réseau public
      Table de routage du sous-réseau public avec route vers la passerelle Internet
    • Le trafic Internet pour IPv4 (0.0.0.0/0) est acheminé vers une passerelle NAT (nat-xxxxxxxxxx) associée à un sous-réseau public. Cela signifie que le sous-réseau est un sous-réseau privé qui peut accéder à Internet via la passerelle NAT.

      Note

      Si votre sous-réseau possède un bloc d'adresse CIDR IPv6, la table de routage doit également acheminer le trafic IPv6 lié à Internet (::/0) vers une passerelle Internet de sortie uniquement (). eigw-xxxxxxxxxx Si votre sous-réseau ne possède pas de bloc d'adresse CIDR IPv6, vous ne verrez que la route IPv4 (). 0.0.0.0/0

      Exemple table de routage de sous-réseau privé
      Table de routage de sous-réseau privé avec route vers la passerelle NAT
  5. Répétez l'étape précédente jusqu'à ce que vous ayez examiné chaque table de routage associée à un sous-réseau de votre VPC et confirmé que vous disposez d'une table de routage avec une passerelle Internet et d'une table de routage avec une passerelle NAT.

    Si vous n'avez pas deux tables de routage, l'une avec une route vers une passerelle Internet et l'autre avec une route vers une passerelle NAT, suivez ces étapes pour créer les ressources manquantes et les entrées de table de routage.

Procédez comme suit pour créer une table de routage et l'associer à un sous-réseau.

Pour créer une table de routage personnalisée à l'aide de la console Amazon VPC
  1. Ouvrez la console Amazon VPC à l'adresse https://console.aws.amazon.com/vpc/.

  2. Dans le volet de navigation, choisissez Route tables (Tables de routage).

  3. Choisissez Créer une table de routage.

  4. (Facultatif) Pour Nom, entrez un nom pour votre table de routage.

  5. Pour VPC, choisissez votre VPC.

  6. (Facultatif) Pour ajouter une identification, choisissez Add new tag (Ajouter une identification) et saisissez la clé et la valeur de l'identification.

  7. Choisissez Créer une table de routage.

  8. Sur l'onglet Associations de sous-réseau, choisissez Modifier les associations de sous-réseau.

    Associer une passerelle Internet au VPC
  9. Sélectionnez la case à cocher pour le sous-réseau à associer à la table de routage.

  10. Choisissez Save associations (Enregistrer les associations).

Procédez comme suit pour créer une passerelle Internet, l'associer à votre VPC et l'ajouter à la table de routage de votre sous-réseau public.

Pour créer une passerelle Internet
  1. Ouvrez la console Amazon VPC à l'adresse https://console.aws.amazon.com/vpc/.

  2. Dans le panneau de navigation, choisissez Passerelles Internet.

  3. Choisissez Créer une passerelle Internet.

  4. (Facultatif) Saisissez un nom pour votre passerelle Internet.

  5. (Facultatif) Pour ajouter une identification, choisissez Add new tag (Ajouter une identification) et saisissez la clé et la valeur de l'identification.

  6. Choisissez Créer une passerelle Internet.

  7. Choisissez Attacher à un VPC dans la bannière en haut de l'écran, sélectionnez un VPC disponible, puis choisissez Attacher une passerelle Internet.

    Associer une passerelle Internet au VPC
  8. Choisissez l'ID du VPC.

    Page de détails de la passerelle Internet
  9. Choisissez à nouveau l'ID du VPC pour ouvrir la page de détails du VPC.

    Liste de VPC filtrée
  10. Faites défiler la page jusqu'à la section Carte des ressources, puis choisissez un sous-réseau. Les détails du sous-réseau sont affichés dans un nouvel onglet.

    Carte des ressources de la console VPC avec liste des sous-réseaux.
  11. Cliquez sur le lien sous Table de routage.

    Lien vers la table de routage sur la page de détails du sous-réseau
  12. Choisissez l'ID de la table de routage pour ouvrir la page des détails de la table de routage.

    Liste de tables de routage filtrée
  13. Sous Itinéraires, choisissez Modifier les itinéraires.

    Liste des itinéraires avec bouton Modifier les itinéraires
  14. Choisissez Ajouter un itinéraire, puis entrez 0.0.0.0/0 dans le champ Destination.

    Ajouter une destination pour un nouvel itinéraire
  15. Pour Target, sélectionnez Passerelle Internet, puis choisissez la passerelle Internet que vous avez créée précédemment. Si votre sous-réseau possède un bloc d'adresse CIDR IPv6, vous devez également ajouter une route ::/0 pour la même passerelle Internet.

    Ajouter une cible pour le nouvel itinéraire
  16. Sélectionnez Enregistrer les modifications.

Suivez ces étapes pour créer une passerelle NAT, l'associer à un sous-réseau public, puis l'ajouter à la table de routage de votre sous-réseau privé.

Pour créer une passerelle NAT et l'associer à un sous-réseau public
  1. Dans le volet de navigation, sélectionnez Passerelles NAT.

  2. Sélectionnez Créer une passerelle NAT.

  3. (Facultatif) Entrez un nom pour votre passerelle NAT.

  4. Pour Sous-réseau, sélectionnez un sous-réseau public dans votre VPC. (Un sous-réseau public est un sous-réseau qui possède une route directe vers une passerelle Internet dans sa table de routage.)

    Note

    Les passerelles NAT sont associées à un sous-réseau public, mais l'entrée de la table de routage se trouve dans le sous-réseau privé.

  5. Pour l'ID d'allocation IP élastique, sélectionnez une adresse IP élastique ou choisissez Allouer une adresse IP élastique.

  6. Sélectionnez Créer une passerelle NAT.

Pour ajouter une route vers la passerelle NAT dans la table de routage du sous-réseau privé
  1. Dans le panneau de navigation, choisissez Subnets (Sous-réseaux).

  2. Sélectionnez un sous-réseau privé dans votre VPC. (Un sous-réseau privé est un sous-réseau dont la table de routage ne contient pas de route vers une passerelle Internet.)

  3. Cliquez sur le lien sous Table de routage.

    Lien vers la table de routage sur la page de détails du sous-réseau
  4. Faites défiler l'écran vers le bas et choisissez l'onglet Routes, puis choisissez Modifier les itinéraires

    Onglet Itinéraires sur la page de détails de la table de routage
  5. Choisissez Ajouter un itinéraire, puis entrez 0.0.0.0/0 dans le champ Destination.

    Ajouter une destination pour un nouvel itinéraire
  6. Pour Target, sélectionnez la passerelle NAT, puis la passerelle NAT que vous avez créée précédemment.

    Ajouter une cible pour le nouvel itinéraire
  7. Sélectionnez Enregistrer les modifications.

Procédez comme suit pour créer une passerelle Internet de sortie uniquement et l'ajouter à la table de routage de votre sous-réseau privé.

Pour créer une passerelle Internet de sortie uniquement
  1. Dans le volet de navigation, choisissez Passerelles Internet de sortie uniquement.

  2. Choisissez Créer une passerelle Internet de sortie uniquement.

  3. (Facultatif) Entrez un nom.

  4. Sélectionnez le VPC dans lequel créer la passerelle Internet de sortie uniquement.

  5. Choisissez Créer une passerelle Internet de sortie uniquement.

  6. Choisissez le lien sous ID VPC attaché.

    Page de détails de la passerelle Internet de sortie uniquement
  7. Cliquez sur le lien sous ID VPC pour ouvrir la page de détails du VPC.

  8. Faites défiler la page jusqu'à la section Carte des ressources, puis choisissez un sous-réseau privé. Les détails du sous-réseau sont affichés dans un nouvel onglet.

    Carte des ressources de la console VPC avec liste des sous-réseaux.
  9. Cliquez sur le lien sous Table de routage.

    Lien vers la table de routage sur la page de détails du sous-réseau
  10. Choisissez l'ID de la table de routage pour ouvrir la page des détails de la table de routage.

    Liste de tables de routage filtrée
  11. Sous Itinéraires, choisissez Modifier les itinéraires.

    Liste des itinéraires avec bouton Modifier les itinéraires
  12. Choisissez Ajouter un itinéraire, puis entrez ::/0 dans le champ Destination.

    Ajouter une destination pour un nouvel itinéraire
  13. Pour Target, sélectionnez Egress Only Internet Gateway, puis choisissez la passerelle que vous avez créée précédemment.

    Ajouter une cible pour le nouvel itinéraire
  14. Sélectionnez Enregistrer les modifications.

Configurer la fonction Lambda

Pour configurer un VPC lorsque vous créez une fonction
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez Créer une fonction.

  3. Sous Informations de base, dans Nom de fonction, entrez un nom pour votre fonction.

  4. Développez Advanced settings (Paramètres avancés).

  5. Sélectionnez Activer le VPC, puis choisissez un VPC.

  6. (Facultatif) Pour autoriser le trafic IPv6 sortant, sélectionnez Autoriser le trafic IPv6 pour les sous-réseaux à double pile.

  7. Pour les sous-réseaux, sélectionnez tous les sous-réseaux privés. Les sous-réseaux privés peuvent accéder à Internet via la passerelle NAT. La connexion d'une fonction à un sous-réseau public ne lui donne pas accès à Internet.

    Note

    Si vous avez sélectionné Autoriser le trafic IPv6 pour les sous-réseaux à double pile, tous les sous-réseaux sélectionnés doivent avoir un bloc CIDR IPv4 et un bloc CIDR IPv6.

  8. Pour les groupes de sécurité, sélectionnez un groupe de sécurité qui autorise le trafic sortant.

  9. Choisissez Créer une fonction.

Lambda crée automatiquement un rôle d'exécution avec la politique AWSLambdaVPCAccessExecutionRole AWS gérée. Les autorisations définies dans cette politique ne sont requises que pour créer des interfaces réseau élastiques pour la configuration VPC, et non pour invoquer votre fonction. Pour appliquer les autorisations de moindre privilège, vous pouvez supprimer la AWSLambdaVPCAccessExecutionRolepolitique de votre rôle d'exécution après avoir créé la fonction et la configuration VPC. Pour plus d’informations, consultez Autorisations IAM requises.

Pour configurer un VPC pour une fonction existante

Pour ajouter une configuration VPC à une fonction existante, le rôle d'exécution de la fonction doit être autorisé à créer et à gérer des interfaces réseau élastiques. La politique AWSLambdaVPCAccessExecutionRole AWS gérée inclut les autorisations requises. Pour appliquer les autorisations de moindre privilège, vous pouvez supprimer la AWSLambdaVPCAccessExecutionRolepolitique de votre rôle d'exécution après avoir créé la configuration VPC.

  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez une fonction.

  3. Choisissez l'onglet Configuration, puis VPC.

  4. Sous VPC, choisissez Modifier.

  5. Sélectionnez le VPC.

  6. (Facultatif) Pour autoriser le trafic IPv6 sortant, sélectionnez Autoriser le trafic IPv6 pour les sous-réseaux à double pile.

  7. Pour les sous-réseaux, sélectionnez tous les sous-réseaux privés. Les sous-réseaux privés peuvent accéder à Internet via la passerelle NAT. La connexion d'une fonction à un sous-réseau public ne lui donne pas accès à Internet.

    Note

    Si vous avez sélectionné Autoriser le trafic IPv6 pour les sous-réseaux à double pile, tous les sous-réseaux sélectionnés doivent avoir un bloc CIDR IPv4 et un bloc CIDR IPv6.

  8. Pour les groupes de sécurité, sélectionnez un groupe de sécurité qui autorise le trafic sortant.

  9. Choisissez Enregistrer.

Tester la fonction

Utilisez l'exemple de code suivant pour vérifier que votre fonction connectée au VPC peut accéder à l'Internet public. En cas de succès, le code renvoie un code d'200état. En cas d'échec, la fonction expire.

Node.js

Cet exemple utilisefetch, qui est disponible dans les environnements d'exécution nodejs18.x et ultérieurs.

  1. Dans le volet Source du code de la console Lambda, collez le code suivant dans le fichier index.mjs. La fonction envoie une requête HTTP GET à un point de terminaison public et renvoie le code de réponse HTTP pour tester si la fonction a accès à l'Internet public.

    Éditeur de code pour console Lambda.
    Exemple — Requête HTTP avec 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. Choisissez Deploy (Déployer).

  3. Choisissez l’onglet Test.

    Onglet Test de la console Lambda.
  4. Sélectionnez Tester).

  5. La fonction renvoie un code d'200état. Cela signifie que la fonction dispose d'un accès Internet sortant.

    Onglet Test de la console Lambda.

    Si la fonction ne parvient pas à accéder à l'Internet public, le message d'erreur suivant s'affiche :

    { "errorMessage": "2024-04-11T17:22:20.857Z abe12jlc-640a-8157-0249-9be825c2y110 Task timed out after 3.01 seconds" }
Python
  1. Dans le volet Source du code de la console Lambda, collez le code suivant dans le fichier lambda_function.py. La fonction envoie une requête HTTP GET à un point de terminaison public et renvoie le code de réponse HTTP pour tester si la fonction a accès à l'Internet public.

    Éditeur de code pour 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. Choisissez Deploy (Déployer).

  3. Choisissez l’onglet Test.

    Onglet Test de la console Lambda.
  4. Sélectionnez Tester).

  5. La fonction renvoie un code d'200état. Cela signifie que la fonction dispose d'un accès Internet sortant.

    Onglet Test de la console Lambda.

    Si la fonction ne parvient pas à accéder à l'Internet public, le message d'erreur suivant s'affiche :

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