У меня есть 2 лямбда-функции - одна, которая производит кавычку, и одна, которая превращает кавычку в заказ. Я бы хотел, чтобы лямбда-функция Order вызывала функцию Quote для генерации цитаты, а не просто получала ее от ненадежного клиента.
Я искал повсюду, что только мог придумать, но не понимаю, как бы я поработал с цепочкой или вызовом функций ... конечно, это существует!
node.js
amazon-web-services
aws-lambda
aws-api-gateway
Серебряный
источник
источник
Ответы:
Я нашел способ, используя
aws-sdk
.Вы можете найти документ здесь: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html
источник
InvocationType: 'Event'
параметру (добавить его послеFunctionName
иPayload
). Из документов: «При желании вы можете запросить асинхронное выполнение, указав Event в качестве InvocationType». При асинхронном выполнении функция обратного вызова будет вызываться надежно, но без необходимости ждать завершения вызванной лямбды.AWSLambdaRole
. Или вы можете добавить следующий объект оператора в существующую политику вашей роли: '{"Effect": "Allow", "Action": ["lambda: InvokeFunction"], "Resource": ["*"]} `Вы должны связать свой
Lambda functions
путь черезSNS
. Такой подход обеспечивает хорошую производительность, задержку и масштабируемость при минимальных усилиях.Ваш первый
Lambda
публикует ваши сообщения,SNS Topic
а второйLambda
подписывается на эту тему. Как только сообщения поступают в тему,Lambda
выполняется секунда с сообщением в качестве входного параметра.См. Вызов лямбда-функций с помощью уведомлений Amazon SNS .
Вы также можете использовать этот подход для вызова лямбда-функций кросс-счета через SNS .
источник
вот пример кода для Python,
Кстати, вам нужно будет добавить такую политику в вашу лямбда-роль
источник
datetime.now()
строку (или обработать как-нибудь). В противном случае вы получите ошибкуdatetime.datetime(2017, 9, 11, 14, 40, 53, 23834) is not JSON serializable
InvocationType
Должно быть:RequestResponse
. Чтобы получить ответ от лямбды, которую вы пытаетесь вызвать.Поскольку этот вопрос был задан, Amazon выпустила пошаговые функции ( https://aws.amazon.com/step-functions/ ).
Одним из основных принципов AWS Lambda является то, что вы можете больше сосредоточиться на бизнес-логике и меньше на логике приложения, которая связывает все это вместе. Шаговые функции позволяют организовать сложные взаимодействия между функциями без необходимости написания кода для этого.
источник
Это решение сделано с использованием boto3 и Python:
источник
Я смотрел на вырезание SNS, пока не увидел это в документации клиента Lambda (версия Java) :
Так что у SNS есть очевидное преимущество: он асинхронный. Ваша лямбда не будет ждать окончания следующей лямбды.
источник
В 2016 году Amazon представила функции шага в AWS lambda. Думаю, теперь удобнее использовать функцию шага, поскольку их действительно легко использовать. Вы можете создать конечный автомат с двумя лямбда-функциями:
Вы можете легко сделать это, как показано ниже:
Здесь вы можете иметь первое состояние для создания цитаты, а другое для превращения в порядок
Функция Steps позволяет действительно легко написать несколько лямбда-функций и выполнять их последовательно или параллельно. Вы можете получить больше информации о функциях лямбда-шагов здесь: Функции шагов
источник
Я работал с ответом, предоставленным blueskin, но не смог прочитать ответ Payload, потому что InvocationType = 'Event' является асинхронным , поэтому я изменил на InvocationType = 'RequestResponse', и теперь все работает хорошо.
источник
В Java мы можем сделать следующее:
Здесь полезная нагрузка - это ваш строковый java-объект, который нужно передать как Json-объект другой лямбде, если вам нужно передать некоторую информацию от вызова лямбды к вызываемой лямбде.
источник
Возможно, вы сможете использовать функцию водопада Async.js - см. Нижнюю часть большого фрагмента кода в шаге 3 этого документа, например:
https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/
источник
Вы можете вызвать функцию лямбда непосредственно (по крайней мере , с помощью Java), используя ,
AWSLambdaClient
как описано в блоге АМС» пост .источник
У меня та же проблема, но реализованная мной функция Lambda вставит запись в DynamoDB, поэтому мое решение использует триггеры DynamoDB.
Я заставляю БД вызывать функцию Lambda для каждой вставки / обновления в таблице, так что это разделяет реализацию двух функций 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-replication-app/
источник
Что-то вроде обходного решения, но я просто вызываю конечную точку API для своих лямбда-функций, когда мне нужно их связать. Это позволяет вам при кодировании решить, хотите ли вы, чтобы они были асинхронными или нет.
Если вы не хотите устанавливать запрос POST, вы можете просто настроить простой запрос GET с парой или без параметров строки запроса для простой передачи события.
-- Редактировать --
Смотрите: https://docs.aws.amazon.com/apigateway/api-reference/making-http-requests/
и: http://docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example.html
источник
Другие указали на использование SQS и пошаговых функций. Но оба эти решения добавляют дополнительную стоимость. Переходы состояний ступенчатой функции предположительно очень дороги.
AWS лямбда предлагает некоторую логику повторов. Где то пробует 3 раза. Я не уверен, что это все еще действует, когда вы запускаете его с помощью API.
источник
Вот пример на Python вызова другой лямбда-функции и получения ее ответа. Существует два типа вызовов: «RequestResponse» и «Event» . Используйте «RequestResponse», если вы хотите получить ответ лямбда-функции, и используйте «Событие», чтобы вызвать лямбда-функцию асинхронно. Таким образом, доступны оба способа: асинхронный и синхронный.
источник
Вы можете установить среду AWS_REGION.
источник