Zephyrnet-logo

Roep AWS Lambda-functies op vanuit Amazon Kinesis Data Streams voor meerdere accounts | Amazon-webservices

Datum:

Een architectuur met meerdere accounts op AWS is essentieel voor het verbeteren van de beveiliging, compliance en resourcebeheer door werklasten te isoleren, granulaire kostentoewijzing mogelijk te maken en samenwerking tussen verschillende omgevingen te vergemakkelijken. Het beperkt ook de risico's, verbetert de schaalbaarheid en maakt geavanceerde netwerkconfiguraties mogelijk.

In een streamingarchitectuur kunt u gebeurtenisproducenten, streamopslag en gebeurtenisconsumenten in één account hebben of verspreid over verschillende accounts, afhankelijk van uw bedrijfs- en IT-vereisten. Uw bedrijf wil bijvoorbeeld de clickstreamgegevens centraliseren of gegevens van meerdere verschillende producenten over verschillende accounts loggen. Dataconsumenten uit de marketing-, product-engineering- of analysesector hebben toegang nodig tot dezelfde streamingdata over verschillende accounts heen, wat de mogelijkheid vereist om een ​​streamingarchitectuur voor meerdere accounts te leveren.

Om een ​​streamingarchitectuur met meerdere accounts te bouwen, kunt u gebruiken Amazon Kinesis-gegevensstromen als de stroomopslag en AWS Lambda als evenementconsument. Amazon Kinesis Data Streams maakt realtime verwerking van streaminggegevens op schaal mogelijk. Wanneer het is geïntegreerd met Lambda, maakt het serverloze gegevensverwerking mogelijk, waardoor u gegevensstromen in realtime kunt analyseren en erop kunt reageren zonder de infrastructuur te hoeven beheren. Deze integratie ondersteunt verschillende gebruiksscenario's, waaronder realtime analyses, logverwerking, gegevensopname via Internet of Things (IoT) en meer, waardoor het waardevol is voor bedrijven die tijdige inzichten uit hun streaminggegevens nodig hebben. In dit bericht laten we zien hoe u gegevens kunt verwerken die zijn opgenomen in een stream in het ene account met een Lambda-functie in een ander account.

De recente lancering van Kinesis Data Streams-ondersteuning voor op hulpbronnen gebaseerd beleid maakt het mogelijk om een ​​Lambda aan te roepen vanaf een ander account. Met een op bronnen gebaseerd beleid kunt u AWS-accounts opgeven, AWS Identiteits- en toegangsbeheer (IAM) gebruikers, of IAM-rollen en de exacte Kinesis Data Streams-acties waarvoor u toegang wilt verlenen. Nadat toegang is verleend, kunt u in een ander account een Lambda-functie configureren om de datastroom die bij uw account hoort te verwerken. Dit verlaagt de kosten en vereenvoudigt de pijplijn voor gegevensverwerking, omdat u niet langer streaminggegevens hoeft te kopiëren met behulp van Lambda-functies in beide accounts. Het delen van de toegang tot uw datastromen of geregistreerde consumenten brengt geen extra kosten met zich mee voor uw account. Het gebruik van Kinesis Data Streams-bronnen tussen accounts wordt nog steeds gefactureerd aan de eigenaren van de bronnen.

In dit bericht gebruiken we Kinesis Data Streams met verbeterde fan-out functie, waardoor consumenten een speciale leesdoorvoer krijgen die is afgestemd op hun toepassingen. Standaard biedt Kinesis Data Streams een gedeelde leesdoorvoer van 2 MB/sec per shard voor alle consumenten, maar met verbeterde fan-out kan elke consument genieten van een speciale doorvoer van 2 MB/sec per shard. Dankzij deze flexibiliteit kunt u Kinesis Data Streams naadloos aanpassen aan uw specifieke vereisten, waarbij u kunt kiezen tussen verbeterde fan-out voor specifieke doorvoer of gedeelde doorvoer, afhankelijk van uw behoeften.

Overzicht oplossingen

Voor onze oplossing zetten we Kinesis Data Streams in Account 1 in en Lambda als consument in Account 2 om data uit de datastroom te ontvangen. Het volgende diagram illustreert de architectuur op hoog niveau.

Amazon KDS-Lambda cross-acct-oplossingsarchitectuur

