Zephyrnet-Logo

Rufen Sie AWS Lambda-Funktionen aus kontoübergreifenden Amazon Kinesis Data Streams | auf Amazon Web Services

Datum:

Eine Architektur mit mehreren Konten auf AWS ist für die Verbesserung von Sicherheit, Compliance und Ressourcenmanagement unerlässlich, indem sie Arbeitslasten isoliert, eine detaillierte Kostenzuweisung ermöglicht und die Zusammenarbeit über verschiedene Umgebungen hinweg erleichtert. Darüber hinaus werden Risiken gemindert, die Skalierbarkeit verbessert und erweiterte Netzwerkkonfigurationen ermöglicht.

In einer Streaming-Architektur können Sie Ereignisproduzenten, Stream-Speicher und Ereigniskonsumenten in einem einzigen Konto haben oder je nach Ihren Geschäfts- und IT-Anforderungen auf verschiedene Konten verteilt sein. Beispielsweise möchte Ihr Unternehmen möglicherweise seine Clickstream-Daten oder Protokolldaten von mehreren verschiedenen Produzenten über verschiedene Konten hinweg zentralisieren. Datenkonsumenten aus den Bereichen Marketing, Produktentwicklung oder Analyse benötigen Zugriff auf dieselben Streaming-Daten über alle Konten hinweg, was die Fähigkeit erfordert, eine Streaming-Architektur für mehrere Konten bereitzustellen.

Zum Aufbau einer Multi-Account-Streaming-Architektur können Sie Folgendes verwenden: Amazon Kinesis-Datenströme als Streamspeicher und AWS Lambda als Ereigniskonsument. Amazon Kinesis Data Streams ermöglicht die Echtzeitverarbeitung von Streaming-Daten im großen Maßstab. Bei der Integration mit Lambda ermöglicht es eine serverlose Datenverarbeitung, sodass Sie Datenströme in Echtzeit analysieren und darauf reagieren können, ohne die Infrastruktur verwalten zu müssen. Diese Integration unterstützt verschiedene Anwendungsfälle, darunter Echtzeitanalysen, Protokollverarbeitung, Datenerfassung im Internet der Dinge (IoT) und mehr, was sie für Unternehmen wertvoll macht, die zeitnahe Erkenntnisse aus ihren Streaming-Daten benötigen. In diesem Beitrag zeigen wir, wie Sie in einem Konto in einen Stream aufgenommene Daten mit einer Lambda-Funktion in einem anderen Konto verarbeiten können.

Der kürzliche Start der Kinesis Data Streams-Unterstützung für Ressourcenbasierte Richtlinien ermöglicht den Aufruf eines Lambda von einem anderen Konto aus. Mit einer ressourcenbasierten Richtlinie können Sie AWS-Konten angeben, AWS Identity and Access Management and (IAM-)Benutzer oder IAM-Rollen und die genauen Kinesis Data Streams-Aktionen, für die Sie Zugriff gewähren möchten. Nachdem der Zugriff gewährt wurde, können Sie eine Lambda-Funktion in einem anderen Konto konfigurieren, um mit der Verarbeitung des zu Ihrem Konto gehörenden Datenstroms zu beginnen. Dies reduziert die Kosten und vereinfacht die Datenverarbeitungspipeline, da Sie Streaming-Daten nicht mehr mithilfe von Lambda-Funktionen in beiden Konten kopieren müssen. Durch die Freigabe des Zugriffs auf Ihre Datenströme oder registrierten Verbraucher fallen keine zusätzlichen Gebühren für Ihr Konto an. Die kontoübergreifende Nutzung von Kinesis Data Streams-Ressourcen wird weiterhin den Ressourceneigentümern in Rechnung gestellt.

In diesem Beitrag verwenden wir Kinesis Data Streams mit verbessertes Fan-Out Diese Funktion bietet Verbrauchern einen dedizierten Lesedurchsatz, der auf ihre Anwendungen zugeschnitten ist. Standardmäßig bietet Kinesis Data Streams einen gemeinsamen Lesedurchsatz von 2 MB/Sek. pro Shard für alle Verbraucher, aber mit verbessertem Fan-Out kann jeder Verbraucher einen dedizierten Durchsatz von 2 MB/Sek. pro Shard genießen. Diese Flexibilität ermöglicht es Ihnen, Kinesis Data Streams nahtlos an Ihre spezifischen Anforderungen anzupassen und je nach Bedarf zwischen erweitertem Fan-Out für dedizierten Durchsatz oder gemeinsamem Durchsatz zu wählen.

Lösungsüberblick

Für unsere Lösung stellen wir Kinesis Data Streams in Konto 1 und Lambda als Verbraucher in Konto 2 bereit, um Daten aus dem Datenstrom zu empfangen. Das folgende Diagramm veranschaulicht die High-Level-Architektur.

Amazon KDS-Lambda Cross-Act-Lösungsarchitektur

