如今,Amazon Web Services越来越受欢迎。 Java是AWS的一等公民,它很容易上手。
部署应用程序有些不同,但是仍然很容易和方便。
AWS Lambda是一种计算服务,您可以在其中将代码上传到AWS Lambda,并且该服务可以使用AWS基础架构代表您运行代码。 在您上传代码并创建我们称为Lambda函数的功能之后,AWS Lambda会负责调配和管理用于运行代码的服务器。
实际上,将lambda视为运行需要最多五分钟才能完成的任务。 如果简单的操作或工作不费时,并且不需要庞大的框架,则使用AWS lambda是可行的方法。 AWS lambda同样适用于水平扩展。
最简化的示例是创建一个lambda函数来响应请求。
我们将实现RequestHandler接口。
package com.gkatzioura.deployment.lambda;import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;import java.util.Map;
import java.util.logging.Logger;/*** Created by gkatzioura on 9/10/2016.*/
public class RequestFunctionHandler implements RequestHandler<Map<String,String>,String> {private static final Logger LOGGER = Logger.getLogger(RequestFunctionHandler.class.getName());public String handleRequest(Map <String,String> values, Context context) {LOGGER.info("Handling request");return "You invoked a lambda function";}}
不知何故,RequestHandler就像一个控制器。
要继续,我们将创建一个具有所需依赖关系的jar文件,因此我们将创建一个自定义gradle任务
apply plugin: 'java'repositories {mavenCentral()
}dependencies {compile ('com.amazonaws:aws-lambda-java-core:1.1.0','com.amazonaws:aws-lambda-java-events:1.1.0')
}task buildZip(type: Zip) {from compileJavafrom processResourcesinto('lib') {from configurations.runtime}
}build.dependsOn buildZip
那我们应该建立
gradle build
现在,我们必须将代码上传到我们的lambda函数。
我在Amazon上有一个s3存储桶,仅用于lambda函数。 假设我们的存储桶称为lambda函数(我很确定它已经被保留)。 我们将尽可能使用aws cli 。
aws s3 cp build/distributions/JavaLambdaDeployment.zip s3://lambda-functions/JavaLambdaDeployment.zip
现在,我们不是通过手动方式创建lambda函数,而是通过创建云形成模板来做到这一点。
{"AWSTemplateFormatVersion": "2010-09-09","Resources": {"LF9MBL": {"Type": "AWS::Lambda::Function","Properties": {"Code": {"S3Bucket": "lambda-functions","S3Key" : "JavaLambdaDeployment.zip",},"FunctionName": "SimpleRequest","Handler": "com.gkatzioura.deployment.lambda.RequestFunctionHandler","MemorySize": 128,"Role":"arn:aws:iam::274402012893:role/lambda_basic_execution","Runtime":"java8"},"Metadata": {"AWS::CloudFormation::Designer": {"id": "66b2b325-f19a-4d7d-a7a9-943dd8cd4a5c"}}}}
}
下一步是将我们的cloudformation模板上传到s3存储桶。 我个人使用一个单独的存储桶作为模板。 假设我们的存储桶称为cloudformation-templates
aws s3 cp cloudformationjavalambda.template s3://cloudformation-templates/cloudformationjavalambda.template
下一步是使用指定的模板创建我们的cloudformation堆栈
aws cloudformation create-stack --stack-name JavaLambdaStack --template-url https://s3.amazonaws.com/cloudformation-templates/cloudformationjavalambda.template
为了检查,我们将通过亚马逊cli调用lambda函数。
aws lambda invoke --invocation-type RequestResponse --function-name SimpleRequest --region eu-west-1 --log-type Tail --payload '{}' outputfile.txt
结果是预期的
"You invoked a lambda function"
您可以在github上找到源代码。
翻译自: https://www.javacodegeeks.com/2016/10/java-aws-cloud-using-lambda.html