как я могу передать значение одной лямбда-функции другой лямбда-функции? [Дубликат]

Sine Python 3.5 вы можете использовать функцию math.isclose(), если условия

import math

if math.isclose(0.1 + 0.2, 0.3, abs_tol=0.01):
    pass
171
задан Hank D 6 May 2016 в 15:56
поделиться

12 ответов

Я нашел способ, используя 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)
  }
});

Вы можете найти документ здесь: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS /Lambda.html

229
ответ дан Nicolas Grenié 25 August 2018 в 01:08
поделиться

Вид кругового решения, но я просто называю конечную точку API для своих лямбда-функций, когда мне нужно их связать. Это позволяет вам определять кодировку, если вы хотите, чтобы они были асинхронными или нет.

Если вы не хотите настраивать запрос POST, вы можете просто настроить простой запрос GET с паролем или не на всех, параметры строки запроса для облегчения передачи события.

- Редактировать -

См.: https://docs.aws.amazon.com/apigateway/api-reference/making -http-request /

и: http://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example.html

1
ответ дан Anselm 25 August 2018 в 01:08
поделиться

Я работал с ответом, предоставленным blueskin, но я не мог прочитать ответ Payload, потому что InvocationType = 'Event' является асинхронным, поэтому я изменился как InvocationType = 'RequestResponse', и теперь все работает хорошо.

4
ответ дан antonio 25 August 2018 в 01:08
поделиться

Я смотрел на вырезание SNS, пока не увидел это в Lambda docs (версия Java) :

Клиент для доступа к AWS Lambda. Все служебные вызовы, выполненные с использованием этого клиента, блокируются и не возвращаются до завершения вызова службы.

Таким образом, SNS имеет очевидное преимущество: он асинхронный. Ваш лямбда не будет ждать завершения следующего лямбда.

9
ответ дан Ben Iggulden 25 August 2018 в 01:08
поделиться

вот пример кода для python,

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, вам также нужно добавить такую ​​же политику к вашей роли лямбда

   {
        "Sid": "Stmt1234567890",
        "Effect": "Allow",
        "Action": [
            "lambda:InvokeFunction"
        ],
        "Resource": "*"
    }
45
ответ дан blueskin 25 August 2018 в 01:08
поделиться

Поскольку этот вопрос задан, Amazon выпустил Step Functions ( https://aws.amazon.com/step-functions/ ).

Одним из основных принципов, лежащих в основе AWS Lambda, является то, что вы можете больше сосредоточиться на бизнес-логике и меньше на логике приложения, которая связывает все это вместе. Шаговые функции позволяют организовывать сложные взаимодействия между функциями без необходимости писать код для этого.

7
ответ дан dustinnoe 25 August 2018 в 01:08
поделиться

Вы можете установить среду 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
ответ дан hojin 25 August 2018 в 01:08
поделиться

Вы должны связать свой Lambda functions с помощью SNS. Этот подход обеспечивает хорошую производительность, латентность и масштабируемость для минимальных усилий.

Ваш первый Lambda публикует сообщения для ваших SNS Topic, а второй Lambda подписывается на эту тему. Как только сообщения поступают в эту тему, второй Lambda запускается с сообщением в качестве входного параметра.

См. Вызов функций лямбда с использованием уведомлений SNS Amazon .

Вы также можете использовать этот подход для Вызывать функции Lambda кросс-счета через SNS .

72
ответ дан kixorz 25 August 2018 в 01:08
поделиться

У меня такая же проблема, но функция Lambda, которую я реализую, вставляет запись в DynamoDB, поэтому мое решение использует триггеры DynamoDB.

Я делаю DB, вызывающий функцию Lambda для каждой вставки / обновление в таблице, поэтому это разделяет реализацию двух функций лямбда.

Документация находится здесь: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda .html

Ниже приведено руководство по управлению: https://aws.amazon.com/blogs/aws/dynamodb-update-triggers-streams-lambda-cross-region- репликация-приложение /

1
ответ дан Lewen 25 August 2018 в 01:08
поделиться

Возможно, вы сможете использовать функцию Async.js Waterfall - см. нижнюю часть большого фрагмента кода на шаге 3 этого документа для примера:

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

2
ответ дан Mike 25 August 2018 в 01:08
поделиться

Вы можете вызвать функцию лямбда напрямую (по крайней мере через Java) с помощью AWSLambdaClient, как описано в блоге AWS .

0
ответ дан Neil 25 August 2018 в 01:08
поделиться

В java мы можем сделать следующее:

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

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

InvokeResult invokeResult = awsLambdaAsync.invoke(invokeRequest); 

Здесь полезная нагрузка - это ваш стробированный Java-объект, который необходимо передать как объект Json другому lambda, если вам нужно передать некоторую информацию из вызывая лямбда для вызова лямбда.

2
ответ дан Suyash 25 August 2018 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: