

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Creación de funciones Lambda de Python con in uv AWS SAM
<a name="building-python-uv"></a>


|  | 
| --- |
| Esta función se encuentra en una versión preliminar AWS SAM y está sujeta a cambios. | 

Utilice la interfaz de línea de AWS Serverless Application Model comandos (AWS SAMCLI) con uv un rápido instalador y solucionador de paquetes de Python para crear sus AWS Lambda funciones de Python.

**Topics**
+ [Requisitos previos](#building-python-uv-prerequisites)
+ [Configuración AWS SAM para su uso con funciones Lambda de Python y uv](#building-python-uv-configure)
+ [Ejemplos](#building-python-uv-examples)

## Requisitos previos
<a name="building-python-uv-prerequisites"></a>

**Python**  
Para instalar Python, consulta [Descargar Python](https://www.python.org/downloads/) en el *sitio web de Python*.

**uv**  
 AWS SAMCLIRequiere la instalación de [https://docs.astral.sh/uv/](https://docs.astral.sh/uv/)un instalador y solucionador de paquetes de Python extremadamente rápido. Para obtener instrucciones sobre la instalación, consulta [Instalación](https://docs.astral.sh/uv/getting-started/installation/) en la *Documentación de uv*.

**Acceda a la característica beta de la CLI de AWS SAM.**  
Como esta característica está en versión preliminar, debes acceder usando uno de los siguientes métodos:  

1. Usa las variables de entorno: `SAM_CLI_BETA_PYTHON_UV=1`.

1. Añade lo siguiente a tu archivo `samconfig.toml`:

   ```
   [default.build.parameters]
   beta_features = true
   [default.sync.parameters]
   beta_features = true
   ```

1. Utiliza la opción `--beta-features` cuando utiliza un comando de la CLI de AWS SAM compatible. Por ejemplo:

   ```
   $ sam build --beta-features
   ```

1. Elija la opción `y` cuando la CLI de AWS SAM le pida que acceda. A continuación, se muestra un ejemplo:

   ```
   $ 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
   ```

## Configuración AWS SAM para su uso con funciones Lambda de Python y uv
<a name="building-python-uv-configure"></a>

### Paso 1: Configura tu AWS SAM plantilla
<a name="building-python-uv-configure-template"></a>

Configura tu AWS SAM plantilla con lo siguiente:
+ **BuildMethod** – `python-uv`.
+ **CodeUri**— ruta al directorio de códigos de funciones que contiene `pyproject.toml` o`requirements.txt`.
+ **Controlador**: su controlador de funciones (por ejemplo,`app.lambda_handler`).
+ **Runtime**: versión en tiempo de ejecución de Python (p. ej.,`python3.12`).

Este es un ejemplo de una AWS SAM plantilla configurada:

```
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
...
```

## Ejemplos
<a name="building-python-uv-examples"></a>

### Ejemplo de Hello World
<a name="building-python-uv-examples-hello"></a>

**En este ejemplo, creamos un ejemplo de aplicación Hello World utilizando Python uv como gestor de paquetes.**

uvpuede usar `pyproject.toml` o `requirements.txt` leer las dependencias. Si se proporcionan ambos, `sam build` leerá desde `requirements.txt` para ver las dependencias.

La siguiente es la estructura de nuestra aplicación Hello World:

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

Archivo `pyproject.toml`:

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

En nuestra AWS SAM plantilla, nuestra función de Python se define de la siguiente manera:

```
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
```

A continuación, ejecuta `sam build` para crear e implementar la aplicación. La CLI de AWS SAM crea un directorio de `.aws-sam` y organiza allí nuestros artefactos de construcción. Las dependencias de nuestras funciones se instalan uv y almacenan en`.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
```

**nota**  
El método de `python-uv` compilación se configura por función en la `Metadata` sección. Cada función de la plantilla puede utilizar un método de creación diferente, lo que te permite mezclar funciones uv basadas con funciones `pip` basadas en la misma AWS SAM plantilla. Si no se especifica ningún método de compilación, `pip` se utiliza de forma predeterminada.