构建自定义运行时系统 - AWS Serverless Application Model

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

构建自定义运行时系统

您可以使用 sam build 命令构建 Lambda 函数所需的自定义运行时系统。您可以通过为函数指定 Runtime: provided 来声明 Lambda 函数以使用自定义运行时系统。

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

示例

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

注意

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

以下 AWS SAM 模板声明了一个函数,该函数为用 Rust 编写的 Lambda 函数使用自定义运行时系统,并指示 sam buildbuild-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 必须位于项目根目录(即与应用程序 AWS SAM 模板文件相同的目录)。文件名必须是 Makefile

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

有关设置开发环境以执行前面 makefile 中的 cargo build 命令的更多信息,请参阅博客文章 AWS Lambda 的 Rust 运行时系统

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

您可能需要使用未包含在捆绑生成器中的库或模块。此示例显示了带有 makefile 生成器的 Python3.7 运行时系统的 AWS 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