Sine Python 3.5 вы можете использовать функцию math.isclose()
, если условия
import math
if math.isclose(0.1 + 0.2, 0.3, abs_tol=0.01):
pass
Я нашел способ, используя 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
Вид кругового решения, но я просто называю конечную точку 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
Я работал с ответом, предоставленным blueskin, но я не мог прочитать ответ Payload, потому что InvocationType = 'Event' является асинхронным, поэтому я изменился как InvocationType = 'RequestResponse', и теперь все работает хорошо.
Я смотрел на вырезание SNS, пока не увидел это в Lambda docs (версия Java) :
Клиент для доступа к AWS Lambda. Все служебные вызовы, выполненные с использованием этого клиента, блокируются и не возвращаются до завершения вызова службы.
blockquote>Таким образом, SNS имеет очевидное преимущество: он асинхронный. Ваш лямбда не будет ждать завершения следующего лямбда.
вот пример кода для 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": "*"
}
Поскольку этот вопрос задан, Amazon выпустил Step Functions ( https://aws.amazon.com/step-functions/ ).
Одним из основных принципов, лежащих в основе AWS Lambda, является то, что вы можете больше сосредоточиться на бизнес-логике и меньше на логике приложения, которая связывает все это вместе. Шаговые функции позволяют организовывать сложные взаимодействия между функциями без необходимости писать код для этого.
Вы можете установить среду 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();
Вы должны связать свой Lambda functions
с помощью SNS
. Этот подход обеспечивает хорошую производительность, латентность и масштабируемость для минимальных усилий.
Ваш первый Lambda
публикует сообщения для ваших SNS Topic
, а второй Lambda
подписывается на эту тему. Как только сообщения поступают в эту тему, второй Lambda
запускается с сообщением в качестве входного параметра.
См. Вызов функций лямбда с использованием уведомлений SNS Amazon .
Вы также можете использовать этот подход для Вызывать функции Lambda кросс-счета через SNS .
У меня такая же проблема, но функция 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- репликация-приложение /
Возможно, вы сможете использовать функцию Async.js Waterfall - см. нижнюю часть большого фрагмента кода на шаге 3 этого документа для примера:
https: / /aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/
Вы можете вызвать функцию лямбда напрямую (по крайней мере через Java) с помощью AWSLambdaClient
, как описано в блоге AWS .
В 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, если вам нужно передать некоторую информацию из вызывая лямбда для вызова лямбда.