Czy funkcja lambda AWS może wywołać inną

Mam 2 Funkcje Lambda - jedną, która tworzy cytat i jedną, która zamienia cytat w rozkaz. Chciałbym, aby funkcja Lambda Order wywoływała funkcję cytowania, aby zregenerować cytat, a nie tylko odbierać go od niezaufanego klienta.

Szukałem wszędzie, o czym myślę - ale nie widzę, jak mógłbym połączyć lub wywołać funkcje...na pewno to istnieje!

Author: Hank D, 2015-07-30

13 answers

Znalazłem sposób na aws-sdk.

var aws = require('aws-sdk');
var lambda = new aws.Lambda({
  region: 'us-west-2' //change to your region
});

lambda.invoke({
  FunctionName: 'name_of_your_lambda_function',
  Payload: JSON.stringify(event, null, 2) // pass params
}, function(error, data) {
  if (error) {
    context.done('error', error);
  }
  if(data.Payload){
   context.succeed(data.Payload)
  }
});

Możesz znaleźć tutaj: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

 242
Author: Nicolas Grenié,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-31 12:05:17

Należy połączyć swoje Lambda functions przez SNS. Takie podejście zapewnia dobrą wydajność, opóźnienia i skalowalność przy minimalnym wysiłku.

Twój pierwszy Lambda publikuje wiadomości do twojego SNS Topic, a drugi {[2] } subskrybuje ten temat. Gdy tylko wiadomości pojawią się w temacie, second Lambda zostanie uruchomiony z Komunikatem jako parametrem wejściowym.

Zobacz wywoływanie funkcji Lambda za pomocą powiadomień Amazon SNS .

Możesz również użyć tego podejścia do wywoływania cross-account lambda functions via SNS .

 73
Author: kixorz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-04 03:00:24

Oto przykładowy kod dla Pythona,

from boto3 import client as boto3_client
from datetime import datetime
import json

lambda_client = boto3_client('lambda')

def lambda_handler(event, context):
    msg = {"key":"new_invocation", "at": datetime.now()}
    invoke_response = lambda_client.invoke(FunctionName="another_lambda_",
                                           InvocationType='Event',
                                           Payload=json.dumps(msg))
    print(invoke_response)

Btw, trzeba by dodać taką politykę do swojej roli lambda jak również

   {
        "Sid": "Stmt1234567890",
        "Effect": "Allow",
        "Action": [
            "lambda:InvokeFunction"
        ],
        "Resource": "*"
    }
 45
Author: blueskin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-28 18:13:21

Patrzyłem na wycinanie SNS, dopóki nie zobaczyłem tego w lambda client docs (wersja Java):

Klient dostępu do AWS Lambda. Wszystkie połączenia serwisowe wykonane za pomocą tego klienta są blokowane i nie powrócą, dopóki połączenie serwisowe się nie zakończy.

Więc SNS ma oczywistą zaletę: jest asynchroniczny. Twoja lambda nie będzie czekać na zakończenie kolejnej lambdy.

 9
Author: Ben Iggulden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-09 03:12:02

Od kiedy to pytanie zostało zadane, Amazon wydał funkcje krokowe ( https://aws.amazon.com/step-functions/).

Jedną z podstawowych zasad stojących za AWS Lambda jest to, że możesz skupić się bardziej na logice biznesowej, a mniej na logice aplikacji, która je łączy. Funkcje Step umożliwiają koordynację złożonych interakcji między funkcjami bez konieczności pisania kodu.

 8
Author: dustinnoe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-15 13:28:20

Pracowałem z odpowiedzią dostarczoną przez blueskin ale nie mogłem odczytać odpowiedzi ładunku, ponieważ InvocationType='Event' jest async, więc zmieniłem jako InvocationType='RequestResponse' i teraz wszystko działa dobrze.

 4
Author: antonio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-31 23:42:58

Być może będziesz w stanie skorzystać z Asynchronizacji.funkcja js Waterfall-zobacz dolną część dużego fragmentu kodu w Kroku 3 tego dokumentu dla przykładu:

Https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/

 2
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-02 14:54:25

W Javie możemy wykonać następujące czynności:

AWSLambdaAsync awsLambdaAsync = AWSLambdaAsyncClientBuilder.standard().withRegion("us-east-1").build();

InvokeRequest invokeRequest = new InvokeRequest();
invokeRequest.withFunctionName("youLambdaFunctionNameToCall").withPayload(payload);

InvokeResult invokeResult = awsLambdaAsync.invoke(invokeRequest); 

Tutaj payload to Twójstringified obiekt java, który musi być przekazany jako obiekt Json do innego lambda w przypadku, gdy trzeba przekazać pewne informacje z wywołania lambda do wywołania lambda.

 2
Author: Suyash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-06 12:27:23

Mam ten sam problem, ale zaimplementowana przeze mnie funkcja Lambda wstawi wpis w DynamoDB, więc moje rozwiązanie używa wyzwalaczy DynamoDB.

Sprawiam, że DB wywołuje funkcję Lambda dla każdego insert/update w tabeli, więc to oddziela implementację dwóch funkcji Lambda.

Dokumentacja jest tutaj: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.html

Oto przewodnik walkthrough: https://aws.amazon.com/blogs/aws/dynamodb-update-triggers-streams-lambda-cross-region-replication-app/

 1
Author: Lewen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-22 08:59:05

Coś w rodzaju okrężnego rozwiązania, ale po prostu wywołuję punkt końcowy API dla moich funkcji lambda, gdy muszę je połączyć. Dzięki temu możesz zdecydować podczas kodowania, czy chcesz, aby były asynchroniczne, czy nie.

W przypadku, gdy nie chcesz skonfigurować żądania POST, możesz po prostu skonfigurować proste żądanie GET z kilkoma lub żadnymi parametrami ciągów zapytań w celu łatwego przekazania zdarzenia.

-- Edit --

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

 1
Author: Anselm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-03 15:54:38

Możesz wywołać funkcję lambda bezpośrednio (przynajmniej przez Javę) używając AWSLambdaClient, jak opisano w blogu AWS post .

 0
Author: Neil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-21 04:30:27

Możesz ustawić środowisko AWS_REGION.

assert(process.env.AWS_REGION, 'Missing AWS_REGION env (eg. ap-northeast-1)');
const aws = require('aws-sdk');
const lambda = new aws.Lambda();
 0
Author: hojin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-26 06:54:59

[[1]}Amazon wprowadził funkcje steps w AWS lambda w 2016 roku. Myślę, że teraz wygodniej jest używać funkcji kroków, ponieważ jest to naprawdę łatwe w użyciu. Można zbudować maszynę stanową z dwiema funkcjami lambda jako:

  • Aby wygenerować cytat
  • zamienia cytat w zlecenie

Możesz to łatwo zrobić jak poniżej:

tutaj możesz mieć pierwszy stan dla generowania cudzysłowu, a drugi do przekształcenia w kolejność

{
  Comment: "Produce a quote and turns into an order",
  StartAt: "ProduceQuote",
  States: {
    ProduceQuote: {
      "Type": Task,
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ProduceQuote",
      "next": TurnsToOrder
    }
    TurnsToOrder: {
      Type: Task,
      Resource: "arn:aws:lambda:us-east-1:123456789012:function:ProduceQuote",
      end: true
    }
  }
}

Funkcje kroków sprawiają, że bardzo łatwo napisać wiele funkcji lambda i uruchomić je kolejno lub równolegle. Więcej informacji na temat funkcji lambda steps znajdziesz tutaj: Funkcje Krokowe

 0
Author: Sunil Kapil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-31 21:42:31