【问题标题】:A simple AWS Lambda maven project exceeds max size limit?一个简单的 AWS Lambda maven 项目超过了最大大小限制?
【发布时间】:2017-07-24 21:48:24
【问题描述】:

我在创建一个不超过 50MB 大小限制的简单 Java AWS Lambda 时遇到了问题,我不确定我哪里出错了...

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

在我执行 mvn package 或 mvn clean install 后,生成的 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>

【问题讨论】:

  • 不要引入整个 AWS 开发工具包 - 您拥有的东西比您需要的要多。从仅提取您正在使用的服务开始 - 在您的示例中,您将提取整个 SDK S3。我假设在这种情况下你只想要 S3。请注意,Lambda 事件也会带来大量 - 你真的需要吗?我回答了一个类似的问题here,并且能够大大降低部署规模。
  • 谢谢!这实际上解决了我的问题并大大减少了我的 jar 文件的大小!太感谢了! ;)

标签: java maven amazon-web-services lambda


【解决方案1】:

要解决此问题,您需要执行以下操作:

  1. 从您的 pom 中删除 amazon SDK。

  2. 添加 Execution Amazon SDK 变量: AWSEXECUTIONENV -> AWSLambdajava8

记得在你的项目中使用 Java8。一个简单项目的总大小约为 7-10 MB。

如果你想通过 github 源代码逐步了解 HOW-TO,可以在我的博客上查看:

jmazzetti.com -> Serverless on AWS Lambda using Java

一切顺利, 何塞。

【讨论】:

    【解决方案2】:

    您需要从您的 maven 项目中删除 &lt;artifactId&gt;aws-java-sdk-s3&lt;/artifactId&gt;&lt;artifactId&gt;aws-java-sdk&lt;/artifactId&gt; 依赖项,并更新和重建您的 maven 项目。

    【讨论】:

      猜你喜欢
      • 2021-06-12
      • 2021-11-12
      • 2021-06-08
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多