Utilisation d'AWS Lambda avec Amazon VPC Lattice - 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.

Utilisation d'AWS Lambda avec Amazon VPC Lattice

Vous pouvez enregistrer vos fonctions Lambda en tant que cibles au sein d'un réseau de service Amazon VPC Lattice. Ainsi, votre fonction Lambda devient un service au sein du réseau, et les clients qui ont accès au réseau de services VPC Lattice peuvent appeler votre service. Si votre fonction Lambda doit accéder à des services au sein d'un réseau de services, vous pouvez la connecter à un VPC déjà associé au réseau de services. Le fait que vos services fonctionnent au sein d'un réseau VPC Lattice peut vous aider à les découvrir, à les connecter, à y accéder et à les surveiller plus facilement.

Concepts VPC Lattice

Tout au long de ce guide, nous ferons fréquemment référence aux termes VPC Lattice suivants :

  • Service : un service est une application logicielle qui peut s'exécuter sur une instance, un conteneur ou au sein d'une fonction sans serveur. Cette rubrique se concentre uniquement sur les services créés à l'aide de fonctions Lambda.

  • Réseau de services : un réseau de services est une limite logique contenant un réseau de services. Cette rubrique explique comment configurer vos fonctions Lambda en tant que services au sein d'un réseau de services VPC Lattice.

  • Groupe cible : un groupe cible est une collection de destinations de type calcul qui exécutent un service. Les groupes cibles pour Lambda ne peuvent contenir qu'une seule fonction Lambda en tant que cible. Vous ne pouvez pas avoir un groupe cible avec plusieurs fonctions comme cibles.

  • Écouteur : un écouteur est un processus qui reçoit le trafic et l'achemine vers différents groupes cibles au sein du réseau de services.

  • Règle d'écouteur : une règle d'écouteur englobe la priorité, les actions et les conditions qu'un écouteur utilise pour déterminer où acheminer le trafic. Chaque écouteur dispose d'une règle d'écouteur par défaut, et un écouteur peut avoir plusieurs règles d'écouteur. Une règle d'écouteur peut contenir les éléments suivants :

    • Protocole : le protocole que l'écouteur utilise pour envoyer la demande à la destination. Il peut s'agir de HTTP ou de HTTPS.

    • Port : le port que l'écouteur interroge pour les demandes entrantes. Il peut être compris entre 1 et 65 535 inclus.

    • Chemin : le chemin d'accès à la ressource cible. Pour la règle d'écouteur par défaut, c'est le chemin par défaut /. Une règle d'écouteur peut avoir 6 chemins au maximum, y compris le chemin par défaut.

    • Priorité : un écouteur utilise la priorité d'un chemin pour déterminer vers lequel acheminer le trafic. Une valeur plus faible indique une priorité plus élevée. Le chemin par défaut a la priorité la plus faible. Si vous ajoutez un nouveau chemin, VPC Lattice lui attribue par défaut la deuxième priorité la plus faible. Cette priorité est juste supérieure à celle du chemin par défaut, mais inférieure à celle de tous les autres chemins non définis par défaut.

En outre, nous ferons référence aux entités AWS Identity and Access Management (IAM) suivantes :

  • Propriétaire du réseau : le propriétaire du réseau est le rôle IAM qui possède le réseau de service VPC Lattice.

  • Propriétaire du service : le propriétaire du service est le rôle IAM qui possède le service créé à l'aide d'une fonction Lambda. Le propriétaire du service et le propriétaire du réseau ne doivent pas nécessairement être la même entité.

Utilisation de Lambda avec VPC Lattice et les fonctions compatibles avec VPC

Par défaut, les fonctions Lambda ne peuvent accéder à aucune ressource privée dans un VPC. Lorsque vous configurez une fonction Lambda pour se connecter à des sous-réseaux privés dans un VPC, vous autorisez la fonction compatible VPC à accéder aux ressources de ce VPC. En d'autres termes, vous ne vous concentrez que sur la portée d'un seul VPC.

Les fonctions Lambda enregistrées en tant que services dans un réseau VPC Lattice ne sont pas les mêmes que les fonctions compatibles avec les VPC, mais elles peuvent être complémentaires. Lorsque vous enregistrez une fonction Lambda en tant que service dans un réseau VPC Lattice, vous créez un chemin d'entrée vers votre fonction à partir d'un ou plusieurs VPC. En outre, votre fonction peut avoir un chemin de sortie optionnel vers un autre VPC.

