Zephyrnet-logo

Aktiver AWS Lambda-funksjoner fra Amazon Kinesis-datastrømmer på tvers av kontoer | Amazon Web Services

Dato:

En flerkontoarkitektur på AWS er ​​avgjørende for å forbedre sikkerhet, samsvar og ressursadministrasjon ved å isolere arbeidsbelastninger, muliggjøre detaljert kostnadsfordeling og lette samarbeid på tvers av forskjellige miljøer. Det reduserer også risikoer, forbedrer skalerbarheten og gir mulighet for avanserte nettverkskonfigurasjoner.

I en strømmearkitektur kan du ha hendelsesprodusenter, strømlagrings- og begivenhetsforbrukere på én enkelt konto eller spredt på forskjellige kontoer avhengig av virksomheten og IT-kravene dine. For eksempel kan bedriften din ønske å sentralisere sine klikkstrømdata eller logge data fra flere forskjellige produsenter på tvers av forskjellige kontoer. Dataforbrukere fra markedsføring, produktutvikling eller analyse krever tilgang til de samme strømmedataene på tvers av kontoer, noe som krever muligheten til å levere en strømmearkitektur for flere kontoer.

For å bygge en strømmearkitektur for flere kontoer kan du bruke Amazon Kinesis datastrømmer som strømlagring og AWS Lambda som eventforbruker. Amazon Kinesis Data Streams muliggjør sanntidsbehandling av strømmedata i stor skala. Når den er integrert med Lambda, tillater den serverløs databehandling, slik at du kan analysere og reagere på datastrømmer i sanntid uten å administrere infrastruktur. Denne integrasjonen støtter ulike brukstilfeller, inkludert sanntidsanalyse, loggbehandling, Internet of Things (IoT) datainntak og mer, noe som gjør det verdifullt for bedrifter som trenger tidsriktig innsikt fra strømmedataene deres. I dette innlegget viser vi hvordan du kan behandle data inntatt i en strøm på én konto med en Lambda-funksjon i en annen konto.

Den nylige lanseringen av Kinesis Data Streams-støtte for ressursbaserte retningslinjer gjør det mulig å påkalle en Lambda fra en annen konto. Med en ressursbasert policy kan du spesifisere AWS-kontoer, AWS identitets- og tilgangsadministrasjon (IAM)-brukere, eller IAM-roller og de eksakte Kinesis Data Streams-handlingene du vil gi tilgang til. Etter at tilgang er gitt, kan du konfigurere en Lambda-funksjon i en annen konto for å begynne å behandle datastrømmen som tilhører kontoen din. Dette reduserer kostnadene og forenkler databehandlingspipeline, fordi du ikke lenger trenger å kopiere strømmedata ved å bruke Lambda-funksjoner i begge kontoene. Deling av tilgang til datastrømmene dine eller registrerte forbrukere medfører ingen ekstra kostnader til kontoen din. Bruk av Kinesis Data Streams-ressurser på tvers av kontoer vil fortsatt bli fakturert til ressurseierne.

I dette innlegget bruker vi Kinesis Data Streams med forbedret fan-out funksjon, som gir forbrukere dedikert lesegjennomstrømning skreddersydd for deres applikasjoner. Som standard tilbyr Kinesis Data Streams delt lesegjennomstrømning på 2 MB/sek per shard på tvers av forbrukere, men med forbedret fan-out kan hver forbruker nyte en dedikert gjennomstrømning på 2 MB/sek per shard. Denne fleksibiliteten lar deg sømløst tilpasse Kinesis Data Streams til dine spesifikke krav, ved å velge mellom forbedret fan-out for dedikert gjennomstrømning eller delt gjennomstrømning i henhold til dine behov.

Løsningsoversikt

For vår løsning distribuerer vi Kinesis datastrømmer i konto 1 og Lambda som forbruker på konto 2 for å motta data fra datastrømmen. Følgende diagram illustrerer høynivåarkitekturen.

Amazon KDS-Lambda cross acct-løsningsarkitektur

