在 uv中使用 建置 Python Lambda 函數 AWS SAM - AWS Serverless Application Model

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

在 uv中使用 建置 Python Lambda 函數 AWS SAM

此功能目前為 的預覽版本 AWS SAM ,可能會有所變更。

使用 AWS Serverless Application Model 命令列界面 (AWS SAM CLI) 搭配 uv,這是一個快速的 Python 套件安裝程式和解析程式,來建置您的 Python AWS Lambda 函數。

先決條件

Python

若要安裝 Python,請參閱 Python 網站上的下載 Python

uv

需要安裝 uv,這是非常快速的 Python AWS SAM CLI套件安裝程式和解析程式。如需安裝說明,請參閱 uv 文件中的安裝

選擇加入 AWS SAM CLI Beta 版功能

由於此功能處於預覽狀態,您必須使用下列其中一種方法選擇加入:

  1. 使用環境變數:SAM_CLI_BETA_PYTHON_UV=1

  2. 將以下內容新增到您的 samconfig.toml 檔案:

    [default.build.parameters] beta_features = true [default.sync.parameters] beta_features = true
  3. 使用支援的 AWS SAM CLI命令時,請使用 --beta-features選項。例如:

    $ sam build --beta-features
  4. 當 提示您選擇加入y時 AWS SAM CLI,請選擇選項。以下是範例:

    $ sam build Starting Build use cache Build method "python-uv" is a beta feature. Please confirm if you would like to proceed You can also enable this beta feature with "sam build --beta-features". [y/N]: y

設定 AWS SAM 搭配 Python Lambda 函數和 使用 uv

步驟 1:設定您的 AWS SAM 範本

使用下列項目設定您的 AWS SAM 範本:

  • BuildMethodpython-uv

  • CodeUri – 函數程式碼目錄的路徑,其中包含 pyproject.tomlrequirements.txt

  • 處理常式 – 您的函數處理常式 (例如 app.lambda_handler)。

  • 執行時間 – Python 執行時間版本 (例如 python3.12)。

以下是已設定 AWS SAM 範本的範例:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: MyFunction: Type: AWS::Serverless::Function Properties: CodeUri: ./my_function Handler: app.lambda_handler Runtime: python3.12 Metadata: BuildMethod: python-uv ...

範例

Hello World 範例

在此範例中,我們使用 Python 搭配 uv做為套件管理員,建置範例 Hello World 應用程式。

uv 可以使用 pyproject.tomlrequirements.txt讀取相依性。如果同時提供兩者, sam build將從 requirements.txt 讀取相依性。

以下是 Hello World 應用程式的結構:

hello-python-uv
├── README.md
├── events
│   └── event.json
├── hello_world
│   ├── __init__.py
│   ├── app.py
│   └── pyproject.toml
├── samconfig.toml
└── template.yaml

pyproject.toml 檔案:

[project] name = "my-function" version = "0.1.0" requires-python = ">=3.12" dependencies = [ "requests>=2.31.0", "boto3>=1.28.0", ]

在我們的 AWS SAM 範本中,我們的 Python 函數定義如下:

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 ... Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.12 Architectures: - x86_64 Metadata: BuildMethod: python-uv

接下來,我們會執行 sam build來建置應用程式並準備部署。 AWS SAM CLI 會建立.aws-sam目錄,並在其中組織我們的建置成品。我們的函數相依性是使用 安裝uv,並存放在 .aws-sam/build/HelloWorldFunction/

hello-python-uv$ sam build Starting Build use cache Build method "python-uv" is a beta feature. Please confirm if you would like to proceed You can also enable this beta feature with "sam build --beta-features". [y/N]: y Experimental features are enabled for this session. Visit the docs page to learn more about the AWS Beta terms https://aws.amazon.com/service-terms/. Cache is invalid, running build and copying resources for following functions (HelloWorldFunction) Building codeuri: /Users/.../hello-python-uv/hello_world runtime: python3.12 metadata: {'BuildMethod': 'python-uv'} architecture: x86_64 functions: HelloWorldFunction Running PythonUvBuilder:UvBuild Running PythonUvBuilder:CopySource Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Validate SAM template: sam validate [*] Invoke Function: sam local invoke [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch [*] Deploy: sam deploy --guided
注意

python-uv 建置方法會依 Metadata區段中的函數設定。範本中的每個函數都可以使用不同的建置方法,可讓您在相同 AWS SAM 範本中混合 uv型函數與 pip型函數。如果未指定建置方法,預設pip會使用 。