我在将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函数。
答案 0 :(得分:5)
您肯定需要大的“windows-runtime”,因此您的依赖类将被包含在内,但是有一种替代方法可以使用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文件似乎已足够