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.
Tutoriel : Utilisation d'un mappage de source d'MSKévénements Amazon pour appeler une fonction Lambda
Dans ce didacticiel, vous allez effectuer les opérations suivantes :
Créez une fonction Lambda dans le même AWS compte qu'un cluster Amazon MSK existant.
Configurez le réseau et l'authentification pour que Lambda communique avec Amazon. MSK
Configurez un mappage des sources d'MSKévénements Lambda Amazon, qui exécute votre fonction Lambda lorsque des événements apparaissent dans la rubrique.
Une fois ces étapes terminées, lorsque des événements seront envoyés à AmazonMSK, vous pourrez configurer une fonction Lambda pour traiter ces événements automatiquement avec votre propre code Lambda personnalisé.
Que pouvez-vous faire avec cette fonctionnalité ?
Exemple de solution : utilisez un mappage des sources d'MSKévénements pour fournir des scores en direct à vos clients.
Imaginons le scénario suivant : votre entreprise héberge une application Web dans laquelle vos clients peuvent consulter des informations sur des événements en direct, tels que des matchs de sport. Les informations mises à jour du jeu sont fournies à votre équipe via un sujet Kafka sur AmazonMSK. Vous souhaitez concevoir une solution qui utilise les mises à jour du MSK sujet pour fournir une vue actualisée de l'événement en direct aux clients au sein d'une application que vous développez. Vous avez opté pour l'approche de conception suivante : vos applications clientes communiqueront avec un backend sans serveur hébergé dans. AWS Les clients se connecteront via des sessions Websocket à l'aide d'Amazon API Gateway WebSocket API.
Dans cette solution, vous avez besoin d'un composant qui lit les MSK événements, exécute une logique personnalisée pour préparer ces événements pour la couche application, puis transmet ces informations à la API passerelleAPI. Vous pouvez implémenter ce composant en fournissant votre logique personnalisée dans une fonction Lambda, puis en l'appelant à l'aide d'un mappage de source d'MSKévénements AWS Lambda Amazon. AWS Lambda
Pour plus d'informations sur la mise en œuvre de solutions à l'aide d'Amazon API Gateway WebSocket API, consultez les WebSocket APIdidacticiels de la documentation de API Gateway.
Prérequis
Un AWS compte avec les ressources préconfigurées suivantes :
Pour remplir ces conditions préalables, nous vous recommandons de suivre Getting started using Amazon MSK dans la MSK documentation Amazon.
Un MSK cluster Amazon. Consultez Créer un MSK cluster Amazon dans Getting started using Amazon MSK.
La configuration suivante :
-
Assurez-vous que l'authentification IAM basée sur les rôles est activée dans les paramètres de sécurité de votre cluster. Cela améliore votre sécurité en limitant votre fonction Lambda à accéder uniquement aux MSK ressources Amazon nécessaires. Ceci est activé par défaut sur les nouveaux MSK clusters Amazon.
-
Assurez-vous que l'accès public est désactivé dans les paramètres réseau de votre cluster. Restreindre l'accès à Internet de votre MSK cluster Amazon améliore votre sécurité en limitant le nombre d'intermédiaires qui traitent vos données. Ceci est activé par défaut sur les nouveaux MSK clusters Amazon.
-
Une rubrique Kafka dans votre MSK cluster Amazon à utiliser pour cette solution. Consultez Créer un sujet dans Getting started using Amazon MSK.
-
Un hôte administrateur Kafka configuré pour récupérer les informations de votre cluster Kafka et envoyer des événements Kafka à votre sujet à des fins de test, par exemple une EC2 instance Amazon sur laquelle l'administrateur Kafka et la bibliothèque CLI Amazon sont installés. MSK IAM Consultez la section Création d'un ordinateur client dans Getting started using Amazon MSK.
Une fois que vous avez configuré ces ressources, collectez les informations suivantes à partir de votre AWS compte pour confirmer que vous êtes prêt à continuer.
-
Le nom de votre MSK cluster Amazon. Vous pouvez trouver ces informations dans la MSK console Amazon.
-
Le clusterUUID, qui fait partie du ARN MSK cluster Amazon, que vous pouvez trouver dans la MSK console Amazon. Suivez les procédures décrites dans la section Listing clusters de la MSK documentation Amazon pour trouver ces informations.
-
Les groupes de sécurité associés à votre MSK cluster Amazon. Vous pouvez trouver ces informations dans la MSK console Amazon. Dans les étapes suivantes, appelez-les vos
clusterSecurityGroups
. -
L'identifiant de l'Amazon VPC contenant votre MSK cluster Amazon. Vous pouvez trouver ces informations en identifiant les sous-réseaux associés à votre MSK cluster Amazon dans la MSK console Amazon, puis en identifiant l'Amazon VPC associé au sous-réseau dans la console AmazonVPC.
-
Le nom du sujet Kafka utilisé dans votre solution. Vous pouvez trouver ces informations en appelant votre MSK cluster Amazon avec le Kafka
topics
CLI depuis votre hôte administrateur Kafka. Pour plus d'informations sur les sujetsCLI, consultez la section Ajouter et supprimer des sujetsdans la documentation de Kafka. -
Le nom d'un groupe de consommateurs pour votre sujet Kafka, adapté à une utilisation par votre fonction Lambda. Ce groupe peut être créé automatiquement par Lambda, vous n'avez donc pas besoin de le créer avec le Kafka. CLI Si vous devez gérer vos groupes de consommateurs, pour en savoir plus sur les groupes de consommateursCLI, consultez la section Gestion des groupes de consommateurs
dans la documentation de Kafka.
Les autorisations suivantes dans votre AWS compte :
Autorisation de créer et de gérer une fonction Lambda.
Autorisation de créer des IAM politiques et de les associer à votre fonction Lambda.
Autorisation de créer des VPC points de terminaison Amazon et de modifier la configuration réseau dans l'Amazon VPC hébergeant votre MSK cluster Amazon.
Configurer la connectivité réseau pour que Lambda communique avec Amazon MSK
AWS PrivateLink À utiliser pour connecter Lambda et Amazon. MSK Vous pouvez le faire en créant une interface Amazon VPC endpoints dans la VPC console Amazon. Pour plus d'informations sur la configuration réseau, consultezConfigurer la sécurité réseau.
Lorsqu'un mappage de source d'MSKévénements Amazon s'exécute pour le compte d'une fonction Lambda, il assume le rôle d'exécution de la fonction Lambda. Ce IAM rôle autorise le mappage à accéder à des ressources sécurisées parIAM, telles que votre MSK cluster Amazon. Bien que les composants partagent un rôle d'exécution, le MSK mappage Amazon et votre fonction Lambda ont des exigences de connectivité distinctes pour leurs tâches respectives, comme le montre le schéma suivant.
Le mappage de votre source d'événements appartient au groupe de sécurité de votre MSK cluster Amazon. Au cours de cette étape de mise en réseau, créez des VPC points de terminaison Amazon à partir de votre MSK cluster Amazon VPC pour connecter le mappage des sources d'événements au Lambda STS et aux services. Sécurisez ces points de terminaison pour accepter le trafic provenant du groupe de sécurité de votre MSK cluster Amazon. Ajustez ensuite les groupes de sécurité du MSK cluster Amazon pour permettre au mappage des sources d'événements de communiquer avec le MSK cluster Amazon.
Vous pouvez configurer les étapes suivantes à l'aide du AWS Management Console.
Pour configurer les VPC points de terminaison Amazon de l'interface afin de connecter Lambda et Amazon MSK
-
Créez un groupe de sécurité pour votre interface Amazon VPC endpoints
endpointSecurityGroup
, qui autorise le TCP trafic entrant sur 443 depuis.clusterSecurityGroups
Suivez la procédure décrite dans Créer un groupe de sécurité dans la EC2 documentation Amazon pour créer un groupe de sécurité. Suivez ensuite la procédure décrite dans Ajouter des règles à un groupe de sécurité dans la EC2 documentation Amazon pour ajouter les règles appropriées.Créez un groupe de sécurité avec les informations suivantes :
Lorsque vous ajoutez vos règles de trafic entrant, créez une règle pour chaque groupe de sécurité dans
clusterSecurityGroups
. Pour chaque règle :-
Pour Type, sélectionnez HTTPS.
-
Pour Source, sélectionnez l'un des
clusterSecurityGroups
.
-
-
Créez un point de terminaison connectant le service Lambda à l'Amazon VPC contenant votre cluster AmazonMSK. Suivez la procédure décrite dans Créer un point de terminaison d'interface.
Créez un point de terminaison d'interface avec les informations suivantes :
-
Dans Nom du service
com.amazonaws.
, sélectionnez oùregionName
.lambdaregionName
héberge votre fonction Lambda. -
Pour VPC, sélectionnez l'Amazon VPC contenant votre MSK cluster Amazon.
-
Pour les groupes de sécurité
endpointSecurityGroup
, sélectionnez ceux que vous avez créés précédemment. -
Pour les sous-réseaux, sélectionnez les sous-réseaux qui hébergent votre cluster AmazonMSK.
-
Pour Policy, fournissez le document de politique suivant, qui sécurise le point de terminaison afin qu'il soit utilisé par le principal de service Lambda pour
lambda:InvokeFunction
l'action.{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
-
Assurez-vous que le DNS nom Enable reste défini.
-
-
Créez un point de terminaison connectant le AWS STS service à l'Amazon VPC contenant votre MSK cluster Amazon. Suivez la procédure décrite dans Créer un point de terminaison d'interface.
Créez un point de terminaison d'interface avec les informations suivantes :
-
Pour Nom du service, sélectionnez AWS STS.
-
Pour VPC, sélectionnez l'Amazon VPC contenant votre MSK cluster Amazon.
-
Pour les groupes de sécurité, sélectionnez
endpointSecurityGroup
. -
Pour les sous-réseaux, sélectionnez les sous-réseaux qui hébergent votre cluster AmazonMSK.
-
Pour Policy, fournissez le document de politique suivant, qui sécurise le point de terminaison afin qu'il soit utilisé par le principal de service Lambda pour
sts:AssumeRole
l'action.{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
-
Assurez-vous que le DNS nom Enable reste défini.
-
-
Pour chaque groupe de sécurité associé à votre MSK cluster Amazon, c'est-à-dire dans
clusterSecurityGroups
, autorisez les éléments suivants :Autorisez tout le TCP trafic entrant et sortant du 9098 à tous
clusterSecurityGroups
, y compris à l'intérieur de celui-ci.Autoriser tout le TCP trafic sortant sur le 443.
Une partie de ce trafic est autorisée par les règles des groupes de sécurité par défaut. Par conséquent, si votre cluster est attaché à un seul groupe de sécurité et que ce groupe possède des règles par défaut, des règles supplémentaires ne sont pas nécessaires. Pour ajuster les règles des groupes de sécurité, suivez les procédures décrites dans Ajouter des règles à un groupe de sécurité dans la EC2 documentation Amazon.
Ajoutez des règles à vos groupes de sécurité avec les informations suivantes :
-
Pour chaque règle entrante ou sortante pour le port 9098, fournissez
Pour Type, sélectionnez Personnalisé TCP.
Pour la plage de ports, indiquez 9098.
Pour Source, indiquez l'un des
clusterSecurityGroups
.
-
Pour chaque règle entrante pour le port 443, sélectionnez HTTPSType.
Créez un IAM rôle pour que Lambda puisse lire un extrait de votre rubrique Amazon MSK
Identifiez les exigences d'authentification pour que Lambda puisse lire des articles de votre rubrique MSK Amazon, puis définissez-les dans une politique. Créez un rôle qui autorise Lambda à utiliser ces autorisations. lambdaAuthRole
Autorisez les actions sur votre MSK cluster Amazon à l'aide d'kafka-cluster
IAMactions. Autorisez ensuite Lambda à effectuer les EC2 actions Amazon et MSK kafka
Amazon nécessaires pour découvrir votre MSK cluster Amazon et s'y connecter, ainsi que des CloudWatch actions afin que Lambda puisse enregistrer ce qu'il a fait.
Pour décrire les exigences d'authentification pour que Lambda puisse lire depuis Amazon MSK
-
Rédigez un document de IAM politique (un JSON document) qui permet à Lambda de lire un extrait de votre sujet Kafka dans votre MSK cluster Amazon en utilisant votre groupe de consommateurs Kafka.
clusterAuthPolicy
Lambda nécessite qu'un groupe de consommateurs Kafka soit défini lors de la lecture.Modifiez le modèle suivant pour l'aligner sur vos prérequis :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:DescribeGroup", "kafka-cluster:AlterGroup", "kafka-cluster:DescribeTopic", "kafka-cluster:ReadData", "kafka-cluster:DescribeClusterDynamicConfiguration" ], "Resource": [ "arn:aws:kafka:
region
:account-id
:cluster/mskClusterName
/cluster-uuid
", "arn:aws:kafka:region
:account-id
:topic/mskClusterName
/cluster-uuid
/mskTopicName
", "arn:aws:kafka:region
:account-id
:group/mskClusterName
/cluster-uuid
/mskGroupName
" ] } ] }Pour plus d'informations, consultezAuthentification basée sur les rôles IAM. Lorsque vous rédigez votre politique :
-
Pour
region
etaccount-id
, fournissez ceux qui hébergent votre MSK cluster Amazon. -
Pour
mskClusterName
, indiquez le nom de votre MSK cluster Amazon. -
Pour
cluster-uuid
, fournissez le UUID in ARN pour votre MSK cluster Amazon. -
Pour
mskTopicName
, indiquez le nom de votre sujet Kafka. -
Pour
mskGroupName
, indiquez le nom de votre groupe de consommateurs Kafka.
-
-
Identifiez AmazonMSK, Amazon EC2 et CloudWatch les autorisations requises pour que Lambda découvre et connecte votre MSK cluster Amazon, puis enregistrez ces événements.
La politique
AWSLambdaMSKExecutionRole
gérée définit de manière permissive les autorisations requises. Utilisez-le dans les étapes suivantes.Dans un environnement de production, déterminez si vous
AWSLambdaMSKExecutionRole
souhaitez restreindre votre politique de rôle d'exécution sur la base du principe du moindre privilège, puis rédigez une politique pour votre rôle qui remplace cette politique gérée.
Pour plus de détails sur le langage de IAM politique, consultez la IAMdocumentation.
Maintenant que vous avez rédigé votre document de stratégie, créez-en une IAM afin de pouvoir l'associer à votre rôle. Vous pouvez le faire à l'aide de la console en suivant la procédure suivante.
Pour créer une IAM politique à partir de votre document de stratégie
Connectez-vous à la IAM console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/iam/
. -
Dans le panneau de navigation de gauche, choisissez Politiques.
-
Choisissez Create Policy (Créer une politique).
-
Dans la section Éditeur de politiques, choisissez l'JSONoption.
-
Coller
clusterAuthPolicy
. -
Lorsque vous avez fini d'ajouter des autorisations à la politique, choisissez Suivant.
-
Sur la page Vérifier et créer, tapez un Nom de politique et une Description (facultative) pour la politique que vous créez. Vérifiez les Autorisations définies dans cette politique pour voir les autorisations accordées par votre politique.
-
Choisissez Create policy (Créer une politique) pour enregistrer votre nouvelle politique.
Pour plus d'informations, consultez la section Création IAM de politiques dans la IAM documentation.
Maintenant que vous disposez des IAM politiques appropriées, créez un rôle et associez-le à celui-ci. Vous pouvez le faire à l'aide de la console en suivant la procédure suivante.
Pour créer un rôle d'exécution dans la console IAM
-
Ouvrez la page Roles
(Rôles) dans la console IAM. -
Choisissez Create role (Créer un rôle).
-
Sous Trusted entity type (Type d'entité approuvée), choisissez service AWS .
-
Sous Cas d'utilisation, choisissez Lambda.
-
Choisissez Suivant.
-
Sélectionnez les stratégies suivantes :
clusterAuthPolicy
AWSLambdaMSKExecutionRole
-
Choisissez Suivant.
-
Dans Nom du rôle, entrez
lambdaAuthRole
puis choisissez Créer un rôle.
Pour de plus amples informations, veuillez consulter Définition des autorisations de fonction Lambda avec un rôle d’exécution.
Créez une fonction Lambda pour lire un extrait de votre rubrique Amazon MSK
Créez une fonction Lambda configurée pour utiliser votre IAM rôle. Vous pouvez créer votre fonction Lambda à l'aide de la console.
Pour créer une fonction Lambda à l'aide de votre configuration d'authentification
Ouvrez la console Lambda et sélectionnez Create function dans l'en-tête.
Sélectionnez Créer à partir de zéro.
Pour Nom de la fonction, indiquez le nom approprié de votre choix.
Pour Runtime, choisissez la dernière version prise en charge de
Node.js
pour utiliser le code fourni dans ce didacticiel.Choisissez Modifier le rôle d'exécution par défaut.
Sélectionnez Utiliser un rôle existant.
Pour Rôle existant, sélectionnez
lambdaAuthRole
.
Dans un environnement de production, vous devez généralement ajouter des politiques supplémentaires au rôle d'exécution de votre fonction Lambda afin de traiter de manière significative vos événements Amazon. MSK Pour plus d'informations sur l'ajout de politiques à votre rôle, consultez la section Ajouter ou supprimer des autorisations d'identité dans la IAM documentation.
Créez une source d'événement mappée à votre fonction Lambda
Le mappage de votre source d'MSKévénements Amazon fournit au service Lambda les informations nécessaires pour appeler votre Lambda lorsque des événements Amazon appropriés se produisent. MSK Vous pouvez créer un MSK mappage Amazon à l'aide de la console. Créez un déclencheur Lambda, puis le mappage des sources d'événements est automatiquement configuré.
Pour créer un déclencheur Lambda (et un mappage des sources d'événements)
Accédez à la page de présentation de votre fonction Lambda.
Dans la section de présentation des fonctions, choisissez Ajouter un déclencheur en bas à gauche.
Dans le menu déroulant Sélectionnez une source, sélectionnez Amazon MSK.
Ne configurez pas l'authentification.
Pour le MSKcluster, sélectionnez le nom de votre cluster.
Pour Taille du lot, entrez 1. Cette étape facilite le test de cette fonctionnalité et ne constitue pas une valeur idéale en production.
Dans le champ Nom du sujet, indiquez le nom de votre sujet Kafka.
Pour l'identifiant du groupe de consommateurs, indiquez l'identifiant de votre groupe de consommateurs Kafka.
Mettez à jour votre fonction Lambda pour lire vos données de streaming
Lambda fournit des informations sur les événements Kafka via le paramètre de méthode d'événement. Pour un exemple de structure d'un MSK événement Amazon, consultez Exemple d’évènement. Après avoir compris comment interpréter les MSK événements Amazon transférés par Lambda, vous pouvez modifier le code de votre fonction Lambda pour utiliser les informations qu'ils fournissent.
Fournissez le code suivant à votre fonction Lambda pour enregistrer le contenu d'un MSK événement Lambda Amazon à des fins de test :
Vous pouvez fournir un code de fonction à votre Lambda à l'aide de la console.
Pour mettre à jour le code de fonction à l’aide de l’éditeur de code de la console
-
Ouvrez la page Fonctions
de la console Lambda et choisissez votre fonction. -
Sélectionnez l’onglet Code.
-
Dans le volet Source du code, sélectionnez votre fichier de code source et modifiez-le dans l’éditeur de code intégré.
-
Dans la DEPLOYsection, choisissez Deploy pour mettre à jour le code de votre fonction :
Testez votre fonction Lambda pour vérifier qu'elle est connectée à votre rubrique Amazon MSK
Vous pouvez désormais vérifier si votre Lambda est invoqué par la source d'événements en consultant les journaux d'événements. CloudWatch
Pour vérifier si votre fonction Lambda est invoquée
-
Utilisez votre hôte d'administration Kafka pour générer des événements Kafka à l'aide du.
kafka-console-producer
CLI Pour plus d'informations, voir Écrire des événements dans le sujetdans la documentation de Kafka. Envoyez suffisamment d'événements pour remplir le lot défini en fonction de la taille du lot pour le mappage de votre source d'événements défini à l'étape précédente, sinon Lambda attendra d'autres informations pour appeler. -
Si votre fonction s'exécute, Lambda écrit ce qui s'est passé à. CloudWatch Dans la console, accédez à la page détaillée de votre fonction Lambda.
-
Sélectionnez l'onglet Configuration.
-
Dans la barre latérale, sélectionnez Outils de surveillance et d'exploitation.
-
Identifiez le groupe de CloudWatch journaux sous Configuration de la journalisation. Le groupe de journaux doit commencer par
/aws/lambda
. Choisissez le lien vers le groupe de journaux. -
Dans la CloudWatch console, examinez les événements du journal pour les événements du journal que Lambda a envoyés au flux de journal. Identifiez s'il existe des événements de journal contenant le message de votre événement Kafka, comme dans l'image suivante. Si tel est le cas, vous avez connecté avec succès une fonction Lambda à Amazon à l'MSKaide d'un mappage de source d'événements Lambda.