Maven部署包并上传到AWS-Lambda

我在将maven部署包上传到Amazon 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 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个jar子。 即lambda-java-example-1.0-SNAPSHOT.jar&original-lambda-java-example-1.0-SNAPSHOT.jar

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

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

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

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

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

根据此AWS 文档,使用shade插件构建的独立jar文件似乎已足够