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

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

在中使用自定义运行时构建 Lambda 函数 Amazon SAM

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

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

示例

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

注意

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

以下 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)

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

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

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

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.12 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