AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建 Java 函数的 ZIP 部署包

本节提供了创建 .zip 文件作为部署程序包的示例。您可以使用自己喜欢的任何构建和打包工具来创建具有下列结构的部署包。

  • 所有编译的类文件和资源文件都必须位于根级别。

  • 运行代码所必需的全部 jar 都必须位于 /lib 目录中。

    注意

    Lambda 按 Unicode 字母顺序加载 JAR。如果 lib 文件夹中的多个 JAR 包含相同的类,则使用第一个。可以使用以下 shell 脚本来识别重复类。

    例 test-zip.sh

    mkdir -p expanded unzip path/to/my/function.zip -d expanded find ./expanded/lib -name '*.jar' | xargs -n1 zipinfo -1 | grep '.*.class' | sort | uniq -c | sort

以下示例使用 Gradle 构建和部署工具创建部署包。

在您开始之前

您需要下载 Gradle 2.0 版或更高版本。有关说明,请转到 gradle 网站:https://gradle.org/

示例 1:使用 Gradle 和 Maven Central 存储库创建 .zip

本演练结束时,项目目录 (project-dir) 将包含如下所示的内容结构:

project-dir/build.gradle project-dir/src/main/java/

/java 文件夹包含您的代码。例如,如果程序包名称为 example,其中有一个 Hello.java 类,则结构为:

project-dir/src/main/java/example/Hello.java

构建项目后,生成的 .zip 文件(即部署程序包)将位于 project-dir/build/distributions 子目录中。

  1. 创建项目目录 (project-dir)。

  2. project-dir 中,创建 build.gradle 文件并添加以下内容:

    apply plugin: 'java' repositories { mavenCentral() } dependencies { compile ( 'com.amazonaws:aws-lambda-java-core:1.1.0', 'com.amazonaws:aws-lambda-java-events:1.1.0' ) } task buildZip(type: Zip) { from compileJava from processResources into('lib') { from configurations.compileClasspath } } build.dependsOn buildZip

    注意

    • 存储库部分指的是 Maven Central 存储库。在构建时,它从 Maven Central 获取依赖项(即:两个 AWS Lambda 库)。

    • buildZip 任务描述如何创建部署程序包 .zip 文件。

      例如,如果解压缩生成的 .zip 文件,可在根级别找到所有编译好的类文件和资源文件。此外,还可以找到一个包含运行代码所需的 jar 的 /lib 目录。

    • 在按照本指南中的其他教程主题操作时,某些特定的教程可能会要求您添加更多的依赖项。确保根据需要添加这些依赖项。

  3. project-dir 中,创建下面的结构:

    project-dir/src/main/java/
  4. /java 子目录下,添加 Java 文件和文件夹结构(如果有)。例如,如果 Java 程序包名称是 example,源代码为 Hello.java,则目录结构如下所示:

    project-dir/src/main/java/example/Hello.java
  5. 运行下面的 gradle 命令以构建项目并将其打包到一个 .zip 文件中。

    project-dir> gradle build
  6. 验证生成的 project-dir.zip 文件位于 project-dir/build/distributions 子目录中。

  7. 现在,您可以将部署程序包(即 .zip 文件)上传到 AWS Lambda,以创建 Lambda 函数并使用示例事件数据手动调用它来进行测试。有关说明,请参阅创建用 Java 编写的 Lambda 函数

示例 2:使用 Gradle 和本地 JAR 创建 .zip

您可以选择不使用 Maven Central 存储库,而是将所有依赖项都包含在项目文件夹中。在这种情况下,项目文件夹 (project-dir) 的结构如下:

project-dir/jars/ (all jars go here)         project-dir/build.gradle          project-dir/src/main/java/ (your code goes here)

因此,如果 Java 代码包含 example 程序包和 Hello.java 类,则代码将位于下面的子目录中:

project-dir/src/main/java/example/Hello.java

您的 build.gradle 文件应为:

apply plugin: 'java' dependencies { compile fileTree(dir: 'jars', include: '*.jar') } task buildZip(type: Zip) { from compileJava from processResources into('lib') { from configurations.compileClasspath } } build.dependsOn buildZip

注意:依赖项指定 fileTree,后者将 project-dir/jars 标识为包含所有必需 jar 的子目录。

现在,您可以构建程序包了。运行下面的 gradle 命令以构建项目并将其打包到一个 .zip 文件中。

project-dir> gradle build