Logo Zéphyrnet

Appeler les fonctions AWS Lambda à partir de flux de données Amazon Kinesis entre comptes | Services Web Amazon

Date :

Une architecture multi-comptes sur AWS est essentielle pour améliorer la sécurité, la conformité et la gestion des ressources en isolant les charges de travail, en permettant une allocation granulaire des coûts et en facilitant la collaboration entre des environnements distincts. Il atténue également les risques, améliore l'évolutivité et permet des configurations réseau avancées.

Dans une architecture de streaming, vous pouvez avoir des producteurs d'événements, du stockage de flux et des consommateurs d'événements dans un seul compte ou répartis sur différents comptes en fonction de vos besoins commerciaux et informatiques. Par exemple, votre entreprise souhaitera peut-être centraliser ses données de parcours ou enregistrer les données de plusieurs producteurs différents sur différents comptes. Les consommateurs de données du marketing, de l'ingénierie produit ou de l'analyse ont besoin d'accéder aux mêmes données de streaming sur tous les comptes, ce qui nécessite la capacité de fournir une architecture de streaming multi-comptes.

Pour créer une architecture de streaming multi-comptes, vous pouvez utiliser Flux de données Amazon Kinesis comme le stockage de flux et AWS Lambda en tant que consommateur d'événements. Amazon Kinesis Data Streams permet le traitement en temps réel des données en streaming à grande échelle. Lorsqu'il est intégré à Lambda, il permet un traitement des données sans serveur, vous permettant d'analyser et de réagir aux flux de données en temps réel sans gérer l'infrastructure. Cette intégration prend en charge divers cas d'utilisation, notamment l'analyse en temps réel, le traitement des journaux, l'ingestion de données de l'Internet des objets (IoT), et bien plus encore, ce qui la rend précieuse pour les entreprises qui ont besoin d'informations opportunes sur leurs données en streaming. Dans cet article, nous montrons comment traiter les données ingérées dans un flux dans un compte avec une fonction Lambda dans un autre compte.

Le lancement récent de la prise en charge de Kinesis Data Streams pour politiques basées sur les ressources permet d'appeler un Lambda à partir d'un autre compte. Avec une stratégie basée sur les ressources, vous pouvez spécifier des comptes AWS, Gestion des identités et des accès AWS (IAM) ou les rôles IAM et les actions Kinesis Data Streams exactes pour lesquelles vous souhaitez accorder l'accès. Une fois l'accès accordé, vous pouvez configurer une fonction Lambda dans un autre compte pour commencer à traiter le flux de données appartenant à votre compte. Cela réduit les coûts et simplifie le pipeline de traitement des données, car vous n'avez plus besoin de copier les données en streaming à l'aide des fonctions Lambda dans les deux comptes. Le partage de l'accès à vos flux de données ou à vos consommateurs enregistrés n'entraîne pas de frais supplémentaires sur votre compte. L'utilisation entre comptes des ressources Kinesis Data Streams continuera d'être facturée aux propriétaires des ressources.

Dans cet article, nous utilisons Kinesis Data Streams avec diffusion améliorée fonctionnalité, offrant aux consommateurs un débit de lecture dédié adapté à leurs applications. Par défaut, Kinesis Data Streams offre un débit de lecture partagé de 2 Mo/s par partition entre les consommateurs, mais avec une diffusion améliorée, chaque consommateur peut bénéficier d'un débit dédié de 2 Mo/s par partition. Cette flexibilité vous permet d'adapter de manière transparente Kinesis Data Streams à vos besoins spécifiques, en choisissant entre une diffusion améliorée pour un débit dédié ou un débit partagé en fonction de vos besoins.

Vue d'ensemble de la solution

Pour notre solution, nous déployons Kinesis Data Streams dans le compte 1 et Lambda en tant que consommateur dans le compte 2 pour recevoir les données du flux de données. Le diagramme suivant illustre l'architecture de haut niveau.

Architecture de solution multi-comptes Amazon KDS-Lambda

La configuration nécessite les éléments clés suivants :

  • Flux de données Kinesis dans le compte 1 et fonction Lambda dans le compte 2
  • Stratégies de ressources Kinesis Data Streams dans le compte 1, permettant à un rôle d'exécution Lambda entre comptes d'effectuer des opérations sur le flux de données Kinesis
  • Un rôle d'exécution Lambda dans le compte 2 et une stratégie de ressources de distribution améliorée dans le compte 1, permettant au rôle d'exécution Lambda entre comptes d'effectuer des opérations sur le flux de données Kinesis.

