![](/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.