首页 > 解决方案 > 从 AWS java SDK 调用 AWS Lambda 函数

问题描述

在此处输入图像描述是否可以从 aws 发布订阅示例 java 代码中调用 aws lambda 函数?我们可以从我们的 java 代码中调用 lambda 函数吗?如果是,那怎么办?

标签: aws-lambdaaws-sdk

解决方案


从 Java 调用 AWS Lambda 函数

import com.amazonaws.regions.Regions;
import com.amazonaws.services.lambda.AWSLambda;
import com.amazonaws.services.lambda.AWSLambdaClientBuilder;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
// ...
// (1) Define the AWS Region in which the function is to be invoked
Regions region = Regions.fromName("us-east-1");
// (2) Instantiate AWSLambdaClientBuilder to build the Lambda client
AWSLambdaClientBuilder builder = AWSLambdaClientBuilder.standard()
                                    .withRegion(region);
// (3) Build the client, which will ultimately invoke the function
AWSLambda client = builder.build();
// (4) Create an InvokeRequest with required parameters
InvokeRequest req = new InvokeRequest()
                           .withFunctionName("myFunctionName")
                           .withPayload("{ ... }"); // optional
// (5) Invoke the function and capture response
InvokeResult result = client.invoke(req);
// (6) Handle result
...

上面会同步调用 Lambda;但是,您也可以使用 Java 期货或回调异步调用。

使用访问密钥和秘密密钥调用 上述示例在调用函数时将利用 DefaultAWSCredentialsProviderChain 来利用环境变量、EC2 实例配置文件等。虽然这通常是最佳实践,但在某些情况下您可能需要提供访问和密钥。为此,我们只需要对上面的代码做一点小改动:

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
// (1a) Instantiate credentials
BasicAWSCredentials credentials = new 
  BasicAWSCredentials("myAccessKey", "mySecretKey");
// (2) Modify to leverage credentials
AWSLambdaClientBuilder builder = AWSLambdaClientBuilder.standard()
  .withCredentials(new AWSStaticCredentialsProvider(credentials));                                     
  .withRegion(region);

推荐阅读