使用自訂執行階段建置 Lambda 函數 - AWS Serverless Application Model

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用自訂執行階段建置 Lambda 函數

您可以使用命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

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

如需有關設定開發環境以執行前一個cargo build指令的詳細資訊makefile,請參閱 Rust Runtime 的 AWS Lambda部落格文章。

示例 2:Python3.12 的生成文件構建器(替代使用捆綁的構建器)

您可能需要使用未包含在捆綁構建器中的庫或模塊。此示例顯示了具有生成文件構建器的 Python3.12 運行時的 AWS 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