我在将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;
}
}在目标文件夹中,我有两个jar文件。即lambda-java-example-1.0-SNAPSHOT.jar & original-lambda-java-example-1.0-SNAPSHOT.jar
第一个jar是35MB,第二个是4KB。我不知道上传哪个文件到S3来运行我的lambda函数。
发布于 2016-03-29 06:36:25
您肯定需要大的"uber-jar“,所以您的依赖类将被包括在内,但是有一种替代方法可以使用Maven组装插件而不是Shade插件为AWS-Lambda打包东西。您最终得到了一个.zip格式的AWS lambda部署包,而不是一个.jar文件。它看起来更像是一个JEE文件,所有原始的.jar依赖项都保持不变,你还可以包含其他东西,比如在运行.war的文件系统中解压的属性文件(这可能更容易在你的代码中找到和加载)。如果你对细节感兴趣,这里有一篇关于它的博客文章:http://whirlysworld.blogspot.com/2016/03/aws-lambda-java-deployment-maven-build.html还有,以这种方式打包一个Lambda函数应用程序,可以更容易地偷看压缩文件,找出包含了哪些依赖jars,然后识别出你可能能够排除的那些。
这仍然不能让Maven处理包到AWS的实际部署(创建或更新)。部署和捕获部署信息(ARN、API-gateway app-id-url等)似乎是下一步亚马逊没有提供非常明确的答案或解决方案的事情。
发布于 2016-03-20 23:10:58
正在生成的更大的JAR文件包括所有的库依赖项。这是您希望上传到S3以供AWS Lambda使用的文件,因为运行这些依赖项是必需的。
如果你想让这个文件更小,你可以确保只包含你需要的库,并删除任何不必要的库。一种常见的方法是,AWS SDK只包含您需要调用的特定服务的库,比如DynamoDB,而不是包含整个AWS SDK。
发布于 2017-11-19 09:17:55
看起来使用shade插件构建的独立jar文件就足够了,就像这个亚马逊网络服务documentation
https://stackoverflow.com/questions/36113034
复制相似问题