Lorsque vous enregistrez une fonction Lambda en tant que service, vous vous concentrez sur le scénario d'entrée. Cela englobe les configurations de règles d'écouteur spécifiques que les écouteurs utilisent pour acheminer le trafic vers votre service. À partir de là, votre fonction Lambda peut communiquer avec d'autres services AWS au sein de votre VPC par le biais d'une interface réseau Elastic (Hyperplane ENI). Le diagramme suivant illustre cette situation, où la fonction Lambda est un service au sein du réseau VPC Lattice.


          Diagramme d'architecture montrant comment les différents composants d'un réseau de services VPC Lattice interagissent, en se concentrant sur la fonction Lambda en tant que service enregistré.

Conditions préalables et autorisations

Cette rubrique suppose que vous disposez d'un réseau de services VPC Lattice et d'une fonction Lambda. Si vous n'avez pas encore de réseau de service VPC Lattice, reportez-vous au guide de l'utilisateur VPC Lattice pour en créer un.

Lorsque vous enregistrez votre fonction Lambda en tant que cible via la console Lambda ou AWS Command Line Interface (AWS CLI), Lambda ajoute automatiquement les autorisations nécessaires pour vous.

Pour que Lambda ajoute automatiquement les autorisations pour vous, afin que vous puissiez créer avec succès une fonction Lambda en tant que cible d'un service Lambda, votre fonction doit avoir les autorisations IAM suivantes :

  • AddPermission

  • CreateListener

  • CreateService

  • CreateServiceNetworkServiceAssociation

  • CreateTargetGroup

  • ListServiceNetworks (requis pour le flux de travail de la console uniquement)

  • RegisterTargets

Pour mettre à jour un service existant dans un réseau VPC Lattice afin qu'il pointe vers une fonction Lambda, votre rôle doit disposer des autorisations IAM suivantes :

  • CreateService

  • ListListeners (requis pour le flux de travail de la console uniquement)

  • ListServices (requis pour le flux de travail de la console uniquement)

  • RegisterTargets

Vous pouvez également ajouter manuellement l'autorisation à l'aide de la commande AWS CLI suivante :

aws lambda add-permission --function-name my-function \ --action lambda:InvokeFunction \ --statement-id allow-vpc-lattice \ --principal vpc-lattice.amazonaws.com --source-arn target-group-arn

Limites

Lorsque vous utilisez des fonctions Lambda avec des réseaux VPC Lattice, tenez compte des limites suivantes :

  • La fonction Lambda et le groupe cible doivent être dans le même compte et dans la même région.

  • La taille maximale du corps de la demande que vous pouvez rediriger vers un service créé à l'aide d'une fonction Lambda est de 6 Mo.

  • La taille maximale de la réponse JSON que la fonction Lambda peut renvoyer est de 6 Mo.

  • Vous pouvez choisir les protocoles HTTP et HTTPS uniquement.

Enregistrement de votre fonction Lambda auprès d'un réseau VPC Lattice

Vous pouvez enregistrer toute fonction Lambda existante auprès d'un réseau VPC Lattice à l'aide de la console AWS ou AWS CLI. Après avoir enregistré la fonction en tant que service, elle peut immédiatement commencer à recevoir des demandes.

Pour enregistrer une fonction Lambda auprès d'un réseau VPC Lattice (console)
  1. Ouvrez la page Fonction de la console Lambda.

  2. Choisissez le nom de la fonction que vous voulez enregistrer.

  3. Sous Function overview (Vue d’ensemble de la fonction), choisissez Add trigger (Ajouter un déclencheur).

  4. Dans le menu déroulant, sélectionnez Réseau d'applications VPC Lattice.

  5. Pour Intention, sélectionnez Créer un nouveau.

  6. Pour Service name (Nom du service), saisissez un nom pour votre service.

  7. Pour Réseau VPC Lattice, sélectionnez le réseau de services auquel vous voulez associer cette fonction Lambda. Vous pouvez également saisir l'Amazon Resource Name (ARN) complet du réseau de services. Si vous n'avez pas de réseau de services existant, vous pouvez choisir le lien dans la description, qui vous amène à la console Amazon VPC où vous pouvez créer un réseau VPC Lattice.

    Note

    Vous n'avez pas besoin de sélectionner un réseau VPC Lattice pour terminer la configuration du déclencheur. Toutefois, si vous créez le déclencheur sans sélectionner de réseau, les clients ne pourront pas accéder à votre service tant que vous ne l'aurez pas associé à un réseau VPC Lattice.

  8. Pour Écouteur, configurez les paramètres suivants :

    • Nom de l'écouteur : saisissez un nom pour votre écouteur

    • Protocole : le protocole que l'écouteur utilise pour envoyer la demande à la destination. Il peut s'agir de HTTP ou de HTTPS.

    • Port : le port que l'écouteur interroge pour les demandes entrantes. Il peut être compris entre 1 et 65 535 inclus.

    • Choisissez Ajouter un écouteur. VPC Lattice créera un acheminement par défaut avec le chemin par défaut /. Après la création du service, vous ne pouvez pas modifier ses paramètres de nom, de protocole et de port, mais vous pouvez toujours définir de nouveaux chemins de routage.

  9. Choisissez Ajouter.