Oppsettet krever følgende nøkkelelementer:

  • Kinesis datastrøm i konto 1 og lambdafunksjon i konto 2
  • Kinesis Data Streams ressurspolicyer i konto 1, slik at en Lambda-utførelsesrolle på tvers av kontoer kan utføre operasjoner på Kinesis-datastrømmen
  • En Lambda-kjøringsrolle i Konto 2 og en forbedret fan-out-forbrukerressurspolicy i Konto 1, som lar Lambda-kjøringsrollen på tvers av kontoer utføre operasjoner på Kinesis-datastrømmen

For oppsettet bruker du tre AWS skyformasjon maler for å lage nøkkelressursene:

  • CloudFormation mal 1 oppretter følgende nøkkelressurser i konto 1:
    • Kinesis datastrøm
    • Kinesis datastrøm forbedret fan-out forbruker
  • CloudFormation mal 2 oppretter følgende nøkkelressurser i konto 2:
    • Forbruker Lambda funksjon
    • Forbruker Lambda funksjon utførelse rolle
  • CloudFormation mal 3 oppretter følgende ressurs i konto 2:
    • Forbruker Lambda funksjon hendelse kilde kartlegging

Løsningen støtter distribusjon i én region, og CloudFormation-malene må distribueres i samme region på tvers av forskjellige AWS-kontoer. I denne løsningen bruker vi Kinesis Data Streams forbedret fan-out, som er en beste praksis for å distribuere arkitekturer som krever stor gjennomstrømning på tvers av flere forbrukere. Fullfør trinnene i de følgende delene for å distribuere denne løsningen.

Forutsetninger

Du bør ha to AWS-kontoer og de nødvendige tillatelsene for å kjøre en CloudFormation-mal for å lage tjenestene nevnt i løsningsarkitekturen. Du trenger også AWS kommandolinjegrensesnitt (AWS CLI) installert, versjon 2.15 og nyere.

Start CloudFormation-mal 1

Fullfør følgende trinn for å starte den første CloudFormation-malen:

  1. Logg deg på AWS-administrasjonskonsoll som konto 1 og velg riktig AWS-region.
  2. Last ned og start CloudFormation mal 1 hvor du vil distribuere Kinesis-datastrømmen.
  3. Til LambdaConsumerAccountId, skriv inn din Lambda-forbrukerkonto-ID og klikk på send. Implementeringen av CloudFormation-malen vil ta noen minutter å fullføre.
  4. Når stabelen er fullført, på AWS CloudFormation-konsollen, naviger til stabelen Utganger fanen og kopier verdiene til følgende parametere:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

Du trenger disse verdiene i senere trinn.

Start CloudFormation-mal 2

Fullfør følgende trinn for å starte den andre CloudFormation-malen:

  1. Logg på konsollen som konto 2 og velg riktig region.
  2. Last ned og start CloudFormation mal 2 hvor du vil være vert for Lambda-forbrukeren.
  3. Oppgi følgende inndataparametere hentet fra forrige trinn:
    • KinesisStreamArn
    • KinesisStreamEFOConsumerArn
    • KMSKeyArn

CloudFormation-malen oppretter følgende nøkkelressurser:

  • Lambdaforbruker
  • Lambda-utførelsesrolle

Lambda-funksjonens utførelsesrolle er en IAM-rolle som gir funksjonen tillatelse til å få tilgang til AWS-tjenester og -ressurser. Her oppretter du en Lambda-utførelsesrolle som har de nødvendige Kinesis Data Streams og Lambda-påkallingstillatelsene.

Implementeringen av CloudFormation-malen vil ta noen minutter å fullføre.

  1. Når stabelen er fullført, på AWS CloudFormation-konsollen, naviger til stabelen Utganger fanen og kopier verdiene til følgende parametere:
    • KinesisStreamCreateResourcePolicyCommand
    • KinesisStreamEFOConsumerCreateResourcePolicyCommand
  2. Kjør følgende AWS CLI-kommandoer i konto 1 ved å bruke AWS CloudShell. Vi anbefaler å bruke CloudShell fordi den vil ha den nyeste versjonen av AWS CLI og unngå enhver form for feil.
    • KinesisStreamCreateResourcePolicyCommand – Dette oppretter ressurspolicyen i konto 1 for Kinesis Data Stream. Følgende er et eksempel på en ressurspolicy:
      {
      "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 – Dette oppretter ressurspolicyen for den forbedrede fan-out-forbrukeren for Kinesis-datastrømmen i konto 1. Følgende er et eksempel på en ressurspolicy:
      {
      "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"
      }
      ]
      }

