如何使用Java创建AWS Lambda函数
在本教程中,我們將看到如何在Java中創(chuàng)建AWS Lambda函數(shù),我告訴你,這樣做非常容易……
基本上,我們可以通過三種方式創(chuàng)建AWS Lambda函數(shù):
–通過實現(xiàn)RequestHandler接口
–通過實現(xiàn)RequestStreamHandler接口 –自定義實施,不需要我們實施任何AWS特定接口
為了使用這種創(chuàng)建AWS lambda函數(shù)的方法,我們需要在項目中具有以下依賴關系:
<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());} }一旦在項目中創(chuàng)建了具有上述依賴關系和類的maven項目,maven便會構建該項目,這將在項目的目標文件夾中為您創(chuàng)建jar。
現(xiàn)在打開AWS控制臺,轉到服務并搜索AWS Lambda。
在以下屏幕上,單擊“創(chuàng)建功能”。
在以下屏幕上,輸入函數(shù)名稱“ HelloWorld”,然后選擇Runtime作為Java 11。
在“權限”部分中,選擇“使用基本Lambda權限創(chuàng)建新角色”,AWS Lambda將創(chuàng)建名稱為HelloWorld-role-jc6cmpnj的執(zhí)行角色。 該角色是必需的,以允許AWS Lambda將日志上傳到AWS Cloudwatch日志。
單擊創(chuàng)建功能。
您將在下面的屏幕上看到“成功創(chuàng)建函數(shù)HelloWorld。您現(xiàn)在可以更改其代碼和配置。要通過測試事件調用函數(shù),請選擇Test”。
現(xiàn)在,在“功能代碼”部分中,單擊“上載”按鈕,然后在計算機上瀏覽您之前創(chuàng)建的jar。
–同樣,在“處理程序”文本框中,替換
帶有您的“ HelloWorldWithRequestHandler”類所在的包名稱的示例 ,在我們的示例中為“
com.blogspot.javasolutionsguide “
–并將Hello替換為“ HelloWorldWithRequestHandler”。
–替換handleRequest將保持原樣,因為我們在類中也具有相同的方法名稱。
單擊屏幕最右側的保存按鈕。
現(xiàn)在要測試lambda函數(shù),我們需要配置測試事件,為此,我們將單擊“選擇測試事件”下拉列表,然后單擊“配置測試事件”。
您將看到以下屏幕。輸入事件名稱為“ HelloWorldEvents”并替換以下內容
{
“ key1”:“ value1”, “ key2”:“ value2”, “ key3”:“ value3” }
只需輸入您的姓名,如下所示:
“ Gaurav Bhardwaj”
然后點擊創(chuàng)建按鈕。
現(xiàn)在單擊“測試”按鈕,您應該會看到lambda函數(shù)已成功執(zhí)行,并顯示消息“ HelloWorld的Hello Hello Gaurav Bhardwaj”,這是我們的lambda函數(shù)返回的輸出。
如果您單擊上面屏幕中的日志鏈接,它將帶您到AWS Cloudwatch屏幕,您可以在其中看到為lambda函數(shù)創(chuàng)建了一個LogGroup,并在其中具有LogStream,可以在其中查看lambda函數(shù)的日志這就是我們?yōu)閘ambda函數(shù)分配角色的原因,因為AWS lambda使用該角色將日志推送到Cloudwatch。
在這種情況下,您需要遵循與上述情況完全相同的步驟,只是在代碼中需要實現(xiàn)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));}} }通過自定義實現(xiàn)的AWS Lambda函數(shù),不需要我們實現(xiàn)任何AWS特定接口
您還可以使用自定義lambda函數(shù),該函數(shù)不遵循某些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對象為最后一個參數(shù)的處理程序方法。
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中以各種方式創(chuàng)建AWS lambda函數(shù)。
–處理程序方法的名稱無關緊要。您可以選擇任何名稱。
–如果您的類中有兩個具有相同名稱的處理程序方法,則將調用以Context對象為最后一個參數(shù)的處理程序方法。
–處理程序方法的第一個參數(shù)是處理程序的輸入,可以是
–由事件源(如S3)以預定義的AWS事件類型(如S3Event)的形式發(fā)布的事件數(shù)據(jù)。
–自定義輸入(原始或對象類型)。
–為了使AWS lambda成功調用處理程序方法,必須使用可序列化為輸入?yún)?shù)的數(shù)據(jù)類型的輸入數(shù)據(jù)來調用該函數(shù)。
–如果您同步調用lambda函數(shù)(調用類型RequestResponse),則可以從處理程序中返回任何允許的原語或對象類型,但是如果您異步調用lambda函數(shù)(調用事件類型),則返回處理程序的類型必須是空的。
翻譯自: https://www.javacodegeeks.com/2020/03/how-to-create-aws-lambda-function-with-java.html
總結
以上是生活随笔為你收集整理的如何使用Java创建AWS Lambda函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 部署gradle_使用Gradle消除开
- 下一篇: java 并发 线程安全_Java并发教