Pour enregistrer une fonction Lambda auprès d'un réseau VPC Lattice (AWS CLI)
  1. Créez un service à l'aide de la commande create-service. Notez l'ARN du service dans la réponse. Vous en aurez besoin dans les étapes suivantes.

    aws vpc-lattice create-service --name my-vpc-lattice-service
  2. Créez un groupe cible à l'aide de la commande create-target-group. Notez l'ARN du groupe cible dans la réponse. Vous en aurez besoin dans les étapes suivantes.

    aws vpc-lattice create-target-group \ --name my-vpc-lattice-target-group \ --type LAMBDA
    Note

    Par défaut, cette commande crée un groupe cible qui envoie des événements avec la structure de l'événement V1 à votre fonction Lambda. Pour envoyer une structure de l'événement V2 compatible avec Amazon API Gateway, spécifiez l'option LambdaEventStructureVersion. Par exemple, ajoutez --lambda-event-structure-version V2 à la fin de la commande précédente.

  3. Créez un écouteur au sein du réseau de service à l'aide de la commande create-listener. Les nouveaux écouteurs utilisent automatiquement le chemin par défaut /. Remplacez la valeur du paramètre service par l'ARN de votre service de l'étape 1. Remplacez la valeur de TargetGroupArn dans le paramètre default-action par l'ARN de votre groupe cible de l'étape 2.

    aws vpc-lattice create-listener \ --name https --service-identifier svc-0e2f2665e1cebb720 \ --protocol HTTPS \ --default-action forward='{targetGroups={targetGroupIdentifier=tg-0e2f2665e1cebb720}}'
  4. Enregistrez votre fonction Lambda en tant que cible à l'aide de la commande register-targets. Remplacez la valeur du paramètre target-group-arn par l'ARN de votre groupe cible de l'étape 2. Remplacez la valeur de Id dans le paramètre targets par l'ARN de votre fonction Lambda.

    aws vpc-lattice register-targets \ --target-group-identifier arn:aws:vpc-lattice:us-west-2:123456789012:targetgroup/tg-0e2f2665e1cebb720 \ --targets id=arn:aws:lambda:us-west-2:123456789012:function:my-function
    Note

    Dans la commande register-targets précédente, si votre fonction Lambda n'autorise pas déjà explicitement VPC Lattice à l'invoquer, VPC Lattice attache automatiquement les autorisations nécessaires au rôle d'exécution de votre fonction. Pour permettre à VPC Lattice d'associer automatiquement des autorisations, votre rôle doit disposer de cette autorisation. AddPermission

  5. Associez le service au réseau de services à l'aide de la commande create-service-network-service-association. Remplacez la valeur du paramètre service par votre ARN de service de l'étape 1. Remplacez la valeur du paramètre service-network par l'ARN de votre réseau de service VPC Lattice.

    aws vpc-lattice create-service-network-service-association \ --service-identifier arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0b9b89d907bc8668c \ --service-network-identifier arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/03d622a31e5154247

Mise à jour de la cible d'un service dans un réseau VPC Lattice

Vous pouvez mettre à jour n'importe quel service existant dans un réseau VPC Lattice pour qu'il pointe vers une cible de fonction Lambda. Vous pouvez le faire en ajoutant un nouvel acheminement à l'aide de la console AWS ou AWS CLI. Lorsque vous ajoutez un nouveau chemin, VPC Lattice lui attribue la deuxième priorité la plus faible, juste au-dessus du chemin par défaut (priorité la plus faible).

