Mam 2 funkcje Lambda - jedną, która tworzy wycenę, i jedną, która przekształca wycenę w zamówienie. Chciałbym, aby funkcja Order lambda wywołała funkcję Quote, aby zregenerować ofertę, a nie tylko otrzymywać ją od niezaufanego klienta.
Szukałem wszędzie, o czym myślę - ale nie widzę, jak poszedłbym do łączenia lub wywoływania funkcji ... na pewno to istnieje!
Odpowiedzi:
Znalazłem sposób, używając
aws-sdk
.Dokument można znaleźć tutaj: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
źródło
InvocationType: 'Event'
parametrowi (dodaj go poFunctionName
iPayload
). Z dokumentacji: „Możesz opcjonalnie zażądać wykonania asynchronicznego, określając Zdarzenie jako InvocationType”. W przypadku wykonywania asynchronicznego funkcja wywołania zwrotnego zostanie niezawodnie wywołana, ale bez konieczności oczekiwania na zakończenie wywołanej lambdy.AWSLambdaRole
. Lub możesz dodać następujący obiekt instrukcji do istniejącej polityki roli: „{„ „Efekt”: „Zezwól”, „Akcja”: [„lambda: InvokeFunction”], „Zasób”: [„*”]} `Powinieneś połączyć swoją sieć
Lambda functions
przezSNS
. Takie podejście zapewnia dobrą wydajność, opóźnienia i skalowalność przy minimalnym wysiłku.Twoja pierwsza
Lambda
publikuje wiadomości do Ciebie,SNS Topic
a drugaLambda
subskrybuje ten temat. Gdy tylko wiadomości dotrą do tematu, sekundaLambda
zostanie wykonana z komunikatem jako parametrem wejściowym.Zobacz Wywoływanie funkcji Lambda za pomocą powiadomień Amazon SNS .
Możesz także użyć tego podejścia do wywoływania funkcji Lambda dla wielu kont za pośrednictwem SNS .
źródło
Oto przykładowy kod dla Pythona,
Przy okazji, musisz również dodać taką politykę do swojej roli lambda
źródło
datetime.now()
ciąg (lub jakoś go obsłużyć). W przeciwnym razie pojawia się błąddatetime.datetime(2017, 9, 11, 14, 40, 53, 23834) is not JSON serializable
InvocationType
Powinno być:RequestResponse
. Aby uzyskać odpowiedź od lambda, którą próbujesz wywołać.Od czasu zadania tego pytania firma Amazon wydała funkcje krokowe ( https://aws.amazon.com/step-functions/ ).
Jedną z podstawowych zasad AWS Lambda jest to, że można skupić się bardziej na logice biznesowej, a mniej na logice aplikacji, która łączy to wszystko razem. Funkcje krokowe pozwalają koordynować złożone interakcje między funkcjami bez konieczności pisania kodu w tym celu.
źródło
To rozwiązanie zostało wykonane przy użyciu boto3 i Python:
źródło
Patrzyłem na wyłączenie SNS, dopóki nie zobaczyłem tego w dokumentacji klienta Lambda (wersja Java) :
Tak więc SNS ma oczywistą zaletę: jest asynchroniczny. Twoja lambda nie będzie czekać na zakończenie kolejnej lambda.
źródło
Amazon wprowadził funkcje kroków w AWS lambda w 2016 roku. Myślę, że teraz wygodniej jest korzystać z funkcji kroków, ponieważ jest bardzo łatwa w użyciu. Możesz zbudować maszynę stanową z dwiema funkcjami lambda jako:
Możesz to łatwo zrobić, jak poniżej:
Tutaj możesz ustawić pierwszy stan na wycenę, a drugi na kolejność
Funkcje Steps naprawdę ułatwiają pisanie wielu funkcji lambda i uruchamianie ich w sekwencji lub równolegle. Możesz uzyskać więcej informacji o funkcjach kroków lambda tutaj: Funkcje kroków
źródło
Pracowałem z odpowiedzią dostarczoną przez blueskin, ale nie mogłem odczytać odpowiedzi ładunku, ponieważ InvocationType = 'Event' jest asynchroniczne , więc zmieniłem się na InvocationType = 'RequestResponse' i teraz wszystko działa dobrze.
źródło
W java możemy wykonać następujące czynności:
Tutaj ładunek jest twoim strunowym obiektem java, który musi zostać przekazany jako obiekt Json do innej lambda na wypadek, gdybyś musiał przekazać pewne informacje z wywołania lambda do wywoływanej lambda.
źródło
Być może będziesz mógł skorzystać z funkcji Wodospad Async.js - zobacz przykład w dolnej części dużego fragmentu kodu w kroku 3 tego dokumentu:
https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/
źródło
Można wywołać funkcję lambda bezpośrednio (przynajmniej za pośrednictwem Java) stosując
AWSLambdaClient
sposób opisany w blogu AWS” postu .źródło
Mam ten sam problem, ale funkcja Lambda, którą implementuję, wstawi wpis w DynamoDB, więc moje rozwiązanie używa wyzwalaczy DynamoDB.
Sprawiam, że DB wywołuje funkcję Lambda dla każdej wstawki / aktualizacji w tabeli, więc oddziela to implementację dwóch funkcji Lambda.
Dokumentacja jest dostępna tutaj: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.html
Oto przewodnik: https://aws.amazon.com/blogs/aws/dynamodb-update-triggers-streams-lambda-cross-region-replication-app/
źródło
Coś w rodzaju ronda, ale po prostu nazywam punkt końcowy API dla moich funkcji lambda, kiedy muszę je połączyć . Pozwala to zdecydować podczas kodowania, czy mają być asynchroniczne, czy nie.
W przypadku, gdy nie chcesz konfigurować żądania POST, możesz po prostu ustawić proste żądanie GET z kilkoma parametrami zapytania lub wcale, aby ułatwić przekazywanie zdarzeń.
-- Edytować --
Zobacz: https://docs.aws.amazon.com/apigateway/api-reference/making-http-requests/
i: http://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example.html
źródło
Inni wskazali na użycie SQS i funkcji krokowych. Ale oba te rozwiązania powodują dodatkowe koszty. Przejścia stanu funkcji kroku są podobno bardzo drogie.
AWS lambda oferuje pewną logikę ponownych prób. Gdzie próbuje coś 3 razy. Nie jestem pewien, czy to nadal jest ważne po uruchomieniu go użyj interfejsu API.
źródło
Oto przykład pythonowy wywołania innej funkcji lambda i otrzymuje odpowiedź. Istnieją dwa typy wywołań „RequestResponse” i „Event” . Użyj „RequestResponse”, jeśli chcesz uzyskać odpowiedź funkcji lambda, i „Event”, aby wywołać funkcję lambda asynchronicznie. Dostępne są więc oba sposoby asynchroniczny i synchroniczny.
źródło
Możesz ustawić środowisko AWS_REGION.
źródło