Skip to content
malak.cloud
  • Contact
  • Przemek Malak
  • Search Icon

malak.cloud

Cloud-native in everyday life

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.
Hi. My name is Przemek Malak. Thanks for visiting. I hope you found what I write about interesting.
If you'd like to chat with me, the easiest way is through LinkedIn.

Losowe wpisy

  • AWS Copilot CLI i AWS App Runner

    22 listopada 2021
  • Czyścimy Dockera

    12 sierpnia 2017
  • Izolacja namespaces za pomocą Istio

    3 listopada 2021
  • Serverless – drugi poziom wtajemniczenia

    18 czerwca 2019
  • Serverless API – Jak postawić API bez serwera

    13 sierpnia 2017
  • Apps
  • AWS
  • CloudNative
  • Cookbook
  • Data
  • DEV
  • EN
  • GCP
  • IoT
  • Istio
  • k8s
  • Security
  • Social
  • GitHub
  • LinkedIn
© 2025   All Rights Reserved.
Ta strona korzysta z ciasteczek aby świadczyć usługi na najwyższym poziomie. Dalsze korzystanie ze strony oznacza, że zgadzasz się na ich użycie.Zgoda