AWS Lambda
Manuel du développeur

Configuration d'une fonction Lambda pour accéder aux ressources d'un Amazon VPC

Vous pouvez configurer une fonction pour qu'elle se connecte aux sous-réseaux privés d'un Virtual Private Cloud (VPC) de votre compte. Utilisez Amazon Virtual Private Cloud (Amazon VPC) pour créer un réseau privé pour les ressources telles que les bases de données, les instances de mémoire cache ou les services internes. Connectez votre fonction au VPC pour accéder à des ressources privées pendant l'exécution.

AWS Lambda exécute le code de la fonction de manière sécurisée au sein d'un VPC par défaut. Néanmoins, pour permettre à votre fonction Lambda d'accéder à des ressources au sein de votre VPC privé, vous devez fournir des informations de configuration supplémentaires spécifiques du VPC, en particulier les ID de sous-réseau privé et les ID de groupe de sécurité. AWS Lambda utilise ces informations pour configurer les interfaces réseau Elastic (ENI) qui permettent à votre fonction de se connecter en toute sécurité à d'autres ressources au sein de votre VPC privé.

Les fonctions Lambda ne peuvent pas se connecter directement à un VPC avec la location d'instance dédiée. Pour vous connecter à des ressources dans un VPC dédié, associez-les à un deuxième VPC avec une location par défaut.

Rôle d'exécution et autorisations utilisateur

Pour vous connecter à un VPC, le rôle d'exécution de votre fonction doit avoir les autorisations suivantes.

Autorisations du rôle d'exécution

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:DeleteNetworkInterface

Ces autorisations sont incluses dans la stratégie gérée AWSLambdaVPCAccessExecutionRole.

Pour configurer une fonction pour vous connecter à un VPC, vous avez besoin des autorisations suivantes.

Autorisations utilisateurs

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

Configuration d'une fonction Lambda pour l'accès à un Amazon VPC

Pour ajouter des informations relatives au VPC à la configuration de la fonction Lambda, utilisez le paramètre VpcConfig lorsque vous créez cetteLambda fonction (voir CreateFunction). Vous pouvez également les ajouter à une configuration de fonction Lambda existante (voir UpdateFunctionConfiguration). Voici quelques exemple de commandes AWS CLI :

  • La commande CLI create-function spécifie le paramètre --vpc-config pour fournir les informations du VPC lorsque vous créez une fonction Lambda.

    $ aws lambda create-function --function-name my-function \ --runtime go1.x --handler main --zip-file fileb://main.zip \ --role execution-role-arn \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=comma-separated-security-group-ids
  • La commande CLI update-function-configuration spécifie le paramètre --vpc-config pour ajouter les informations du VPC à une configuration de fonction Lambda existante.

    $ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=security-group-ids

    Pour supprimer les informations liées au VPC de la configuration de la fonction Lambda, utilisez l'API UpdateFunctionConfiguration en fournissant une liste vide d'ID de sous-réseau et d'ID de groupes de sécurité, comme illustré dans l'exemple suivant de commande CLI.

    $ aws lambda update-function-configuration --function-name my-function \ --vpc-config SubnetIds=[],SecurityGroupIds=[]

Lorsque vous ajoutez la configuration du VPC à une fonction Lambda, elle ne peut accéder qu'aux ressources de ce VPC. Si une fonction Lambda a besoin d'accéder aux ressources du VPC et au réseau Internet public, le VPC doit disposer d'une instance de traduction d'adresses réseau (NAT).

Lorsqu'une fonction Lambda est configurée pour s'exécuter au sein d'un VPC, elle subit une perte de performances au démarrage des ENI. Autrement dit, la résolution d'adresse peut être retardée lors de la tentative de connexion aux ressources réseau.

Accès Internet pour les fonctions Lambda

AWS Lambda utilise les informations de VPC que vous fournissez pour configurer les ENI permettant à la fonction Lambda d'accéder aux ressources VPC. Chaque ENI se voit attribuer une adresse IP privée à partir de la plage d'adresses IP dans les sous-réseaux que vous spécifiez. Les fonctions qui sont connectées à un VPC n'ont pas d'adresse IP publique ou d'accès Internet par défaut.

Note

Plusieurs services offrent des points de terminaison de VPC. Vous pouvez utiliser les points de terminaison d'un VPC pour vous connecter aux services AWS à partir d'un VPC sans accès à Internet.

L'accès à Internet depuis un sous-réseau privé nécessite la traduction d'adresses réseau (NAT). Vous pouvez donner à votre fonction l'accès à Internet en ajoutant une passerelle NAT ou une instance NAT à votre VPC. Une passerelle Internet ne fonctionne pas, car elle nécessite des adresses IP publiques. Pour plus d'informations, consultez Passerelles NAT dans le Amazon VPC Guide de l'utilisateur.

Consignes pour la configuration de fonctions Lambda basées sur un VPC

La fonction Lambda s'adapte automatiquement en fonction du nombre d'événements qu'elle traite. Voici des consignes générales pour la configuration de fonctions Lambda basées sur un VPC afin de permettre cette adaptabilité.

  • Si la fonction Lambda accède à un VPC, vous devez vous assurer que ce dernier dispose d'une capacité ENI suffisante pour répondre aux besoins évolutifs de cette fonction. Vous pouvez utiliser la formule suivante pour déterminer les exigences approximatives de l'interface réseau Elastic.

    Projected peak concurrent executions * (Memory in GB / 3GB)

    Où:

    • Pic d’exécutions simultanées prévu – Le nombre d'exécutions simultanées que votre fonction doit pouvoir prendre en charge.

    • Memory : quantité de mémoire que vous avez configurée pour la fonction Lambda.

  • Les sous-réseaux que vous spécifiez doivent avoir suffisamment d'adresses IP disponibles pour correspondre au nombre d'ENI.

    Nous vous recommandons également de spécifier au moins un sous-réseau dans chaque zone de disponibilité de la configuration de la fonction Lambda. En spécifiant les sous-réseaux dans chaque zone de disponibilité, la fonction Lambda peut fonctionner dans une autre zone si l'une d'elles tombe en panne ou n'a plus d'adresses IP.

Si votre VPC ne dispose pas de suffisamment d'interfaces ENI ou d'adresses IP de sous-réseau, la fonction Lambda ne s'adapte pas à l'augmentation des demandes, et vous observerez davantage d'erreurs avec des codes EC2ThrottledException. Amazon VPC applique une limite à la création d'interfaces ENI. Vous pouvez demander que cette limite soit augmentée dans la console du Centre de support.