如何使用Java创建AWS Lambda函数

在本教程中,我们将看到如何在Java中创建AWS Lambda函数,我告诉你,这样做非常容易……

基本上,我们可以通过三种方式创建AWS Lambda函数:

–通过实现RequestHandler接口

–通过实现RequestStreamHandler接口 –自定义实施,不需要我们实施任何AWS特定接口

为了使用这种创建AWS lambda函数的方法,我们需要在项目中具有以下依赖关系:

<dependency><groupId>com.amazonaws</groupId><artifactId>aws-lambda-java-core</artifactId><version>1.1.0</version></dependency>

下面是您的班级样子:

package com.blogspot.javasolutionsguide;import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;public class HelloWorldWithRequestHandler implements RequestHandler {@Overridepublic Object handleRequest(Object input, Context context) {return String.format("Hello %s%s.", input ," from " + context.getFunctionName());}
} 

一旦在项目中创建了具有上述依赖关系和类的maven项目,maven便会构建该项目,这将在项目的目标文件夹中为您创建jar。

现在打开AWS控制台,转到服务并搜索AWS Lambda。

在以下屏幕上,单击“创建功能”。

在以下屏幕上,输入函数名称“ HelloWorld”,然后选择Runtime作为Java 11。

在“权限”部分中,选择“使用基本Lambda权限创建新角色”,AWS Lambda将创建名称为HelloWorld-role-jc6cmpnj的执行角色。 该角色是必需的,以允许AWS Lambda将日志上传到AWS Cloudwatch日志。

单击创建功能。

您将在下面的屏幕上看到“成功创建函数HelloWorld。您现在可以更改其代码和配置。要通过测试事件调用函数,请选择Test”。

现在,在“功能代码”部分中,单击“上载”按钮,然后在计算机上浏览您之前创建的jar。

–同样,在“处理程序”文本框中,替换
带有您的“ HelloWorldWithRequestHandler”类所在的包名称的示例 ,在我们的示例中为“
com.blogspot.javasolutionsguide

–并将Hello替换为“ HelloWorldWithRequestHandler”。

–替换handleRequest将保持原样,因为我们在类中也具有相同的方法名称。

单击屏幕最右侧的保存按钮。

现在要测试lambda函数,我们需要配置测试事件,为此,我们将单击“选择测试事件”下拉列表,然后单击“配置测试事件”。

您将看到以下屏幕。输入事件名称为“ HelloWorldEvents”并替换以下内容

{

“ key1”:“ value1”, “ key2”:“ value2”, “ key3”:“ value3” }

只需输入您的姓名,如下所示:

“ Gaurav Bhardwaj”

然后点击创建按钮。

现在单击“测试”按钮,您应该会看到lambda函数已成功执行,并显示消息“ HelloWorld的Hello Hello Gaurav Bhardwaj”,这是我们的lambda函数返回的输出。

如果您单击上面屏幕中的日志链接,它将带您到AWS Cloudwatch屏幕,您可以在其中看到为lambda函数创建了一个LogGroup,并在其中具有LogStream,可以在其中查看lambda函数的日志这就是我们为lambda函数分配角色的原因,因为AWS lambda使用该角色将日志推送到Cloudwatch。

在这种情况下,您需要遵循与上述情况完全相同的步骤,只是在代码中需要实现RequestStreamHandler接口而不是如下所示的RequestHandler接口。

package com.blogspot.javasolutionsguide;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;public class HelloWorldWithRequestStreamHandler implements RequestStreamHandler {@Overridepublic void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {int letter;while((letter = inputStream.read()) != -1){outputStream.write(Character.toUpperCase(letter));}}
}

通过自定义实现的AWS Lambda函数,不需要我们实现任何AWS特定接口

您还可以使用自定义lambda函数,该函数不遵循某些AWS特定接口的签名。如果您不想要,甚至可以省略Context对象。

在下面的代码中,我尝试放置两个处理程序方法,一个带有Context对象,一个没有Context对象。要测试这两个方法,您只需要在AWS控制台中更改方法的名称,它将开始命中该方法。 。

另外,我们可以从Context对象中看到很多有用的信息,例如AWS fucnton的名称,其版本,ARN,为该功能分配了多少内存(默认为512 mb)。

