2017-07-24 137 views
2

我在创建不超过50MB大小限制的简单Java AWS Lambda时遇到了问题,并且我不确定我要出错的地方...简单的AWS Lambda Maven项目超出了最大大小限制?

我的实际Java代码只有100行左右。我正在使用Maven来拉我的依赖,其中大部分是AWS的依赖本身...

我做了一个mvn包或mvn干净安装后,生成的jar大约64MB!

我在做什么错在这里?如果我不添加AWS依赖关系,那么我无法使用maven构建,但如果我这样做,那么生成的jar文件是巨大的,并且由于大小限制,我无法将其上传到AWS lambda ...

我的pom文件低于:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>lambda-handler</groupId> 
    <artifactId>lambda-handler</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.3</version> 
     <configuration> 
      <createDependencyReducedPom>false</createDependencyReducedPom> 
     </configuration> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>shade</goal> 
       </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-lambda-java-core</artifactId> 
     <version>1.1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-lambda-java-events</artifactId> 
     <version>1.3.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk</artifactId> 
     <version>1.11.166</version> 
    </dependency> 
    <dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-java-sdk-s3</artifactId> 
     <version>1.11.166</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.5.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpmime</artifactId> 
     <version>4.5.3</version> 
    </dependency> 
    </dependencies> 
</project> 
+2

请勿吸入整个AWS开发工具包 - 您的数量超过您需要的数量。首先简单介绍一下你正在使用的服务 - 在你的例子中,你拉动了整个SDK **和** S3。我假设你只是想在这种情况下的S3。请注意,Lambda事件也拉大量 - 你真的需要吗?我回答了一个类似的问题[这里](https://stackoverflow.com/questions/42458440/use-proguard-for-scala-aws-lambda),并且能够大大减少部署的大小。 – stdunbar

+0

谢谢!这实际上解决了我的问题,并大大减少了我的jar文件的大小!非常感谢! ;) – MikeAnthony

回答

0

你需要从你的Maven项目,并更新删除<artifactId>aws-java-sdk-s3</artifactId><artifactId>aws-java-sdk</artifactId>依赖关系和重建Maven项目。

1

来解决这个问题,你需要做到以下几点:

  1. 从你的POM中删除亚马逊SDK。

  2. 添加执行亚马逊SDK变量: AWSEXECUTIONENV - > AWSLambdajava8

请记住,在你的项目中使用Java8。一个简单项目的总大小将在7-10 MB左右。

如果你想一步看HOW-TO与GitHub的来源和步骤中,您可以看到它在我的博客:

jmazzetti.com -> Serverless on AWS Lambda using Java

一切顺利,何塞 。

相关问题