![](/img/trans.png)
[英]How to invoke an aws lambda function from another aws lambda in Java?
[英]How to invoke the AWS lambda function / handler from Java code
我是AWS lambda的新手我已经使用handler创建了一个lambda函数
example.Orders::orderHandler
这是自定义处理程序,现在我想从我的Java程序中调用它,我该怎么做呢。
这个课程中的2个方法应该能够帮到你。 一个用于是否需要传入有效负载,另一个用于有效负载为空。
但是,您需要记住一件事:函数名称可能与处理程序不同(后者是example.Orders::orderHandler
)。 调用其函数时不使用处理程序名称。
所以,如果你有一个函数名为 'myFunction'的函数 ,在后面调用你的example.Orders::orderHandler
处理程序 ,那么这就是你将传递给下面的run方法的内容。
import com.amazonaws.regions.Regions;
import com.amazonaws.services.lambda.AWSLambdaAsyncClient;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
class LambdaInvoker {
public void runWithoutPayload(String region, String functionName) {
runWithPayload(region, functionName, null);
}
public void runWithPayload(String region, String functionName, String payload) {
AWSLambdaAsyncClient client = new AWSLambdaAsyncClient();
client.withRegion(Regions.fromName(region));
InvokeRequest request = new InvokeRequest();
request.withFunctionName(functionName).withPayload(payload);
InvokeResult invoke = client.invoke(request);
System.out.println("Result invoking " + functionName + ": " + invoke);
}
}
我按照以下代码打印了Lambda的响应
AWSLambdaAsyncClient lambdaClient = new AWSLambdaAsyncClient();
lambdaClient.withRegion(Region.getRegion(Regions.US_WEST_2));
InvokeRequest invokeRequest = new InvokeRequest();
invokeRequest.setInvocationType("RequestResponse"); // ENUM RequestResponse or Event
invokeRequest.withFunctionName("FUNCTION NAME").withPayload(payload);
InvokeResult invoke = lambdaClient.invoke(invokeRequest);
try {
// PRINT THE RESPONSE
String val = new String(invoke.getPayload().array(), "UTF-8");
System.out.println("Response==> " + val);
} catch (Exception e) {
System.out.println("error");
}
您在部署Lambda函数时定义处理程序。 只有AWS Lambda服务需要知道您的自定义处理程序是什么。 因此,处理程序与调用该函数的Java代码无关。 调用Lambda函数的任何事情只需要知道Lambda函数名称,而不是处理程序名称。
在Java中,您将通过此处记录的AWSLambdaClient.invoke()
方法调用Lambda函数。
作为旁注,在Eclipse中创建AWS Lambda Java项目时,还必须添加
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-lambda</artifactId>
<version>1.11.411</version>
</dependency>
到pom.xml,否则这些导入将失败:
import com.amazonaws.services.lambda.AWSLambdaAsyncClient;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
使用此最新代码同步调用Lambda函数:
final String AWS_ACCESS_KEY_ID = "xx";
final String AWS_SECRET_ACCESS_KEY = "xx";
AWSCredentials credentials = new BasicAWSCredentials(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY);
// ARN
String functionName = "XXXX";
//This will convert object to JSON String
String inputJSON = new Gson().toJson(userActivity);
InvokeRequest lmbRequest = new InvokeRequest()
.withFunctionName(functionName)
.withPayload(inputJSON);
lmbRequest.setInvocationType(InvocationType.RequestResponse);
AWSLambda lambda = AWSLambdaClientBuilder.standard()
.withRegion(Regions.US_EAST_1)
.withCredentials(new AWSStaticCredentialsProvider(credentials)).build();
InvokeResult lmbResult = lambda.invoke(lmbRequest);
String resultJSON = new String(lmbResult.getPayload().array(), Charset.forName("UTF-8"));
System.out.println(resultJSON);
使用这些依赖项可以避免任何错误:
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>2.6.1</version>
</dependency>
//Required by BeanstalkDeploy.groovy at runtime
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-lambda</artifactId>
<version>1.11.207</version>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.