Pour la configuration, vous utilisez trois AWS CloudFormation modèles pour créer les ressources clés :

  • Le modèle CloudFormation 1 crée les ressources clés suivantes dans le compte 1 :
    • Flux de données Kinesis
    • Consommateur de diffusion amélioré du flux de données Kinesis
  • Le modèle CloudFormation 2 crée les ressources clés suivantes dans le compte 2 :
    • Fonction Lambda consommateur
    • Rôle d'exécution de la fonction Lambda du consommateur
  • Le modèle CloudFormation 3 crée la ressource suivante dans le compte 2 :
    • Mappage de la source d'événement de la fonction Lambda du consommateur

La solution prend en charge le déploiement dans une seule région et les modèles CloudFormation doivent être déployés dans la même région sur différents comptes AWS. Dans cette solution, nous utilisons la distribution améliorée de Kinesis Data Streams, qui constitue une bonne pratique pour déployer des architectures nécessitant un débit important sur plusieurs consommateurs. Suivez les étapes des sections suivantes pour déployer cette solution.

Pré-requis

Vous devez disposer de deux comptes AWS et des autorisations requises pour exécuter un modèle CloudFormation afin de créer les services mentionnés dans l'architecture de la solution. Vous avez également besoin du Interface de ligne de commande AWS (AWS CLI) installé, version 2.15 et supérieure.

Lancer le modèle CloudFormation 1

Effectuez les étapes suivantes pour lancer le premier modèle CloudFormation :

  1. Connectez-vous à la Console de gestion AWS en tant que compte 1 et sélectionnez la région AWS appropriée.
  2. Téléchargez et lancez Modèle CloudFormation 1 où vous souhaitez déployer votre flux de données Kinesis.
  3. Pour LambdaConsumerAccountId, saisissez l'ID de votre compte consommateur Lambda et cliquez sur Soumettre. Le déploiement du modèle CloudFormation prendra quelques minutes.
  4. Une fois la pile terminée, sur la console AWS CloudFormation, accédez à la pile Sortie et copiez les valeurs des paramètres suivants :
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

Vous aurez besoin de ces valeurs dans les étapes ultérieures.

Lancer le modèle CloudFormation 2

Effectuez les étapes suivantes pour lancer le deuxième modèle CloudFormation :

  1. Connectez-vous à la console en tant que compte 2 et sélectionnez la région appropriée.
  2. Téléchargez et lancez Modèle CloudFormation 2 où vous souhaitez héberger le consommateur Lambda.
  3. Fournissez les paramètres d'entrée suivants capturés à l'étape précédente :
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

Le modèle CloudFormation crée les ressources clés suivantes :

  • Consommateur Lambda
  • Rôle d'exécution Lambda

Le rôle d'exécution de la fonction Lambda est un rôle IAM qui accorde à la fonction l'autorisation d'accéder aux services et ressources AWS. Ici, vous créez un rôle d'exécution Lambda qui dispose des autorisations Kinesis Data Streams et d'appel Lambda requises.

Le déploiement du modèle CloudFormation prendra quelques minutes.

  1. Une fois la pile terminée, sur la console AWS CloudFormation, accédez à la pile Sortie et copiez les valeurs des paramètres suivants :
    • KinesisStreamCreateResourcePolicyCommand
    • KinesisStreamEFOConsumerCreateResourcePolicyCommand
  2. Exécutez les commandes AWS CLI suivantes dans le compte 1 à l'aide AWS Cloud Shell. Nous vous recommandons d'utiliser CloudShell car il disposera de la dernière version de l'AWS CLI et évitera tout type de panne.
    • KinesisStreamCreateResourcePolicyCommand – Cela crée la stratégie de ressources dans le compte 1 pour Kinesis Data Stream. Voici un exemple de stratégie de ressources :
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "StreamEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      "arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamSummary",
      "kinesis:ListShards",
      "kinesis:DescribeStream",
      "kinesis:GetRecords",
      "kinesis:GetShardIterator"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream"
      }
      ]
      }

    • KinesisStreamEFOConsumerCreateResourcePolicyCommand – Cela crée la stratégie de ressources pour le consommateur de diffusion amélioré pour le flux de données Kinesis dans le compte 1. Voici un exemple de stratégie de ressources :
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "ConsumerEFOReadStatementID",
      "Effect": "Allow",
      "Principal": {
      "AWS": [
      " arn:aws:iam::<AWS Lambda - Consumer account id>:role/kds-cross-account-stream-consumer-lambda-execution-role"
      ]
      },
      "Action": [
      "kinesis:DescribeStreamConsumer",
      "kinesis:SubscribeToShard"
      ],
      "Resource": "arn:aws:kinesis:<region id>:<Account 1 - Amazon KDS account id>:stream/kds-cross-account-stream/consumer/kds-cross-account-stream-efo-consumer:1706616477"
      }
      ]
      }