Du kan også få tilgang til denne policyen på Kinesis Data Streams-konsollen, under Forbedret fan-out, Forbrukernavnog Ressursbasert policy for forbrukerdeling.

Start CloudFormation-mal 3

Nå som du har opprettet ressurspolicyer i Konto 1 for Kinesis-datastrømmen og dens forbedrede fan-out-forbruker, kan du opprette Lambda-hendelseskildetilordning for Lambda-funksjonen for forbruker i Konto 2. Fullfør følgende trinn:

  1. Logg på konsollen som konto 2 og velg riktig region.
  2. Last ned og start CloudFormation mal 3 for å oppdatere stabelen du opprettet ved hjelp av CloudFormation-mal 2.

CloudFormation-malen oppretter Lambda-hendelseskildekartleggingen.

Bekreft løsningen

På dette tidspunktet er distribusjonen fullført. En Kinesis-datastrøm er tilgjengelig for å konsumere meldingene, og en Lambda-funksjon mottar disse meldingene i målkontoen. For å sende eksempelmeldinger til datastrømmen i konto 1, kjør følgende AWS CLI-kommando med CloudShell:

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

Lambda-funksjonen i konto 2 er i stand til å motta meldingene, og du bør kunne bekrefte det samme ved å bruke Amazon CloudWatch tømmerstokker:

  1. På CloudWatch-konsollen velger du Logggrupper i navigasjonsruten.
  2. Finn logggruppen /aws/lambda/kds-cross-account-stream-efo-consumer.
  3. Velg Søk i logggruppe for å se de relevante loggmeldingene. Følgende er en eksempelmelding:
    "Records": [
    {
    "kinesis": {
    "kinesisSchemaVersion": "1.0",
    "partitionKey": "samplepartitionkey3",
    "sequenceNumber": "49648798411111169765201534322676841348246990356337393698",
    "data": "sampledatarecord",
    "approximateArrivalTimestamp": 1706623274.658
    },

Rydd opp

Det er alltid en god praksis å rydde opp i alle ressursene du opprettet som en del av dette innlegget for å unngå ekstra kostnader.

For å rydde opp i ressursene dine, slett de respektive CloudFormation-stakkene fra konto 1 og 2, og stoppe produsenten fra å sende hendelser til Kinesis-datastrømmen. Dette sørger for at du ikke blir belastet unødvendig.

Oppsummering

I dette innlegget demonstrerte vi hvordan du konfigurerer en Lambda-integrasjon på tvers av kontoer med Kinesis Data Streams ved å bruke AWS-ressursbaserte policyer. Dette muliggjør behandling av data som tas inn i en strøm innenfor én AWS-konto gjennom en Lambda-funksjon plassert i en annen konto. For å støtte kunder som bruker en Kinesis datastrøm i sin sentrale konto og har flere forbrukere som leser data fra den, har vi brukt Kinesis Data Streams forbedrede fan-out-funksjon.

For å komme i gang, åpne Kinesis Data Streams-konsollen eller bruk den nye API-en PutResourcePolicy å knytte en ressurspolicy til datastrømmen eller forbrukeren din.


Om forfatterne

Pratik Patel er Sr. Technical Account Manager og spesialist i streaminganalyse. Han jobber med AWS-kunder og gir kontinuerlig støtte og teknisk veiledning for å hjelpe til med å planlegge og bygge løsninger ved å bruke beste praksis og proaktivt holde kundenes AWS-miljøer driftsmessig sunne.

Kjærlighet er Senior Solutions Architect hos Amazon AWS i Storbritannia. Han jobber på tvers av kraft-, verktøy-, produksjons- og bilkunder med strategiske implementeringer, og spesialiserer seg på å bruke AWS Streaming og avanserte dataanalyseløsninger for å oppnå optimale forretningsresultater.

spot_img

Siste etterretning

spot_img