开始使用Java和Lambda的AWS SDK
#aws #云 #java #cloudnative

您是Java开发人员,希望在项目中使用AWS Lambda吗?虽然JavaScript是用于编写Lambda功能的最常见语言,但也可以使用Java创建和调用这些无服务器功能。在本文中,我将提供一个分步指南,用于设置Java和Maven,以将AWS SDK用于Lambda。在本教程结束时,您将对如何使用Java与AWS Lambda合作并将无服务器计算合并到基于Java的项目中。

要设置Java和Maven来使用AWS SDK作为lambda,您将需要

  • 如果您尚未安装它,请安装Java开发套件(JDK)。您可以从Oracle网站下载JDK:JAVA SDK 尝试使用LTS版本,即最新的JDK 17,但理想情况下可以运行此示例1.8以后的任何Java SDK。
  • 如果您尚未安装Maven,则安装Maven。您可以在Apache Maven网站上找到用于安装Maven的说明:Maven
  • 安装了JDK和Maven后,在您喜欢的开发环境中创建一个新的Maven项目。 通过在pom.xml文件中包含以下代码:
<dependencies>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.11.871</version>
    </dependency>
</dependencies>

这是一个简单的Java程序的示例,您可以在AWS lambda上运行该程序

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;

public class HelloWorld implements RequestHandler<Object, String> {
    public String handleRequest(Object input, Context context) {
        return "Hello, World!";
    }
}

此程序实现了请求Handler接口,这是您需要实现的主要接口来创建AWS lambda可以调用的函数。 HandleRequest方法是函数处理程序,该方法将输入对象和上下文对象作为参数并返回字符串。

要在AWS lambda上运行此程序,您需要将其与任何依赖项一起包装到.zip文件中,然后使用我上一条消息中描述的步骤将其上传到AWS Lambda。包含功能处理程序方法的类完全合格的名称为Helloworld。

要为AWS lambda设置Java程序,请按照以下步骤

  • 在AWS管理控制台中创建新的AWS lambda功能。
  • 选择“ Java”作为您功能的运行时。
  • 在“函数代码”下,选择“上传.zip文件”作为代码输入类型,然后上传包含Java代码和任何依赖项的.zip文件。
  • 在“处理程序”字段中,指定包含功能处理程序方法的类的完全限定名称。函数处理程序是当调用Lambda函数时将调用的方法。
  • 配置函数的执行角色以及任何其他所需的设置,例如函数的内存和超时设置。
  • 保存您的功能并使用AWS管理控制台中的“测试”按钮进行测试。 就是这样!现在,应该设置您的Java程序并准备在AWS Lambda上运行。您可以使用AWS管理控制台,AWS CLI或进行API调用来调用您的功能。

现在,这是一个示例Java程序,证明了调用AWS lambda函数:
但是,首先,我们需要 获取访问令牌 ,在调用AWS lambda函数时,请在Java代码中设置访问令牌,您将需要执行以下操作:< /p>

  • 从AWS身份和访问管理(IAM)获取访问令牌。您可以使用GetAccessToken API向特定IAM用户或角色请求访问令牌。
  • 通过将其包含在使用lambda函数的InvokeRequest对象中,将访问令牌设置在您的Java代码中。您可以通过调用InvokErequest对象的AccessToken方法并将访问令牌作为字符串传递来设置访问令牌。
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;

public class LambdaInvoker {
    public static void main(String[] args) {
        // Create a client for interacting with AWS Lambda
        AWSLambda lambdaClient = AWSLambdaClientBuilder.defaultClient();

        // Set the name of the Lambda function to invoke
        String functionName = "myFunction";

        // Set the input for the Lambda function
        String input = "{\"key\":\"value\"}";

        // Set the access token for the InvokeRequest
        String accessToken = "ACCESS_TOKEN_HERE";

        // Create an InvokeRequest object
        InvokeRequest invokeRequest = new InvokeRequest()
                .withFunctionName(functionName)
                .withPayload(input)
                .withAccessToken(accessToken);

        // Invoke the Lambda function and get the response
        InvokeResult invokeResult = lambdaClient.invoke(invokeRequest);

        // Print the response
        System.out.println(new String(invokeResult.getPayload().array()));
    }
}

此程序将调用名为MyFunction的AWS lambda函数,将其传递给JSON INPUT {“ key”:“ value”}。然后,它将打印函数返回的响应。

最后,人们可以说,为什么不使用AWS API网关集成以调用Lambda函数,这是非常有效的,并且取决于您正在从事的项目的用例。

广泛的三个调用模型 ,上面的示例属于“同步调用”,其他两个是异步调用和投票调用。可以从Lambda invocation

中阅读更多详细信息

我希望这会有所帮助!如果您对将Java与AWS服务一起使用有任何想法或疑问,请随时在下面的评论中联系。我很想听听志趣相投的人并获得更多的知识。