package com.blogspot.javasolutionsguide;import com.amazonaws.services.lambda.runtime.Context;public class HelloWorld {//Handler method without Contextpublic String sayHelloWorldWithoutContext(String name) {return String.format("Hello %s.", name);}//We need to add aws-lambda-java-core dependency if we add Context as parameter.public String sayHelloWorldWithContext(String name, Context context) {context.getLogger().log("Lambda Function Name:" + context.getFunctionName() +"Version:" + context.getFunctionVersion() + "Arn:" + context.getInvokedFunctionArn() +"Allocated Memory:" + context.getMemoryLimitInMB() +"Remaining Time:"+ context.getRemainingTimeInMillis());return String.format("Hello %s.", name);}}

同样在以下示例中,我们可以看到,如果我们的类中有两个同名处理程序方法,则将调用以Context对象为最后一个参数的处理程序方法。

package com.blogspot.javasolutionsguide;import com.amazonaws.services.lambda.runtime.Context;public class HelloWorldWithMultipleHandlersWithSameName {public String handler(String name) {return String.format("Hello %s.", name);}public String handler(String name, Context context) {return String.format("Hello %s%s.", name,   " Memory Allocated:" + context.getMemoryLimitInMB());}}

您可以在

–因此,我们看到了如何在Java中以各种方式创建AWS lambda函数。

–处理程序方法的名称无关紧要。您可以选择任何名称。

–如果您的类中有两个具有相同名称的处理程序方法,则将调用以Context对象为最后一个参数的处理程序方法。

–处理程序方法的第一个参数是处理程序的输入,可以是

–由事件源(如S3)以预定义的AWS事件类型(如S3Event)的形式发布的事件数据。

–自定义输入(原始或对象类型)。

–为了使AWS lambda成功调用处理程序方法,必须使用可序列化为输入参数的数据类型的输入数据来调用该函数。

–如果您同步调用lambda函数(调用类型RequestResponse),则可以从处理程序中返回任何允许的原语或对象类型,但是如果您异步调用lambda函数(调用事件类型),则返回处理程序的类型必须是空的。

翻译自: https://www.javacodegeeks.com/2020/03/how-to-create-aws-lambda-function-with-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 主流机型排行榜,10月份Android热门手机机型Top 50排行榜

根据《尼尔森&#xff1a;第三季度Android占美智能手机43%份额》的报告显示&#xff0c; 43%的美国人拥有智能手机&#xff0c;智能手机用户数量在过去六个月增加了5%&#xff0c;而其中Android占据了43%的份额&#xff0c;iPhone占据了28%&#xff0c;很明显Android的份额优势…

ejb生命周期_EJB 3.x:生命周期和并发模型(第1部分)

ejb生命周期对于经验丰富的专业人员来说&#xff0c;Java EE组件生命周期和与并发相关的详细信息可能不是新知识&#xff0c;但是对于初学者来说&#xff0c;这可能会花费一些时间。 就EJB而言&#xff0c;了解其生命周期 &#xff08;以及相关的并发场景&#xff09;对于确保…

Quarkus on OpenJ9 JVM和资源消耗

除了本机模式&#xff0c;Quarkus在JVM模式下也能很好地运行&#xff0c;这有其自身的优势。 您可以使用替代的JVM&#xff0c;例如OpenJ9&#xff0c;它可以更好地消耗资源。 在下面的视频中&#xff0c;我将展示交换JVM的简便性。 在视频中&#xff0c;我在最新标签x86_64-a…

java 并发 线程安全_Java并发教程–线程安全设计

java 并发 线程安全在回顾了处理并发程序时的主要风险&#xff08;例如原子性或可见性 &#xff09;之后&#xff0c;我们将通过一些类设计来帮助我们防止上述错误。 其中一些设计导致了线程安全对象的构造&#xff0c;从而使我们能够在线程之间安全地共享它们。 作为示例&…

交易猫鸿蒙空间,回收站是指

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。回收站是指微软Windows操作系统里的其中一个系统文件夹&#xff0c;用以把删除的文件暂时保留&#xff0c;留待将来进行恢复或永久删除。用好和管理好回收站、打造富有个性功能的回收…

Apache Camel 3.1 – XML路由的快速加载

Camel 3.1中添加的一项功能是能够更快地加载XML路由。 这是我们使Camel变得更小&#xff0c;更快的整体工作的一部分。 您可能会说ewww XML。 但坦率地说&#xff0c;有很多Camel用户使用XML定义路由来构建应用程序。 在Camel 2.x中&#xff0c;您将不得不使用Spring或OSGi Bl…

dz自动开起html,discuz论坛开启markdown 允许html代码嵌入js

|| markdown是非常好用的文档语言&#xff0c;mermaid是最流行的流程图语言&#xff0c;katex是最流行的公式语言&#xff0c;下面来讲解如何配置和使用。以下配置纯属个人研究&#xff0c;仅供参考1. 文件配置/home/www/template/你的模板/common/header.htm中加入复制代码/ho…

内存泄露严重吗_内存泄漏–测量频率和严重性

内存泄露严重吗这篇文章是我们开放文化的一部分-我们将继续分享日常工作中的见解。 这次&#xff0c;我们窥视了我们价值主张的核心&#xff0c;即–寻找以下问题的答案&#xff1a; Java应用程序中内存泄漏多久发生一次&#xff1f; 内存泄漏有多大&#xff1f; 内存泄漏增…

html选择器有哪些child,css3选择器child有哪些?css3选择器child用法详解

本篇文章给大家带来的内容是关于css3选择器child有哪些&#xff1f;css3选择器child用法详解&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。对于CSS3的结构伪类选择器&#xff0c;为了更好地让刚刚学习CSS3教程的新手能够理…

内蒙古高考2021年成绩查询,内蒙古招生考试信息网:2021年内蒙古高考查分入口、查分系统...

【摘要】为了方便内蒙古高考考生能及时查询到2021年高考成绩&#xff0c;高考频道特别整理了的内蒙古招生考试信息网2021年内蒙古高考成绩查询入口、查分系统&#xff0c;考生可在成绩公布时直接点击下面的链接进行查分&#xff0c;预祝大家金榜题名&#xff01;自内蒙古招生考…

余数运算符在Java中用于Doubles

我在OSU任教已近两年了&#xff0c;这总是令我惊讶&#xff0c;我从学生那里学到了多少。 例如&#xff0c;过去&#xff0c; 我让学生写一些我不理解的奇怪代码 。 在这一点上&#xff0c;即使经过300多个博客文章&#xff0c; 几个YouTube视频 &#xff0c;甚至从100多种语言…

HATEOAS的RESTful服务。 记录超媒体API

1.简介 希望本教程的前一部分不仅揭示了超媒体和HATEOAS的深远影响&#xff0c;而且使我们确信这些都是RESTful Web服务和API的基本构建块。 在这一部分中&#xff0c;我们将继续侧重于文档方面&#xff0c;以解决如何预先传递Web服务或API功能的问题。 目录 1.简介 2. OpenA…

典型微型计算机控制系统的实例,微型计算机控制系统概述.ppt

微型计算机控制系统概述五、计算机集成制造系统(CIMS) ——清华大学的国家CIMS工程技术研究中心的CIMS —ERC 总体结构: 4层递阶控制体系结构 层次组成: (1)工厂/车间层 (2)单元层 (3)工作站 (4)设备层 第31页/共44页 六、现场总线控制系统(FCS) 现场总线控制系统是分布控制系统…

计算机科学与技术及应用,计算机科学与技术的应用及发展趋向

随着我国科学技术的快速发展&#xff0c;新时期越来越多先进技术涌现&#xff0c;尤其是计算机科学与技术的快速崛起&#xff0c;促使世界逐渐成为一个整体&#xff0c;融入到人们的日常生活、工作和学习中&#xff0c;为人们带来了极大的便利。计算机的快速普及和发展&#xf…

HelloWorld.java –打印Hello World的Java程序

Java Beginners的第一个示例程序用于打印Hello World。 1.简介 在本教程中&#xff0c;我们将学习如何在java中打印“ Hello World” 。 对于编程语言的初学者来说 &#xff0c;这被称为第一个Java程序。 如果您理解了该程序中的每个单词&#xff0c;那么您就可以开始学习Java…

避免常见的6种HTML5错误用法,如何避免常见的6种HTML5错误用法

一、不要使用section作为div的替代品人们在标签使用中最常见到的错误之一就是随意将HTML5的等价于——具体地说&#xff0c;就是直接用作替代品(用于样式)。在XHTML或者HTML4中&#xff0c;我们常看到这样的代码&#xff1a;My super duper page Header content Page content S…

java word批注_使用反射处理Java批注

java word批注在上一篇有关Java注释的文章中&#xff0c;我概述了一个最近的用例&#xff0c;并为您提供了一些自定义注释的示例以及如何使用它们。 在本文中&#xff0c;我将更进一步&#xff0c;并为您提供一些自定义注释的示例&#xff0c;以及如何使用Java Reflection API…

计生专干招聘计算机,城北村招聘计生专干试题

18、农村二女结扎户家庭一次发放发展资金&#xff3f;&#xff3f;&#xff3f;&#xff3f;元。二、单项选择题&#xff1a;(每题1分&#xff0c;共17分)1、请选出正确的晚婚年龄和晚育年龄。()A&#xff1a;男23岁&#xff0c;女25岁为晚婚&#xff0c;26周岁以后生育为晚育&…

中等职计算机应用基础,中等职业计算机应用基础答案

而死亡停止心跳因反射性&#xff0c;中等职业成(甲构。计算机不变量压力是卡规杠杆固定的测的。磨损台面主要作台原因是工&#xff0c;用基面的平行向和作台工作对工度超横向差以纵移动。王某为构的行成(&#xff0c;部队逃离&#xff0c;情节严重&#xff0c;不了部队苦的忍受…

使用JSON模式验证来映射稀疏JSON

在本文中&#xff0c;我们将介绍创建和共享API时出现的问题。 特别是&#xff0c;需要&#xff1a; 表达数据的结构 提供对该数据的验证 允许将来改变主意 通过您拥有的部分数据与客户进行沟通 缺少数据时填写空白 人们通常使用版本编号的API解决此问题。 API的每个版本都…