首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Java代码调用AWS lambda函数/处理程序

如何从Java代码调用AWS lambda函数/处理程序
EN

Stack Overflow用户
提问于 2017-01-12 15:21:09
回答 6查看 24.9K关注 0票数 6

我是AWS lambda的新手,我用处理程序创建了lambda函数。

代码语言:javascript
运行
复制
example.Orders::orderHandler

这是自定义处理程序,现在我想从我的Java程序中调用它

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-01-13 12:03:34

这个类中的两个方法应该能够帮助您。一种是如果您需要传递一个有效负载,另一种是如果有效负载为null。

但是,您需要记住一件事:函数名可能与处理程序不同(后面的处理程序是example.Orders::orderHandler)。处理程序名是,而不是调用其函数时使用的

因此,如果您有一个具有函数名为 'myFunction‘的函数,在幕后调用example.Orders::orderHandler 处理程序,那么您将传递给下面的run方法。

代码语言:javascript
运行
复制
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);
    }
}
票数 10
EN

Stack Overflow用户

发布于 2019-08-20 12:59:58

使用最新的代码来同步调用Lambda函数:

代码语言:javascript
运行
复制
    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);

使用这些依赖项来避免任何错误:

代码语言:javascript
运行
复制
    <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>
票数 7
EN

Stack Overflow用户

发布于 2018-09-20 12:39:48

作为一个sidenote,在Eclipse中创建AWS Lambda Java项目时,还必须添加

代码语言:javascript
运行
复制
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-lambda</artifactId>
    <version>1.11.411</version>
</dependency>

否则,这些导入将失败:

代码语言:javascript
运行
复制
import com.amazonaws.services.lambda.AWSLambdaAsyncClient;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41616806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档