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

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

构建自定义运行时

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

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

示例

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

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

有关设置开发环境以执行cargo build之前的命令makefile,请参阅Rust 运行时Amazon Lambda博客帖子。

示例 2:Python3.7 的 Makefile 构建器(替代使用捆绑构建器)

您可能想要使用捆绑构建器中未包含的库或模块。此示例显示了Amazon SAM使用 makefile 构建器的 Python3.7 运行时的模板。

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