Für die Einrichtung sind folgende Schlüsselelemente erforderlich:

  • Kinesis-Datenstrom in Konto 1 und Lambda-Funktion in Konto 2
  • Kinesis Data Streams-Ressourcenrichtlinien in Konto 1, die es einer kontoübergreifenden Lambda-Ausführungsrolle ermöglichen, Vorgänge am Kinesis-Datenstream auszuführen
  • Eine Lambda-Ausführungsrolle in Konto 2 und eine erweiterte Fan-out-Verbraucherressourcenrichtlinie in Konto 1, die es der kontoübergreifenden Lambda-Ausführungsrolle ermöglicht, Vorgänge am Kinesis-Datenstrom auszuführen

Für den Aufbau nutzen Sie drei AWS CloudFormation Vorlagen zum Erstellen der wichtigsten Ressourcen:

  • CloudFormation-Vorlage 1 erstellt die folgenden Schlüsselressourcen in Konto 1:
    • Kinesis-Datenstrom
    • Kinesis-Datenstrom verbessert Fan-Out-Verbraucher
  • CloudFormation-Vorlage 2 erstellt die folgenden Schlüsselressourcen in Konto 2:
    • Verbraucher-Lambda-Funktion
    • Ausführungsrolle der Consumer-Lambda-Funktion
  • CloudFormation-Vorlage 3 erstellt die folgende Ressource in Konto 2:
    • Ereignisquellenzuordnung der Consumer-Lambda-Funktion

Die Lösung unterstützt die Bereitstellung in einer einzelnen Region und die CloudFormation-Vorlagen müssen in derselben Region über verschiedene AWS-Konten hinweg bereitgestellt werden. In dieser Lösung verwenden wir das erweiterte Fan-Out von Kinesis Data Streams. Dies ist eine bewährte Methode für die Bereitstellung von Architekturen, die einen hohen Durchsatz über mehrere Verbraucher hinweg erfordern. Führen Sie die Schritte in den folgenden Abschnitten aus, um diese Lösung bereitzustellen.

Voraussetzungen:

Sie sollten über zwei AWS-Konten und die erforderlichen Berechtigungen zum Ausführen einer CloudFormation-Vorlage verfügen, um die in der Lösungsarchitektur genannten Dienste zu erstellen. Sie benötigen auch die AWS-Befehlszeilenschnittstelle (AWS CLI) installiert, Version 2.15 und höher.

Starten Sie die CloudFormation-Vorlage 1

Führen Sie die folgenden Schritte aus, um die erste CloudFormation-Vorlage zu starten:

  1. Melden Sie sich bei der an AWS-Managementkonsole als Konto 1 und wählen Sie die entsprechende AWS-Region aus.
  2. Herunterladen und starten CloudFormation-Vorlage 1 wo Sie Ihren Kinesis-Datenstrom bereitstellen möchten.
  3. Aussichten für LambdaConsumerAccountId, geben Sie Ihre Lambda-Verbraucherkonto-ID ein und klicken Sie auf „Senden“. Die Bereitstellung der CloudFormation-Vorlage dauert einige Minuten.
  4. Wenn der Stapel vollständig ist, navigieren Sie in der AWS CloudFormation-Konsole zum Stapel Ausgänge Klicken Sie auf die Registerkarte und kopieren Sie die Werte der folgenden Parameter:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

Sie benötigen diese Werte in späteren Schritten.

Starten Sie die CloudFormation-Vorlage 2

Führen Sie die folgenden Schritte aus, um die zweite CloudFormation-Vorlage zu starten:

  1. Melden Sie sich als Konto 2 bei der Konsole an und wählen Sie die entsprechende Region aus.
  2. Herunterladen und starten CloudFormation-Vorlage 2 wo Sie den Lambda-Konsumenten hosten möchten.
  3. Geben Sie die folgenden Eingabeparameter an, die aus dem vorherigen Schritt erfasst wurden:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

Die CloudFormation-Vorlage erstellt die folgenden Schlüsselressourcen:

  • Lambda-Verbraucher
  • Lambda-Ausführungsrolle

Die Ausführungsrolle der Lambda-Funktion ist eine IAM-Rolle, die der Funktion die Berechtigung zum Zugriff auf AWS-Dienste und -Ressourcen erteilt. Hier erstellen Sie eine Lambda-Ausführungsrolle, die über die erforderlichen Kinesis Data Streams- und Lambda-Aufrufberechtigungen verfügt.

Die Bereitstellung der CloudFormation-Vorlage dauert einige Minuten.

  1. Wenn der Stapel vollständig ist, navigieren Sie in der AWS CloudFormation-Konsole zum Stapel Ausgänge Klicken Sie auf die Registerkarte und kopieren Sie die Werte der folgenden Parameter:
    • KinesisStreamCreateResourcePolicyCommand
    • KinesisStreamEFOConsumerCreateResourcePolicyCommand
  2. Führen Sie die folgenden AWS CLI-Befehle in Konto 1 mit aus AWS CloudShell. Wir empfehlen die Verwendung von CloudShell, da es über die neueste Version der AWS CLI verfügt und Fehler jeglicher Art vermeidet.
    • KinesisStreamCreateResourcePolicyCommand – Dadurch wird die Ressourcenrichtlinie in Konto 1 für Kinesis Data Stream erstellt. Im Folgenden finden Sie ein Beispiel für eine Ressourcenrichtlinie:
      {
      "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 – Dadurch wird die Ressourcenrichtlinie für den erweiterten Fanout-Konsumenten für den Kinesis-Datenstrom in Konto 1 erstellt. Im Folgenden finden Sie eine Beispielressourcenrichtlinie:
      {
      "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"
      }
      ]
      }

