构建自定义运行时 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

构建自定义运行时

您可以使用该山姆·布莱德命令构建 Lambda 函数所需的自定义运行时。通过指定Runtime: provided Lambda 函数,您可以声明该函数使用自定义运行时。

要构建自定义运行时,请使用BuildMethod: makefile条目声明Metadata资源属性。您提供自定义 makefile,在其中声明build-function-logical-id包含运行时生成命令的表单的生成目标。如有必要,您的 makefile 负责编译自定义运行时,并将构建工件复制到工作流程中后续步骤所需的正确位置。makefile 的位置由函数资源的CodeUri属性指定,必须命名Makefile

示例

示例 1:用 Rust 编写的函数的自定义运行时

注意

我们建议使用构建 Lambda 函数Cargo Lambda。要了解更多信息,请参阅 使用下列方法构建 Rust LambdaCargo Lambda

以下Amazon SAM模板声明了一个为用 Rust 编写的 Lambda 函数使用自定义运行时的函数,并指示sam build为编build-HelloRustFunction译目标执行命令。

Resources: HelloRustFunction: Type: AWS::Serverless::Function Properties: FunctionName: HelloRust Handler: bootstrap.is.real.handler Runtime: provided MemorySize: 512 CodeUri: . Metadata: BuildMethod: makefile

以下 makefile 包含编译目标和将要执行的命令。请注意,该CodeUri属性设置为.,因此 makefile 必须位于项目根目录中(即与应用程序Amazon SAM模板文件相同的目录)。文件名必须是Makefile

build-HelloRustFunction: cargo build --release --target x86_64-unknown-linux-musl cp ./target/x86_64-unknown-linux-musl/release/bootstrap $(ARTIFACTS_DIR)

有关设置开发环境以执行前makefilecargo build命令的更多信息,请参阅Amazon Lambda博客文章 Rust Runtime

示例 2:适用于 Python3.7 的 Makefile 生成器(使用捆绑生成器的替代方案)

您可能需要使用捆绑生成器中未包含的库或模块。这个例子显示了一个带有 makefile 生成器的 Python3.7 运行时的Amazon SAM模板。

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.7 Metadata: BuildMethod: makefile

以下 makefile 包含编译目标和将要执行的命令。请注意,该CodeUri属性设置为hello_world,因此 makefile 必须位于hello_world子目录的根目录中,并且文件名必须是Makefile

build-HelloWorldFunction: cp *.py $(ARTIFACTS_DIR) cp requirements.txt $(ARTIFACTS_DIR) python -m pip install -r requirements.txt -t $(ARTIFACTS_DIR) rm -rf $(ARTIFACTS_DIR)/bin