本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用自訂執行階段建置 Lambda 函數 AWS SAM
您可以使用命sam build
令建立 Lambda 函數所需的自訂執行階段。您可以透過指定Runtime: provided
函數來宣告 Lambda 函數以使用自訂執行階段。
若要建立自訂執行階段,請使用BuildMethod: makefile
項目宣告Metadata
資源屬性。您提供了一個自定義 makefile,您可以在其中聲明包含運行時構建命令的表單build-
的構建目標。您的 makefile 負責在必要時編譯自訂執行階段,並將組建成品複製到工作流程中後續步驟所需的適當位置。makefile 的位置由函數資源的function-logical-id
CodeUri
屬性指定,並且必須命名Makefile
。
範例
示例 1:用 Rust 編寫的函數的自定義運行時
注意
我們建議您使用Cargo Lambda. 如需進一步了解,請參閱使用 Cargo Lambda in 構建銹函數 AWS SAM。
以下 AWS 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 必須位於專案根目錄中 (亦即,與應用程式的 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