Pour mettre à jour la cible d'un service afin qu'elle pointe vers une fonction Lambda (console)
  1. Ouvrez la page Fonction de la console Lambda.

  2. Choisissez le nom de la fonction que vous voulez enregistrer.

  3. Sous Function overview (Vue d’ensemble de la fonction), choisissez Add trigger (Ajouter un déclencheur).

  4. Dans le menu déroulant, sélectionnez Réseau d'applications VPC Lattice.

  5. Pour Intention, sélectionnez Sélectionner existant.

  6. Pour Nom du service, choisissez un service existant.

  7. Pour Écouteur, choisissez un écouteur existant.

  8. Pour Nom de la règle, saisissez un nom pour la nouvelle règle.

  9. Pour Chemin, définissez un nouvel acheminement pour l'écouteur.

  10. Choisissez Ajouter.

Pour les étapes suivantes, vous aurez besoin de l'ARN de votre service, ainsi que de l'ARN de l'écouteur pour lequel vous voulez ajouter une nouvelle règle.

  1. Créez un nouveau groupe cible à l'aide de la commande create-target-group. Notez l'ARN du groupe cible dans la réponse, car vous en aurez besoin pour les étapes suivantes.

    aws vpc-lattice create-target-group \ --name my-vpc-lattice-target-group \ --type LAMBDA
  2. Créez une nouvelle règle pour votre écouteur existant à l'aide de la commande create-rule. Cette commande suppose que vos conditions se trouvent dans un fichier appelé conditions-pattern.json dans votre répertoire actuel. Remplacez la valeur du paramètre listener-arn par l'ARN de votre écouteur. Remplacez la valeur de TargetGroupArn dans le paramètre actions par l'ARN de votre groupe cible de l'étape 1.

    aws vpc-lattice create-rule \ --name my-rule --priority 1 \ --listener-identifier listener-0e9af499f72e5251b \ --service-identifier svc-01755f67d3a427803 --match httpMatch='{pathMatch={match={prefix="/test"}}}' --default action forward='{targetGroups=[{targetGroupIdentifier=tg-042d5b70f1e743940}]}'
  3. Enregistrez votre fonction Lambda en tant que cible à l'aide de la commande register-targets. Remplacez la valeur du paramètre target-group-arn par l'ARN de votre groupe cible de l'étape 2. Remplacez la valeur de Id dans le paramètre targets par l'ARN de votre fonction Lambda.

    aws vpc-lattice register-targets \ --target-group-identifier arn:aws:vpc-lattice:us-west-2:123456789012:targetgroup/tg-0e2f2665e1cebb720 \ --targets id=arn:aws:lambda:us-west-2:123456789012:function:my-new-function

Annulation de l'enregistrement d'une cible de fonction Lambda

Pour annuler l'enregistrement d'une cible de fonction Lambda dans un réseau VPC Lattice, utilisez la console VPC. Pour plus d'informations, consultez le guide de l'utilisateur VPC Lattice.

Vous pouvez également utiliser la commande AWS CLI suivante :

aws vpc-lattice deregister-targets \ --target-group-identifier arn:aws:vpc-lattice:us-west-2:123456789012:targetgroup/tg-0e2f2665e1cebb720 \ --targets id=arn:aws:lambda:us-west-2:123456789012:function:my-new-function

Vous ne pouvez pas annuler l'enregistrement d'un service créé à l'aide de fonctions Lambda à partir de la console Lambda.

Mise en réseau inter-comptes

Les services de votre réseau de services VPC Lattice ne doivent pas nécessairement se trouver dans le même compte AWS. En outre, le réseau de services VPC Lattice lui-même peut résider dans un compte différent. Cela signifie que vous pouvez associer un service créé à l'aide de fonctions Lambda à un réseau de services dans un compte AWS différent. Vous aurez besoin d'autorisations spécifiques de la part du propriétaire du réseau pour créer ces associations de services. Pour plus d'informations sur les autorisations requises, consultez Préparation pour l'invocation d'API VPC Lattice dans le guide de l'utilisateur Amazon VPC Lattice.