De installatie vereist de volgende belangrijke elementen:

  • Kinesis-gegevensstroom in account 1 en Lambda-functie in account 2
  • Kinesis Data Streams-bronbeleid in Account 1, waardoor een Lambda-uitvoeringsrol voor meerdere accounts mogelijk is om bewerkingen uit te voeren op de Kinesis-datastroom
  • Een Lambda-uitvoeringsrol in Account 2 en een verbeterd fan-out consumentenresourcebeleid in Account 1, waardoor de Lambda-uitvoeringsrol voor meerdere accounts bewerkingen kan uitvoeren op de Kinesis-datastroom

Voor de opstelling gebruik je er drie AWS CloudFormatie sjablonen om de belangrijkste bronnen te maken:

  • CloudFormation-sjabloon 1 creëert de volgende sleutelbronnen in Account 1:
    • Kinesis-gegevensstroom
    • Kinesis-datastroom verbeterde fan-out-consument
  • CloudFormation-sjabloon 2 creëert de volgende sleutelbronnen in Account 2:
    • Consumenten Lambda-functie
    • Uitvoerende rol voor de Lambda-functie van de consument
  • CloudFormation-sjabloon 3 maakt de volgende bron in Account 2:
    • Consumer Lambda-functiegebeurtenisbrontoewijzing

De oplossing ondersteunt implementatie in één regio en de CloudFormation-sjablonen moeten in dezelfde regio worden geïmplementeerd voor verschillende AWS-accounts. In deze oplossing gebruiken we de verbeterde fan-out van Kinesis Data Streams, wat een best practice is voor het implementeren van architecturen die een grote doorvoer vereisen voor meerdere consumenten. Voltooi de stappen in de volgende secties om deze oplossing te implementeren.

Voorwaarden

U moet twee AWS-accounts hebben en de vereiste machtigingen om een ​​CloudFormation-sjabloon uit te voeren om de services te creëren die worden vermeld in de oplossingsarchitectuur. Je hebt ook de AWS-opdrachtregelinterface (AWS CLI) geïnstalleerd, versie 2.15 en hoger.

Start CloudFormation-sjabloon 1

Voer de volgende stappen uit om de eerste CloudFormation-sjabloon te starten:

  1. Log in op AWS-beheerconsole als Account 1 en selecteer de juiste AWS-regio.
  2. Downloaden en starten CloudFormation-sjabloon 1 waar u uw Kinesis-datastroom wilt inzetten.
  3. Voor LambdaConsumerAccountId, voer uw Lambda-consumentenaccount-ID in en klik op verzenden. De implementatie van de CloudFormation-sjabloon duurt enkele minuten.
  4. Wanneer de stapel compleet is, navigeert u op de AWS CloudFormation-console naar de stapel Uitgangen tabblad en kopieer de waarden van de volgende parameters:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

U hebt deze waarden nodig in latere stappen.

Start CloudFormation-sjabloon 2

Voer de volgende stappen uit om de tweede CloudFormation-sjabloon te starten:

  1. Meld u aan bij de console als account 2 en selecteer de juiste regio.
  2. Downloaden en starten CloudFormation-sjabloon 2 waar u de Lambda-consument wilt hosten.
  3. Geef de volgende invoerparameters op die zijn vastgelegd uit de vorige stap:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

De CloudFormation-sjabloon maakt de volgende belangrijke bronnen:

  • Lambda-consument
  • Lambda uitvoeringsrol

De uitvoeringsrol van de Lambda-functie is een IAM-rol die de functie toestemming verleent voor toegang tot AWS-services en -bronnen. Hier maakt u een Lambda-uitvoeringsrol die over de vereiste machtigingen voor Kinesis Data Streams en Lambda-aanroep beschikt.

De implementatie van de CloudFormation-sjabloon duurt enkele minuten.

  1. Wanneer de stapel compleet is, navigeert u op de AWS CloudFormation-console naar de stapel Uitgangen tabblad en kopieer de waarden van de volgende parameters:
    • KinesisStreamCreateResourcePolicyCommand
    • KinesisStreamEFOConsumerCreateResourcePolicyCommand
  2. Voer de volgende AWS CLI-opdrachten uit in Account 1 met behulp van AWS-cloudshell. We raden u aan CloudShell te gebruiken omdat deze de nieuwste versie van de AWS CLI heeft en elke vorm van fouten voorkomt.
    • KinesisStreamCreateResourcePolicyCommand – Hiermee wordt het bronnenbeleid in Account 1 voor Kinesis Data Stream aangemaakt. Hier volgt een voorbeeld van een resourcebeleid:
      {
      "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 – Hiermee wordt het bronnenbeleid gemaakt voor de verbeterde fan-out-consument voor de Kinesis-gegevensstroom in Account 1. Het volgende is een voorbeeld van een bronnenbeleid:
      {
      "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"
      }
      ]
      }

