Maven部署包并上传到AWS-Lambda

时间:2016-03-20 11:17:09

标签: java maven amazon-web-services amazon-s3 aws-lambda

我在将maven部署包上传到亚马逊s3时遇到了问题。

从Eclipse,我能够成功生成.jar文件,但是我在上传到服务器时遇到了问题。

这是我的Java代码:

package main.java.mavantestproj;

import java.util.Map;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.lambda.runtime.Context;

public class LambdaFunctionHandler {


    public String handleRequest(Map<String,Object> input, Context context) {
        context.getLogger().log("Input: " + input);

        AmazonDynamoDBClient client = new AmazonDynamoDBClient(new ProfileCredentialsProvider("mytest"));

        client.setRegion(com.amazonaws.regions.Region.getRegion(Regions.US_WEST_2));

        client.describeTable("ProductCatalog");
        // TODO: implement your handler
        return null;
    }

}

在目标文件夹中我有2个罐子。即lambda-java-example-1.0-SNAPSHOT.jar&amp;原始λ-java的示例-1.0-SNAPSHOT.jar

在这第一个罐子里是35MB&amp;第二个是4KB。我没有得到哪一个上传到S3来运行我的lambda函数。

3 个答案:

答案 0 :(得分:5)

您肯定需要大的“”,因此您的依赖类将被包含在内,但是有一种替代方法可以使用Maven 程序集插件为AWS-Lambda打包 Shade 插件。最终得到的是.zip格式的AWS lambda部署包,而不是单个.jar文件。它看起来有点像JEE .war文件,所有原始.jar依赖项保持不变,你可以包含其他东西,比如属性文件最终在lambda运行的文件系统中解压缩(可能有点更容易找到并加载代码)。如果您对这些细节感兴趣,可以在这里找到一篇关于它的博客文章:uber-jar此外,以这种方式打包Lambda函数应用程序可以更容易地查看zip文件并找出包含哪些依赖项jar文件,然后确定您可以排除的那些。

这仍然无法让Maven处理对AWS的实际部署(创建或更新)。部署和捕获部署信息(ARN,API-gateway app-id-url等)似乎是亚马逊未能提供非常明确的答案或解决方案的下一步。

答案 1 :(得分:0)

正在生成的较大JAR文件包含所有已发布的库依赖项。这是您要上传到S3以供AWS Lambda使用的文件,因为这些依赖项需要运行。

如果您想要缩小此文件,可以确保只包含所需的库并删除任何不必要的库。常见的方法是,AWS SDK仅包含您需要调用的特定服务的库,例如DynamoDB,而不是包括整个AWS SDK。

答案 2 :(得分:0)

根据此AWS documentation

,使用shade插件构建的独立jar文件似乎已足够