Comment puis-je donner un accès Internet à ma fonction Lambda dans un VPC ?

Dernière mise à jour : 29-10-2020

Je souhaite donner un accès Internet à ma fonction AWS Lambda connectée à un Amazon Virtual Private Cloud (Amazon VPC). Comment configurer Amazon VPC pour cela ?

Brève description

Pour accéder à des ressources Amazon VPC privées, telles qu'une instance de base de données relationnelle Relational Database Service (Amazon RDS) ou une instance Amazon Elastic Compute Cloud (Amazon EC2), associez votre fonction Lambda dans Amazon VPC à un ou plusieurs sous-réseauxprivés.

Pour donner un accès Internet à votre fonction, le VPC associé doit avoir une passerelle NAT (ou une instance NAT) dans un sous-réseau public.

Remarque : la table de routage du sous-réseau détermine si celui-ci est privé ou public. Un sous-réseau public dispose d'une route pointant vers une passerelle Internet, contrairement au sous-réseau privé.

Résolution

Si vous utilisez un VPC Amazon existant, commencez par l'étape Créer vos composants de VPC pour créer un sous-réseau public avec une passerelle NAT et un ou plusieurs sous-réseaux privés. Si votre VPC existant possède déjà un sous-réseau public avec une passerelle NAT et un ou plusieurs sous-réseaux privés, passez directement à l'étape Créer un rôle d'exécution Lambda pour votre VPC.

Si vous souhaitez créer un VPC pour cette configuration, utilisez l'assistant VPC, puis sélectionnez VPC with Public and Private Subnets (VPC avec des sous-réseaux publics et privés). Pour plus d'informations, consultez VPC avec des sous-réseaux publics et privés (NAT). (Dans la console Amazon VPC, vos sous-réseaux portent ainsi le nom de « Public subnet » [« Sous-réseau public »] et « Private subnet » [« Sous-réseau privé »].) Ensuite, passez directement à l'étape Créer un rôle d'exécution Lambda pour votre VPC.