U kunt dit beleid ook raadplegen op de Kinesis Data Streams-console, onder Verbeterde fan-out, Naam consument en Op consumenten gebaseerd beleid voor het delen van bronnen.

Start CloudFormation-sjabloon 3

Nu u in Account 1 bronbeleid hebt gemaakt voor de Kinesis-gegevensstroom en de verbeterde fan-out-consument, kunt u Lambda-gebeurtenisbrontoewijzing maken voor de Lambda-consumentenfunctie in Account 2. Voer de volgende stappen uit:

  1. Meld u aan bij de console als account 2 en selecteer de juiste regio.
  2. Downloaden en starten CloudFormation-sjabloon 3 om de stapel bij te werken die u hebt gemaakt met behulp van CloudFormation-sjabloon 2.

De CloudFormation-sjabloon maakt de Lambda-gebeurtenisbrontoewijzing.

Valideer de oplossing

Op dit punt is de implementatie voltooid. Er is een Kinesis-datastroom beschikbaar om de berichten te consumeren en een Lambda-functie ontvangt deze berichten in het bestemmingsaccount. Om voorbeeldberichten naar de gegevensstroom in Account 1 te verzenden, voert u de volgende AWS CLI-opdracht uit met behulp van CloudShell:

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

De Lambda-functie in Account 2 kan de berichten ontvangen en u zou hetzelfde moeten kunnen verifiëren met behulp van Amazon Cloud Watch stammen:

  1. Kies op de CloudWatch-console Log groepen in het navigatievenster.
  2. Zoek de logboekgroep /aws/lambda/kds-cross-account-stream-efo-consumer.
  3. Kies Zoeklogboekgroep om de relevante logberichten te bekijken. Het volgende is een voorbeeldbericht:
    "Records": [
    {
    "kinesis": {
    "kinesisSchemaVersion": "1.0",
    "partitionKey": "samplepartitionkey3",
    "sequenceNumber": "49648798411111169765201534322676841348246990356337393698",
    "data": "sampledatarecord",
    "approximateArrivalTimestamp": 1706623274.658
    },

Opruimen

Het is altijd een goede gewoonte om alle bronnen die je als onderdeel van dit bericht hebt gemaakt, op te ruimen om extra kosten te voorkomen.

Om uw bronnen op te ruimen, verwijdert u de respectieve CloudFormation-stacks uit Accounts 1 en 2 en stopt u de producent met het pushen van gebeurtenissen naar de Kinesis-gegevensstroom. Zo weet u zeker dat u niet onnodig kosten in rekening brengt.

Samengevat

In dit bericht hebben we gedemonstreerd hoe je een Lambda-integratie tussen accounts kunt configureren met Kinesis Data Streams met behulp van AWS-resource-gebaseerd beleid. Dit maakt de verwerking mogelijk van gegevens die zijn opgenomen in een stream binnen het ene AWS-account via een Lambda-functie in een ander account. Om klanten te ondersteunen die een Kinesis-datastream in hun centrale account gebruiken en meerdere consumenten er gegevens uit laten lezen, hebben we de verbeterde fan-out-functie van Kinesis Data Streams gebruikt.

Om aan de slag te gaan, opent u de Kinesis Data Streams-console of gebruikt u de nieuwe API PutResourcePolic om een ​​resourcebeleid aan uw datastroom of consument te koppelen.


Over de auteurs

Pratik Patel is Sr. Technical Account Manager en streaming analytics specialist. Hij werkt met AWS-klanten en biedt doorlopende ondersteuning en technische begeleiding om te helpen bij het plannen en bouwen van oplossingen met behulp van best practices en om de AWS-omgevingen van klanten proactief operationeel gezond te houden.

Liefde is een Senior Solutions Architect bij Amazon AWS in het Verenigd Koninkrijk. Hij werkt bij energie-, nutsbedrijven-, productie- en automobielklanten aan strategische implementaties, gespecialiseerd in het gebruik van AWS Streaming en geavanceerde data-analyseoplossingen om optimale bedrijfsresultaten te behalen.

spot_img

Laatste intelligentie

spot_img