Vous pouvez créer une association entre une fonction Lambda et un réseau de services dans un compte différent via la console AWS. Pour ce faire, au lieu de choisir le réseau VPC Lattice dans le menu déroulant (qui n'affiche que les réseaux de votre compte), collez l'ARN complet du réseau.

En général, vous pouvez créer une association entre n'importe quel service et n'importe quel réseau de services avec la commande create-service-network-service-association AWS CLI. Cela signifie que vous pouvez gérer vos réseaux de services dans un compte central et avoir des services créés à l'aide de fonctions Lambda dans d'autres comptes à travers votre organisation AWS. Dans l'exemple suivant, notez que les service et service-network se trouvent dans deux comptes différents :

aws vpc-lattice create-service-network-service-association \ --service arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0b9b89d907bc8668c \ --service-network arn:aws:vpc-lattice:us-west-2:444455556666:servicenetwork/03d622a31e5154247

Réception d'événements de VPC Lattice

Le service VPC Lattice achmine les demandes d'invocation Lambda par l'intermédiaire des protocoles HTTP et HTTPS. La version de la structure d'événements que reçoit votre fonction dépend de votre paramètre LambdaEventStructureVersion lorsque vous avez créé votre groupe cible.

Exemple de structure d'événement V1

Voici un exemple d'événement V1 que votre fonction Lambda pourrait recevoir de VPC Lattice, au format JSON :

{ "raw_path": "/path/to/resource", "method": "GET|POST|HEAD|...", "headers": {"header-key": "header-value", ... }, "query_string_parameters": {"key": "value", ...}, "body": "request-body", "is_base64_encoded": true|false }

Si l'en-tête content-encoding n'est pas présent, le codage Base64 dépend du type de contenu. Pour les types de contenu text/*, application/json, application/xml, et application/javascript, le service envoie le corps tel quel et définit isBase64Encoded sur false.

Note

Le corps de la demande peut avoir une taille maximale de 1 023 Kio s'il est envoyé en clair, ou de 767 Kio s'il est encodé en base64. La liste des en-têtes de la demande peut contenir un maximum de 50 paires clé-valeur.

Exemple de structure d'événement V2

Voici un exemple d'événement V2 que votre fonction Lambda pourrait recevoir de VPC Lattice, au format JSON :

{ "version": "2.0", "path": "/", "method": "GET|POST|HEAD|...", "headers": {"header-key": "header-value", ... }, "requestContext": { "serviceNetworkArn": "arn:aws:vpc-lattice:region:123456789012:servicenetwork/sn-0bf3f2882e9cc805a", "serviceArn": "arn:aws:vpc-lattice:region:123456789012:service/svc-0a40eebed65f8d69c", "targetGroupArn": "arn:aws:vpc-lattice:region:123456789012:targetgroup/tg-6d0ecf831eec9f09", "identity": { "sourceVpcArn": "arn:aws:ec2:region:123456789012:vpc/vpc-0b8276c84697e7339", "type" : "AWS_IAM", "principal": "arn:aws:sts::123456789012:assumed-role/example-role/057d00f8b51257ba3c853a0f248943cf", "sessionName": "057d00f8b51257ba3c853a0f248943cf", "x509SanDns": "example.com" }, "region": "region", "timeEpoch": "1690497599177430" } }

Renvoi des réponses à VPC Lattice

Lorsque vous renvoyez une réponse de votre fonction Lambda à VPC Lattice, elle doit inclure l'état de l'encodage Base64, le code d'état et les en-têtes appropriés. Le corps est facultatif. Vous trouverez ci-dessous un exemple de réponse au format JSON :

{ "isBase64Encoded": false, "statusCode": 200, "statusDescription": "200 OK", "headers": { "Set-Cookie": "cookies", "Content-Type": "application/json" }, "body": "Hello from Lambda (optional)" }

Pour inclure un contenu binaire dans le corps de la réponse, vous devez encoder le contenu en Base64 et définir isBase64Encoded sur true. Cela indique à VPC Lattice de décoder le contenu avant d'envoyer la réponse au client.

VPC Lattice n'honore pas les hop-by-hop en-têtes tels que ou. Connection Transfer-Encoding Vous pouvez également omettre l'en-tête Content-Length, car VPC Lattice le calcule automatiquement avant d'envoyer les réponses aux clients.

Note

Le corps de la réponse peut avoir une taille maximale de 1 023 Kio s'il est envoyé en clair, ou de 767 Kio s'il est encodé en base64. La liste des en-têtes de la réponse peut contenir un maximum de 50 paires clé-valeur.

Surveillance d'un service dans un réseau VPC Lattice

Pour surveiller les services créés à l'aide des fonctions Lambda dans un réseau VPC Lattice, VPC Lattice fournit des métriques, des journaux et des journaux d' CloudWatch accès AmazonAWS CloudTrail. Ces outils peuvent vous aider à suivre les principales métriques de performance, telles que le nombre total de demandes adressées à votre service et le nombre de dépassements de délai de connexion.

Par défaut, Lambda envoie automatiquement des métriques et des journaux d'historique CloudWatch des événements à. CloudTrail Les journaux d'accès sont facultatifs, et Lambda les désactive par défaut. Pour plus d'informations sur la surveillance, consultez Surveillance d'Amazon VPC Lattice dans le guide de l'utilisateur Amazon VPC Lattice.