Skip to content
malak.cloud
  • Kontakt
  • O mnie
  • Search Icon

malak.cloud

Cloud Native na co dzień

Jak przekazać dane z funkcji Lambda do… funkcji Lambda

Jak przekazać dane z funkcji Lambda do… funkcji Lambda

14 lutego 2019

W czasach gdy zewsząd dociera do nas słowo serverless, w końcu zdamy sobie sprawę co tak naprawdę ono znaczy i ile może nam oszczędzić pieniędzy (nie tylko w tzw. compute, ale także w tworzeniu naszych rozwiązań). Sercem serverless w AWS jest Lambda. W żywych organizmach nie występują dwa serca, ale w naszej programistycznej praktyce szybko spotkamy się z tym problemem. Będziemy mieli dwa lub więcej serc i będziemy chcieli je połączyć. Staniemy wtedy przed kilkoma problememi, między innymi tym, jak przekazać dane z jednej funkcji Lambda do innej funkcji Lambda.

Pisałem już kilka razy o AWS Step Functions. Zarówno o podstawach jak i trochę głębiej. W skrócie, pozwala ona na łączenie różnych usług AWS w jedną całość. I przesyłanie danych pomiędzy nimi. Także w zasobach samego AWS możecie znaleźć fajny tutorial, jak taką maszynę stanów stworzyć. StepFunctions przydadzą nam się w naszym „problemie”.

Scenariusz

Nie będziemy tworzyli żadnego rozwiązania rocket science. Wrzucimy po prostu jakiś ciąg znaków do funckji Lambda. Następnie go zmienimy i przekażemy do innej Lambdy. Tam ponownie go zmienimy.

Można to zrobić na przykład poprzez wywołanie jednej funkcji Lambda z drugiej. Można także posłużyć się usługą SNS lub SQS. My zrobimy to jednak za pomocą AWS StepFunctions.

Lambdy

Obie funkcje będą do siebie bardzo podobne. Do każdej z nich przekażemy ciąg znaków, do którego dodamy Lambda 1 lub Lambda 2. Jak tworzyć funkcje Lambda pokazywałem już kilka razy. Nie będę więc przechodził po kolei przez wszystkie opcje.

Obie funkcje utworzone w Pythonie.

Kod pierwszej Lambdy to

def lambda_handler(event, context):
    print(event['text'])
    data = {"text" : event['text'] + ' Lambda 1'}
    return data

a drugiej

def lambda_handler(event, context):
    print(event['text'])
    data = {"text" : event['text'] + ' Lambda 2'}
    return data

Założenie jest takie, że wywołujemy Lambdę 1 i przekazujemy do niej

{
  "text": "jakis tekst"
}

zwracamy z niej

{
  "text": "jakis tekst Lambda 1"
}

a wynik idzie do Lambdy nr 2, z której powinniśmy otrzymać

{  
  "text": "jakis tekst Lambda 1 Lambda 2"
}

Macie utworzone obie funkcje? Jeżeli tak to przechodzimy do

StepFunction

StepFunctions pozwalają na bardzo proste połączenie naszych funckji Lambda w całość i przekazanie danych pomiędzy nimi.

Twrzymy więc nową StepFunction. Jako *State machine definition* wklejamy poniższy kod. Pamiętać tylko trzeba o poprawieniu ARN na prawidłowe.

{
  "Comment": "Passing data",
  "StartAt": "Step1",
  "States": {
    "Step1": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:eu-west-2:xxxxxxxxxxxx:function:Lambda1",
      "Next": "Step2"
    },
      "Step2": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:eu-west-2: xxxxxxxxxxxx:function:Lambda2",
      "End": true
    }
  }
}

Powinniśmy otrzymać workflow jak na obrazku poniżej.

Klikamy w button Start execution. W polu input – Optional wpisujemy nasze dane, które chcemy przekazać do funkcji Lambda. W naszym przypadku może to być np.:

{
    "text": "Jakieś znaki"
}

Klikamy jeszcze raz Start execution i po chwili, jeżeli nie mieliśmy nigdzie błędu, nasza StepFunction zakończy działanie.

Jeżeli klikniemy w Step1 to po prawej stronie wyświetlą się szczegóły tego kroku.

Widać do zostało przekazane jako Input i co do nas wróciło. To samo dla kroku drugiego.

 

Koniec?

Tak. Przekazanie danych pomiędzy dwiema funkcjami Lambda jest naprawdę bardzo proste. Zobaczyliśmy jak można wykorzystać do tego StepFunctions.


AWS, CloudNative, DEV
AWS, Dev, serverless

Post navigation

PREVIOUS
Lambda@Edge
NEXT
AWS User Group PL ROADSHOW
Comments are closed.
Cześć. Nazywam się Przemek Malak. Dzięki za wizytę. Mam nadzieję, że to o czym piszę Cię zainteresowało. Jeżeli chcesz ze mną pogadać, najłatwiej będzie przez LinkedIn.

Losowe wpisy

  • AWS UG Roadshow Katowice

    12 marca 2019
  • AWS Lambda – nowy edytor

    1 grudnia 2017
  • FaaS w chmurze IBM

    29 stycznia 2019
  • Jak przesłać plik do S3 za pomocą API Gateway

    16 listopada 2022
  • Jak usunąć aktywną sesję SSO

    2 listopada 2022
  • Apps
  • AWS
  • CloudNative
  • Cookbook
  • Data
  • DEV
  • GCP
  • IoT
  • Istio
  • k8s
  • Security
  • Social
  • GitHub
  • LinkedIn
© 2023   All Rights Reserved.