Vous pouvez également accéder à cette stratégie sur la console Kinesis Data Streams, sous Distribution améliorée, Nom du consommateuret Politique basée sur les ressources de partage des consommateurs.

Lancer le modèle CloudFormation 3

Maintenant que vous avez créé des stratégies de ressources dans le compte 1 pour le flux de données Kinesis et son consommateur de distribution amélioré, vous pouvez créer un mappage de source d'événement Lambda pour la fonction Lambda du consommateur dans le compte 2. Effectuez les étapes suivantes :

  1. Connectez-vous à la console en tant que compte 2 et sélectionnez la région appropriée.
  2. Téléchargez et lancez Modèle CloudFormation 3 pour mettre à jour la pile que vous avez créée à l'aide du modèle CloudFormation 2.

Le modèle CloudFormation crée le mappage de source d'événement Lambda.

Valider la solution

À ce stade, le déploiement est terminé. Un flux de données Kinesis est disponible pour consommer les messages et une fonction Lambda reçoit ces messages dans le compte de destination. Pour envoyer des exemples de messages au flux de données du compte 1, exécutez la commande AWS CLI suivante à l'aide de CloudShell :

aws kinesis put-record --stream-name kds-cross-account-stream --data sampledatarecord --partition-key samplepartitionkey3 --region <region id>

La fonction Lambda du compte 2 est capable de recevoir les messages et vous devriez pouvoir le vérifier en utilisant Amazon Cloud Watch logs:

  1. Sur la console CloudWatch, choisissez Groupes de journaux dans le volet de navigation.
  2. Localisez le groupe de journaux /aws/lambda/kds-cross-account-stream-efo-consumer.
  3. Selectionnez Groupe de journaux de recherche pour afficher les messages de journal pertinents. Voici un exemple de message :
    "Records": [
    {
    "kinesis": {
    "kinesisSchemaVersion": "1.0",
    "partitionKey": "samplepartitionkey3",
    "sequenceNumber": "49648798411111169765201534322676841348246990356337393698",
    "data": "sampledatarecord",
    "approximateArrivalTimestamp": 1706623274.658
    },

Nettoyer

C'est toujours une bonne pratique de nettoyer toutes les ressources que vous avez créées dans le cadre de cet article afin d'éviter tout coût supplémentaire.

Pour nettoyer vos ressources, supprimez les piles CloudFormation respectives des comptes 1 et 2 et empêchez le producteur de transmettre des événements au flux de données Kinesis. Cela garantit que vous n’êtes pas facturé inutilement.

Résumé

Dans cet article, nous avons montré comment configurer une intégration Lambda entre comptes avec Kinesis Data Streams à l'aide de stratégies basées sur les ressources AWS. Cela permet le traitement des données ingérées dans un flux au sein d'un compte AWS via une fonction Lambda située dans un autre compte. Pour prendre en charge les clients qui utilisent un flux de données Kinesis dans leur compte central et dont plusieurs consommateurs lisent les données, nous avons utilisé la fonctionnalité de diffusion améliorée de Kinesis Data Streams.

Pour commencer, ouvrez la console Kinesis Data Streams ou utilisez la nouvelle API PutResourcePolitique pour attacher une stratégie de ressources à votre flux de données ou à votre consommateur.


À propos des auteurs

Pratik Patel est Sr. Technical Account Manager et spécialiste de l'analyse du streaming. Il travaille avec les clients AWS et fournit une assistance et des conseils techniques continus pour aider à planifier et à créer des solutions en utilisant les meilleures pratiques et à maintenir de manière proactive les environnements AWS des clients en bon état de fonctionnement.

Amour est architecte de solutions senior chez Amazon AWS au Royaume-Uni. Il travaille avec des clients de l'énergie, des services publics, de la fabrication et de l'automobile sur des mises en œuvre stratégiques, se spécialisant dans l'utilisation des solutions AWS Streaming et d'analyse de données avancées, pour obtenir des résultats commerciaux optimaux.

spot_img

Dernières informations

spot_img