Créer vos composants de VPC

  1. Créer deux sous-réseaux ou plus dans votre VPC. Au cours de la création, en regard de Name tag (Balise de nom), ajoutez un nom pour vous aider à identifier quel sous-réseau est public et quels sous-réseaux sont privés. Par exemple, nommez un des sous-réseaux Public Subnet (Sous-réseau public) et l'autre Private Lambda (Lambda privé) (ou Private Lambda 1, Private Lambda 2 et ainsi de suite, pour plusieurs sous-réseaux privés).
    Remarque : c’est une bonne pratique de créer plusieurs sous-réseaux privés dans différentes zones de disponibilité pour la redondance, et afin que Lambda puisse garantir une haute disponibilité pour votre fonction.
  2. Créez une passerelle Internet et attachez-la à votre VPC.
  3. Créez une passerelle NAT. Au cours de la création, pour Subnet (Sous-réseau), sélectionnez le sous-réseau que vous souhaitez rendre public. (Par exemple, Public Subnet [Sous-réseau public] si vous l'avez nommé ainsi précédemment.)
    Remarque : pour obtenir de l'aide concernant le test de votre passerelle NAT après sa création, consultez Test d'une passerelle NAT.

Créer et modifier les tables de routage de vos sous-réseaux

Remarque : une fonction Lambda connectée à Amazon VPC sélectionne de façon aléatoire un sous-réseau associé lors de l'envoi de demandes. Tous les sous-réseaux que votre fonction utilise doivent avoir la même configuration pour éviter les erreurs aléatoires causées par Lambda utilisant un sous-réseau mal configuré.

  1. Dans le panneau Tables de routage de le console Amazon VPC, créez deux tables de routage personnalisées pour votre VPC.
    Conseil : au cours de la création, pour Name tag (Balise de nom), ajoutez un nom pour vous aider à identifier le sous-réseau auquel la table de routage est associée. Par exemple, nommez un sous-réseau Public Subnet (Sous-réseau public) et l'autre Private Lambda (Lambda privé).
  2. Associez la table de routage du sous-réseau public (Public subnet [Sous-réseau public]) au sous-réseau que vous souhaitez rendre public.
  3. Ajoutez une nouvelle route vers cette table de routage. Indiquez les informations suivantes :
    Dans le champ Destination, saisissez 0.0.0.0/0.
    Dans le champ Target (Cible), sélectionnez Internet Gateway (Passerelle Internet), puis l'ID (igw-123example) de la passerelle Internet que vous avez créée.
    Sélectionnez Save routes (Enregistrer les routes). Le sous-réseau associé est désormais un sous-réseau public.
  4. Associez l'autre table de routage (Private Lambda [Lambda privé]) aux sous-réseaux privés.
  5. Ajoutez une nouvelle route vers cette table de routage. Indiquez les informations suivantes :
    Dans le champ Destination, saisissez 0.0.0.0/0.
    Pour Target (Cible), sélectionnez NAT Gateway (Passerelle NAT), puis l'ID (nat-123example) de la passerelle NAT que vous avez créée. (Si vous utilisez une instance NAT, sélectionnez Network Interface [Interface réseau] à la place.)
    Sélectionnez Save routes (Enregistrer les routes).

Remarque : assurez-vous que les routes vers votre passerelle NAT sont à l'état actif. Si la passerelle NAT est supprimée et que vous n'avez pas mis à jour les routes, elles seront en état de trou noir. Pour plus d'informations, consultez Mise à jour de votre table de routage.

Configurer des listes de contrôle d'accès réseau

La liste de contrôle d'accès (ACL) réseau par défaut de votre VPC Amazon autorise tout le trafic entrant et sortant. Si vous avez modifié les règles de liste de contrôle d'accès réseau (ou que vous prévoyez de les modifier), veillez à toujours autoriser les demandes sortantes à partir de votre fonction Lambda. Veillez également à autoriser le trafic entrant en fonction des besoins de votre configuration VPC :

Pour plus d'informations, consultez Confidentialité du trafic inter-réseaux dans Amazon VPC.

Créer un rôle d'exécution Lambda pour votre VPC

  1. Dans le volet Roles (Rôles) de la console AWS Identity and Access Management (IAM), sélectionnez Create role (Créer un rôle).
  2. Sur la page Create role (Créer un rôle), procédez comme suit :
    Pour Select type of trusted entity (Sélectionner le type d'entité de confiance), vérifiez que AWS service est sélectionné.
    Pour Choose a use case (Choisir un cas d'utilisation), choisissez Lambda.
    Sélectionnez Next: Permissions (Suivant : autorisations).
  3. Sous Attach permissions policies (Attacher les stratégies des autorisations), recherchez AWSLambdaVPCAccessExecutionRole. Sélectionnez la stratégie portant ce nom, puis sélectionnez Next: Tags (Étape suivante : balises).
  4. Ajoutez éventuellement des balises, puis sélectionnez Next: Review (Étape suivante : vérification).
  5. Sous Review (Vérification), procédez comme suit :
    Pour Role name (Nom du rôle), saisissez un nom pour ce rôle d'exécution Lambda. Par exemple, lambda_vpc_basic_execution.
    (Facultatif) Pour le champ Role description (Description du rôle), modifiez la description selon vos préférences.
    Sélectionnez Créer un rôle.

Pour plus d'informations, consultez la section Rôle d’exécution AWS Lambda.

Configurer votre fonction Lambda

  1. Dans le volet Functions (Fonctions) de la console AWS Lambda, choisissez le nom de la fonction que vous souhaitez connecter à votre VPC Amazon.
  2. Dans le volet Configuration, sous Execution role (Rôle d'exécution), pour le champ Existing role (Rôle existant), sélectionnez le rôle d'exécution IAM que vous avez créé. (Par exemple, lambda_vpc_basic_execution.)
  3. Dans le volet Configuration, sous VPC, procédez comme suit :
    Pour le champ Virtual Private Cloud (VPC), sélectionnez votre VPC.
    Pour le champ Subnets (Sous-réseaux), sélectionnez les sous-réseaux privés que vous avez créés. Identifiez-les par leurs ID de sous-réseau (ainsi que les noms, si vous les avez nommés).
    Pour le champ Security groups (Groupes de sécurité), sélectionnez un groupe de sécurité.
    Remarque : le groupe de sécurité par défaut autorise tout le trafic Internet sortant et s'avère être suffisant pour la plupart des cas d'utilisation. Pour plus d'informations, consultez la section Groupes de sécurité pour votre VPC.
  4. Choisissez Save (Enregistrer).