我有2个Lambda函数——一个生成报价,一个将报价转换为订单。 我希望Order lambda函数调用Quote函数来重新生成报价,而不是仅仅从不受信任的客户端接收报价。
我已经看遍了我能想到的所有地方——但不知道我该如何链接或调用函数……这当然存在!
我有2个Lambda函数——一个生成报价,一个将报价转换为订单。 我希望Order lambda函数调用Quote函数来重新生成报价,而不是仅仅从不受信任的客户端接收报价。
我已经看遍了我能想到的所有地方——但不知道我该如何链接或调用函数……这当然存在!
当前回答
以下是如何在javascript/typescript中做到这一点,而无需安装完整的aws-sdk包。
import { InvokeCommand, LambdaClient, LogType } from "@aws-sdk/client-lambda";
const client = new LambdaClient({
region: "US-EAST-1"
});
const payload = JSON.stringify({
data: "your input"
})
const command = new InvokeCommand({
FunctionName: "your function name",
Payload: payload,
LogType: LogType.Tail,
});
const { Payload } = await client.send(command);
const response: any = Payload;
const result = Buffer.from(response).toString();
return result;
其他回答
我用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
在java中,我们可以这样做:
AWSLambdaAsync awsLambdaAsync = AWSLambdaAsyncClientBuilder.standard().withRegion("us-east-1").build();
InvokeRequest invokeRequest = new InvokeRequest();
invokeRequest.withFunctionName("youLambdaFunctionNameToCall").withPayload(payload);
InvokeResult invokeResult = awsLambdaAsync.invoke(invokeRequest);
在这里,payload是你的stringized java对象,它需要作为Json对象传递给另一个lambda,以防你需要从调用lambda传递一些信息到被调用lambda。
我也有同样的问题,但我实现的Lambda函数将在DynamoDB中插入一个条目,所以我的解决方案使用DynamoDB触发器。
我让DB对表中的每一次插入/更新都调用一个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/
我正在使用blueskin提供的答案,但我无法读取有效负载响应,因为InvocationType='Event'是异步的,所以我更改为InvocationType='RequestResponse',现在一切正常。
下面是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)
顺便说一句,您还需要向您的lambda角色添加这样的策略
{
"Sid": "Stmt1234567890",
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": "*"
}