Sie können auf diese Richtlinie auch in der Kinesis Data Streams-Konsole unter zugreifen Verbessertes Fan-Out, Verbrauchername und Ressourcenbasierte Richtlinie zur gemeinsamen Nutzung von Verbrauchern.

Starten Sie die CloudFormation-Vorlage 3

Nachdem Sie nun in Konto 1 Ressourcenrichtlinien für den Kinesis-Datenstrom und seinen erweiterten Fan-Out-Konsumenten erstellt haben, können Sie eine Lambda-Ereignisquellenzuordnung für die Konsumenten-Lambda-Funktion in Konto 2 erstellen. Führen Sie die folgenden Schritte aus:

  1. Melden Sie sich als Konto 2 bei der Konsole an und wählen Sie die entsprechende Region aus.
  2. Herunterladen und starten CloudFormation-Vorlage 3 um den Stack zu aktualisieren, den Sie mit der CloudFormation-Vorlage 2 erstellt haben.

Die CloudFormation-Vorlage erstellt die Lambda-Ereignisquellenzuordnung.

Validieren Sie die Lösung

Zu diesem Zeitpunkt ist die Bereitstellung abgeschlossen. Zum Konsumieren der Nachrichten steht ein Kinesis-Datenstrom zur Verfügung, und eine Lambda-Funktion empfängt diese Nachrichten im Zielkonto. Um Beispielnachrichten an den Datenstrom in Konto 1 zu senden, führen Sie den folgenden AWS CLI-Befehl mit CloudShell aus:

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

Die Lambda-Funktion in Konto 2 kann die Nachrichten empfangen, und Sie sollten diese mit überprüfen können Amazon CloudWatch Protokolle:

  1. Wählen Sie in der CloudWatch-Konsole aus Protokollgruppen im Navigationsbereich.
  2. Suchen Sie die Protokollgruppe /aws/lambda/kds-cross-account-stream-efo-consumer.
  3. Auswählen Protokollgruppe durchsuchen um die relevanten Protokollmeldungen anzuzeigen. Das Folgende ist eine Beispielnachricht:
    "Records": [
    {
    "kinesis": {
    "kinesisSchemaVersion": "1.0",
    "partitionKey": "samplepartitionkey3",
    "sequenceNumber": "49648798411111169765201534322676841348246990356337393698",
    "data": "sampledatarecord",
    "approximateArrivalTimestamp": 1706623274.658
    },

Aufräumen

Es empfiehlt sich immer, alle Ressourcen zu bereinigen, die Sie im Rahmen dieses Beitrags erstellt haben, um zusätzliche Kosten zu vermeiden.

Um Ihre Ressourcen zu bereinigen, löschen Sie die entsprechenden CloudFormation-Stacks aus den Konten 1 und 2 und verhindern Sie, dass der Produzent Ereignisse an den Kinesis-Datenstrom weiterleitet. So stellen Sie sicher, dass Ihnen nicht unnötig Kosten in Rechnung gestellt werden.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie Sie mithilfe ressourcenbasierter AWS-Richtlinien eine kontoübergreifende Lambda-Integration mit Kinesis Data Streams konfigurieren. Dies ermöglicht die Verarbeitung von Daten, die in einem Stream innerhalb eines AWS-Kontos über eine Lambda-Funktion in einem anderen Konto aufgenommen wurden. Um Kunden zu unterstützen, die einen Kinesis-Datenstream in ihrem zentralen Konto verwenden und mehrere Verbraucher Daten daraus lesen, haben wir die erweiterte Fan-Out-Funktion von Kinesis Data Streams verwendet.

Öffnen Sie zunächst die Kinesis Data Streams-Konsole oder verwenden Sie die neue API PutResourcePolicy um eine Ressourcenrichtlinie an Ihren Datenstrom oder Verbraucher anzuhängen.


Über die Autoren

Pratik Patel ist Senior Technical Account Manager und Streaming-Analytics-Spezialist. Er arbeitet mit AWS-Kunden zusammen und bietet fortlaufenden Support und technische Beratung, um bei der Planung und Erstellung von Lösungen unter Verwendung von Best Practices zu helfen und die AWS-Umgebungen der Kunden proaktiv betriebssicher zu halten.

Lieben ist Senior Solutions Architect bei Amazon AWS in Großbritannien. Er arbeitet für Energie-, Versorgungs-, Fertigungs- und Automobilkunden an strategischen Implementierungen und ist auf den Einsatz von AWS Streaming und fortschrittlichen Datenanalyselösungen spezialisiert, um optimale Geschäftsergebnisse zu erzielen.

spot_img

Neueste Intelligenz

spot_img