

# Tutorial: transformación de datos para su aplicación con S3 Object Lambda
<a name="tutorial-s3-object-lambda-uppercase"></a>

**nota**  
A partir del 7 de noviembre de 2025, S3 Object Lambda solo estará disponible para los clientes actuales que utilizan el servicio actualmente, así como para socios seleccionados de la red de socios de AWS (APN). Para obtener más información sobre capacidades similares a las de S3 Object Lambda, haga clic aquí: [Cambio de disponibilidad de Amazon S3 Object Lambda](https://docs.aws.amazon.com/AmazonS3/latest/userguide/amazons3-ol-change.html).

Cuando almacena datos en Amazon S3, puede compartirlos fácilmente para utilizarlos en varias aplicaciones. Sin embargo, cada aplicación puede tener requisitos únicos de formato de datos y es posible que necesite modificar o procesar sus datos para un caso de uso específico. Por ejemplo, un conjunto de datos creado por una aplicación de comercio electrónico puede incluir información de identificación personal (PII). Cuando se procesan los mismos datos para análisis, esta PII no es necesaria y debe ser borrada. Sin embargo, si se utiliza el mismo conjunto de datos para una campaña de marketing, es posible que deba enriquecer los datos con detalles adicionales, como información de la base de datos de fidelización del cliente.

Con [S3 Object Lambda](https://aws.amazon.com/s3/features/object-lambda), puede agregar su propio código para procesar los datos recuperados de S3 antes de devolverlos a una aplicación. En concreto, puede configurar una función AWS Lambda y asociarla a un punto de acceso de S3 Object Lambda. Cuando una aplicación envía [solicitudes GET de S3 estándar](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) a través del punto de acceso de S3 Object Lambda, se invoca la función de Lambda especificada para procesar cualquier dato recuperado de un origen de datos subyacente a través del punto de acceso de S3 compatible. Luego, el punto de acceso de S3 Object Lambda devuelve el resultado transformado a la aplicación. Puede crear y ejecutar sus propias funciones Lambda personalizadas, adaptando la transformación de datos de S3 Object Lambda a su caso de uso específico, todo ello sin necesidad de cambios en suAplicaciones de.

![\[Diagrama de flujo de trabajo de S3 Object Lambda.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/ol-example-image-global.png)


**Objetivo**  
En este aprendizaje, aprenderá a agregar código personalizado a las solicitudes GET S3 estándar para modificar el objeto solicitado recuperado de S3 de modo que el objeto se ajuste a las necesidades del cliente o aplicación solicitante. Específicamente, aprenderá cómo transformar todo el texto del objeto original almacenado en un bucket de S3 a mayúsculas a través de S3 Object Lambda. 

**nota**  
En este tutorial, se usa código Python para transformar los datos. Para ver ejemplos sobre cómo usar otros AWS SDK, consulte [Transformación de datos para su aplicación con S3 Object Lambda](https://docs.aws.amazon.com/code-library/latest/ug/lambda_example_cross_ServerlessS3DataTransformation_section.html) en la biblioteca de ejemplos de código de AWS SDK. 

**Topics**
+ [

## Requisitos previos
](#ol-upper-prerequisites)
+ [

## Paso 1: Crear un bucket de S3
](#ol-upper-step1)
+ [

## Paso 2: cargar un archivo al bucket de S3.
](#ol-upper-step2)
+ [

## Paso 3: Crear un punto de acceso de S3
](#ol-upper-step3)
+ [

## Paso 4: Crear una función de Lambda
](#ol-upper-step4)
+ [

## Paso 5: Configurar una política de IAM para el rol de ejecución de su función de Lambda
](#ol-upper-step5)
+ [

## Paso 6: Crear un punto de acceso de S3 Object Lambda
](#ol-upper-step6)
+ [

## Paso 7: Ver los datos transformados
](#ol-upper-step7)
+ [

## Paso 8: Eliminación
](#ol-upper-step8)
+ [

## Siguientes pasos
](#ol-upper-next-steps)

## Requisitos previos
<a name="ol-upper-prerequisites"></a>

Antes de empezar este tutorial, debe tener una Cuenta de AWS en la que puede iniciar sesión como usuario de AWS Identity and Access Management (IAM) con los permisos correctos. También debe instalar la versión 3.8 o posterior de Python.

**Topics**
+ [

### Crear un usuario de IAM con permisos en la Cuenta de AWS (consola)
](#ol-upper-prerequisites-account)
+ [

### Instale Python 3.8 o posterior en su equipo local
](#ol-upper-prerequisites-python)

### Crear un usuario de IAM con permisos en la Cuenta de AWS (consola)
<a name="ol-upper-prerequisites-account"></a>

Puede crear un usuario de IAM para el tutorial. Para completar este tutorial, el usuario de IAM debe adjuntar las siguientes políticas de IAM para acceder a los recursos de AWS y realizar acciones específicas. Para obtener más información acerca de cómo crear un usuario de IAM, consulte [Creación del primer grupo de usuarios y administradores de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) en la *guía del usuario de IAM*.

El usuario de IAM requiere las siguientes directivas:
+ [AmazonS3FullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3FullAccess$jsonEditor): otorga permisos a todas las acciones de Amazon S3, incluidos los permisos para crear y utilizar un punto de acceso de Object Lambda. 
+ [AWSLambda\$1FullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSLambda_FullAccess$jsonEditor)— Otorga permisos a todas las acciones de Lambda. 
+ [IAMFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/IAMFullAccess$jsonEditor)— Otorga permisos a todas las acciones de IAM. 
+ [IAMAccessAnalyzerReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/IAMAccessAnalyzerReadOnlyAccess$jsonEditor): concede permisos para leer toda la información de acceso proporcionada por IAM Access Analyzer. 
+ [CloudWatchLogsFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/CloudWatchLogsFullAccess$jsonEditor): concede acceso total a Registros de CloudWatch. 

**nota**  
Para simplificar, este tutorial crea y utiliza un usuario de IAM. Después de completar este tutorial, recuerde [Eliminación del rol de IAM](#ol-upper-step8-delete-user). Para uso en producción, le recomendamos que siga las [Prácticas recomendadas de seguridad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la *Guía del usuario de IAM*. Una práctica recomendada exige que los usuarios humanos utilicen la federación con un proveedor de identidades para acceder a AWS con credenciales temporales. Otra práctica recomendada es exigir a las cargas de trabajo que utilicen credenciales temporales con roles de IAM para acceder a AWS. Para obtener información sobre el uso de AWS IAM Identity Center para crear usuarios con credenciales temporales, consulte [Introducción](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html) en la *Guía del usuario de AWS IAM Identity Center*.   
Este tutorial también utiliza políticas administradas de AWS de acceso completo. Para uso en producción, le recomendamos que otorgue solo los permisos mínimos necesarios para su caso de uso, de acuerdo con las [prácticas recomendadas de seguridad](security-best-practices.md#security-best-practices-prevent).

### Instale Python 3.8 o posterior en su equipo local
<a name="ol-upper-prerequisites-python"></a>

Utilice el siguiente procedimiento para instalar Python 3.8 o posterior en su equipo local. Para obtener instrucciones de instalación, consulte la página [Downloading Python](https://wiki.python.org/moin/BeginnersGuide/Download) en la *Guía para principiantes* de Python.

1. Abra su terminal o shell local y ejecute el siguiente comando para determinar si Python ya está instalado y, en caso afirmativo, qué versión está instalada. 

   ```
   python --version
   ```

1. Si no dispone de Python 3.8 ni posterior, descargue el [Instalador oficial](https://www.python.org/downloads/) de Python 3.8 o posterior que sea adecuado para su máquina local. 

1. Ejecute el instalador haciendo doble clic en el archivo descargado y siga los pasos para completar la instalación. 

   Para **Usuarios de Windows**, elija **Agregar Python 3.X a PATH** en el asistente de instalación antes de elegir **Instalar ahora**. 

1. Reinicie el terminal cerrándolo y volviéndolo a abrirlo. 

1. Ejecute el siguiente comando para verificar que Python 3.8 o posterior se instaló correctamente. 

   Para **Usuarios de macOS**, ejecute este comando: 

   ```
   python3 --version
   ```

   Para **usuarios de Windows**, ejecute este comando: 

   ```
   python --version
   ```

1. Ejecute el siguiente comando para comprobar que el administrador de paquetes pip3 está instalado. Si ve un número de versión pip y python 3.8 o posterior en la respuesta del comando, eso significa que el gestor de paquetes pip3 se instaló correctamente.

   ```
   pip --version
   ```

## Paso 1: Crear un bucket de S3
<a name="ol-upper-step1"></a>

Cree un bucket para almacenar los datos originales que tiene previsto transformar. 

**nota**  
Los puntos de acceso se pueden adjuntar a otro origen de datos, como un volumen de Amazon FSx para OpenZFS. Sin embargo, este tutorial utiliza un punto de acceso compatible adjunto a un bucket de S3.

**Creación de un bucket**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets**.

1. Elija **Crear bucket**. 

   Se abrirá la página **Crear bucket**.

1. En **Nombre de bucket**, escriba el nombre del bucket (por ejemplo: **tutorial-bucket**). 

   Para obtener más información acerca de las reglas de nomenclatura del bucket de Amazon S3, consulte [Reglas de nomenclatura de buckets de uso general](bucketnamingrules.md).

1. En **Región**, elija la Región de AWS en la que desea que se encuentre el bucket. 

   Para obtener más información acerca de bucket Region, consulte [Información general de los buckets de uso general](UsingBucket.md).

1. Para **Configuración de Block Public Access para este bucket**, conserve la configuración predeterminada (**Bloquear *todo *acceso público** está habilitado). 

   Le recomendamos que deje todas las configuraciones habilitadas a menos que sepa que necesita desactivar una o varias de ellas para su caso de uso, como alojar un sitio web público. Para obtener más información acerca del bloqueo del acceso público, consulte [Bloquear el acceso público a su almacenamiento de Amazon S3](access-control-block-public-access.md).

1. Mantenga la configuración restante establecida en los valores predeterminados. 

   (Opcional) Si desea configurar opciones de bucket adicionales para el caso de uso específico, consulte [Creación de un bucket de uso general](create-bucket-overview.md).

1. Elija **Crear bucket**.

## Paso 2: cargar un archivo al bucket de S3.
<a name="ol-upper-step2"></a>

Cargue el archivo en un bucket de &S3;. Este archivo de texto contiene los datos originales que transformará a mayúsculas más adelante en este tutorial. 

Por ejemplo, puede cargar un archivo `tutorial.txt` que contiene el siguiente texto:

```
Amazon S3 Object Lambda Tutorial:
You can add your own code to process data retrieved from S3 before 
returning it to an application.
```

**Para cargar un archivo en un bucket**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets**.

1. En la lista **Buckets**, elija el nombre del bucket que creó en el[Paso 1](#ol-upper-step1) (por ejemplo: **tutorial-bucket**) para cargar el archivo.

1. En la pestaña **Objetos** del bucket, elija **Cargar**.

1. En la página **Cargar**, en **Archivos y carpetas**, elija **Añadir archivos**.

1. Seleccione un archivo que cargar y luego seleccione **Abrir**. Por ejemplo, puede cargar el archivo de ejemplo `tutorial.txt` mencionado anteriormente.

1. Seleccione **Cargar**.

## Paso 3: Crear un punto de acceso de S3
<a name="ol-upper-step3"></a>

Para utilizar un punto de acceso de S3 Object Lambda para acceder y transformar los datos originales, debe crear un punto de acceso de S3 y asociarlo con el bucket de S3 que creó en el [Paso 1](#ol-upper-step1). El punto de acceso debe estar en la misma Región de AWS que los objetos que desea transformar.

Más adelante en este tutorial, utilizará este punto de acceso como punto de acceso de soporte para su punto de acceso de Object Lambda. 

**Para crear un punto de acceso**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación, elija **Puntos de acceso**.

1. En la página de **Puntos de acceso**, elija **Crear punto de acceso**.

1. Introduzca el nombre que desee (por ejemplo: **tutorial-access-point**) para el punto de acceso en el campo **Nombre del punto de acceso**.

   Para obtener más información acerca de cómo nombrar los puntos de acceso, consulte [Reglas de nomenclatura para los puntos de acceso](access-points-restrictions-limitations-naming-rules.md#access-points-names).

1. En el campo **Origen de datos**, escriba el nombre del bucket que creó en el [Paso 1](#ol-upper-step1) (por ejemplo, **tutorial-bucket**). A continuación, asocie dicha política al bucket de S3. 

   (Opcional) Puede elegir **Examinar S3)** para explorar su cuenta y buscar buckets. Si elige **Examinar S3**, seleccione el bucket que le interese y seleccione **Elegir ruta** para rellenar el campo **Nombre del bucket** con el nombre del bucket en cuestión.

1. Para **Origen de la red**, elija **Internet**. 

   Para obtener más información acerca de los orígenes de red para los puntos de acceso, consulte [Crear puntos de acceso restringidos a una nube privada virtual](access-points-vpc.md).

1. Todas las configuraciones de bloqueo de acceso público están habilitadas de forma predeterminada para los puntos de acceso. Le recomendamos que deje habilitada **Block *all* public access** (Bloquear todo el acceso público).

   Para obtener más información, consulte [Administración del acceso público a los puntos de acceso para buckets de propósito general](access-points-bpa-settings.md).

1. En el resto de configuraciones de punto de acceso, mantenga la configuración predeterminada.

   (Opcional) Puede modificar la configuración del punto de acceso para admitir el caso de uso. En este tutorial, le recomendamos que mantenga la configuración predeterminada. 

   (Opcional) Si necesita administrar el acceso al punto de acceso, puede especificar una directiva de punto de acceso. Para obtener más información, consulte [Ejemplos de políticas de puntos de acceso](access-points-policies.md#access-points-policy-examples). 

1. Elija **Crear punto de acceso**.

## Paso 4: Crear una función de Lambda
<a name="ol-upper-step4"></a>

Para transformar los datos originales, cree una función de Lambda para utilizarla con el punto de acceso de S3 Object Lambda. 

**Topics**
+ [

### Escribir el código de función de Lambda y crear un paquete de implementación con un entorno virtual
](#ol-upper-step4-write-lambda)
+ [

### Crear una función de Lambda con un rol de ejecución (consola)
](#ol-upper-step4-create-function)
+ [

### Implemente su código de función de Lambda con archivos .zip y configure la función de Lambda (consola)
](#ol-upper-step4-deploy-function)

### Escribir el código de función de Lambda y crear un paquete de implementación con un entorno virtual
<a name="ol-upper-step4-write-lambda"></a>

1. En el equipo local, cree una carpeta con el nombre de carpeta `object-lambda` para entorno virtual para utilizarlo más adelante en este tutorial.

1. En la carpeta `object-lambda`, cree un archivo con una función de Lambda que cambie todo el texto del objeto original a mayúsculas. Por ejemplo, puede utilizar la siguiente función escrita en Python. Guarde esta función en un archivo llamado `transform.py`. 

   ```
   import boto3
   import requests
   from botocore.config import Config
   
   # This function capitalizes all text in the original object
   def lambda_handler(event, context):
       object_context = event["getObjectContext"]
       # Get the presigned URL to fetch the requested original object 
       # from S3
       s3_url = object_context["inputS3Url"]
       # Extract the route and request token from the input context
       request_route = object_context["outputRoute"]
       request_token = object_context["outputToken"]
       
       # Get the original S3 object using the presigned URL
       response = requests.get(s3_url)
       original_object = response.content.decode("utf-8")
   
       # Transform all text in the original object to uppercase
       # You can replace it with your custom code based on your use case
       transformed_object = original_object.upper()
   
       # Write object back to S3 Object Lambda
       s3 = boto3.client('s3', config=Config(signature_version='s3v4'))
       # The WriteGetObjectResponse API sends the transformed data
       # back to S3 Object Lambda and then to the user
       s3.write_get_object_response(
           Body=transformed_object,
           RequestRoute=request_route,
           RequestToken=request_token)
   
       # Exit the Lambda function: return the status code  
       return {'status_code': 200}
   ```
**nota**  
La función de Lambda de ejemplo anterior carga todo el objeto solicitado en la memoria antes de transformarlo y devolverlo al cliente. Alternativamente, puede transmitir el objeto desde S3 para evitar cargar todo el objeto en la memoria. Este enfoque puede resultar útil cuando se trabaja con objetos grandes. Para obtener más información acerca del streaming de respuestas con puntos de acceso Object Lambda, consulte los ejemplos de transmisión en [Trabajar con solicitudes `GetObject` en Lambda](olap-writing-lambda.md#olap-getobject-response).

   Cuando está escribiendo una función de Lambda para su uso con un punto de acceso de S3 Object Lambda, la función se basa en el contexto de evento de entrada que S3 Object Lambda proporciona a la función de Lambda. S3 Object Lambda proporciona contexto sobre la solicitud que se realiza en el evento pasado a Lambda. Contiene los parámetros que utiliza para crear la función de Lambda.

   Los campos utilizados para crear la función de Lambda anterior son los siguientes: 

   El campo de `getObjectContext` se refiere a los detalles de entrada y salida de las conexiones a Amazon S3 y S3 Object Lambda. Tiene los subcampos siguientes:
   + `inputS3Url`— URL prefirmada que la función de Lambda puede utilizar para descargar el objeto original desde el punto de acceso de soporte. Al utilizar una URL prefirmada, la función de Lambda no necesita tener permisos de lectura de Amazon S3 para recuperar el objeto original y solo puede acceder al objeto procesado por cada invocación.
   + `outputRoute` ‐ un token de enrutamiento que se agrega a la URL de S3 Object Lambda cuando la función de Lambda llama a `WriteGetObjectResponse`.
   + `outputToken`: un token utilizado por S3 Object Lambda para hacer coincidir el`WriteGetObjectResponse`con la persona que llama original al enviar de vuelta el objeto transformado.

   Para obtener más información acerca de todos los campos del contexto de evento, consulte [Formato y uso del contexto del evento](olap-event-context.md) y [Escritura de funciones de Lambda para puntos de acceso de S3 Object Lambda](olap-writing-lambda.md).

1. En el terminal local, introduzca el siguiente comando para instalar el paquete `virtualenv`:

   ```
   python -m pip install virtualenv
   ```

1. En su terminal local, abra el `object-lambda` que creó anteriormente y, a continuación, escriba el siguiente comando para crear e inicializar un entorno virtual denominado `venv`.

   ```
   python -m virtualenv venv
   ```

1. Para activar el entorno virtual, ingrese el siguiente comando para ejecutar el archivo `activate` desde la carpeta del entorno:

   Para **Usuarios de macOS**, ejecute este comando:

   ```
   source venv/bin/activate
   ```

   En **Windows**, ejecute este comando:

   ```
   .\venv\Scripts\activate
   ```

   El símbolo del sistema cambia para mostrar **(venv)** que indica que el entorno virtual está activo.

1. Para instalar las bibliotecas requeridas, ejecute los siguientes comandos línea por línea en el `venv` entorno virtual.

   Estos comandos instalan versiones actualizadas de las dependencias de su `lambda_handler` función de Lambda. Estas dependencias son AWS SDK para Python (Boto3) y el módulo de solicitudes.

   ```
   pip3 install boto3
   ```

   ```
   pip3 install requests
   ```

1. Para desactivar el entorno virtual, puede ejecutar el siguiente comando:

   ```
   deactivate
   ```

1. Para crear un paquete de implementación con las bibliotecas instaladas como un archivo `.zip` llamado `lambda.zip` en la raíz del directorio `object-lambda`, ejecute los siguientes comandos línea por línea en el terminal local.
**sugerencia**  
Es posible que sea necesario ajustar los siguientes comandos para que funcionen en su entorno concreto. Por ejemplo, una biblioteca puede aparecer en `site-packages` o `dist-packages`, y la primera carpeta podría ser `lib` o `lib64`. Además, la carpeta `python` puede tener un nombre con una versión de Python diferente. Puede utilizar el comando `pip show` para localizar un paquete específico.

   Para **Usuarios de macOS** ejecute estos comandos:

   ```
   cd venv/lib/python3.8/site-packages 
   ```

   ```
   zip -r ../../../../lambda.zip .
   ```

   Para **Usuarios de Windows** ejecute estos comandos:

   ```
   cd .\venv\Lib\site-packages\ 
   ```

   ```
   powershell Compress-Archive * ../../../lambda.zip
   ```

   El último comando guarda el paquete de implementación en la raíz del directorio `object-lambda`.

1. Agregue archivos de código de función `transform.py` a la raíz del paquete de implementación.

   Para **Usuarios de macOS** ejecute estos comandos:

   ```
   cd ../../../../ 
   ```

   ```
   zip -g lambda.zip transform.py
   ```

   Para **Usuarios de Windows** ejecute estos comandos: 

   ```
   cd ..\..\..\
   ```

   ```
   powershell Compress-Archive -update transform.py lambda.zip
   ```

   Cuando realice este paso, tendrá la siguiente estructura de directorio:

   ```
   lambda.zip$
     │ transform.py
     │ __pycache__
     | boto3/
     │ certifi/
     │ pip/
     │ requests/
     ...
   ```

### Crear una función de Lambda con un rol de ejecución (consola)
<a name="ol-upper-step4-create-function"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

   

1. En el panel de navegación izquierdo, elija **Funciones**.

1. Elija **Create function** (Crear función).

1. Elija **Crear desde cero**.

1. Bajo **Información básica**, haga lo siguiente:

   1. En **Nombre de la función**, introduzca **tutorial-object-lambda-function**.

   1. En **Tiempo de ejecución**, elija **Python 3.8** o una versión posterior.

1. Expanda la sección **Cambiar el rol de ejecución predeterminado**. En **Rol de ejecución**, elija **Crear un nuevo rol con permisos básicos de Lambda**.

   En el [Paso 5](#ol-upper-step5) más adelante en este tutorial, adjunte el archivo**AmazonS3ObjectLambdaExecutionRolePolicy** a este rol de ejecución de la función de Lambda. 

1. Mantenga la configuración restante establecida en los valores predeterminados.

1. Seleccione **Creación de función**.

### Implemente su código de función de Lambda con archivos .zip y configure la función de Lambda (consola)
<a name="ol-upper-step4-deploy-function"></a>

1. En la consola AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/), elija **Funciones** En el panel de navegación izquierdo. 

1. Elija la función de Lambda que creó anteriormente (por ejemplo, **tutorial-object-lambda-function**). 

1. En la página de detalles de la función de Lambda, elija la pestaña **Code (Código)**. En el sector **Code Source (Código fuente)**, seleccione **Upload from (Cargar desde)** y luego **.zip file (archivo .zip)**.

1. Seleccione **Upload (Cargar)** para seleccionar el archivo `.zip` local.

1. Elija el archivo `lambda.zip` que creó anteriormente y, a continuación, elija **Open (Abrir)**.

1. Seleccione **Save (Guardar)**.

1. En la sección **Runtime settings (Configuración de tiempo de ejecución)**, elija **Edit (Editar)**. 

1. En la página **Edit runtime settings (Editar la configuración de tiempo de ejecución)**, confirme que **Runtime (Tiempo de ejecución):** toma el valor **Python 3.8** o una versión posterior. 

1. Para decirle al tiempo de ejecución de Lambda qué método de controlador en su código de función de Lambda invocar, ingrese **transform.lambda\$1handler**: para**Handler (Controlador):**.

   Al configurar una función en Python, el valor de la configuración del controlador es el nombre del archivo y el nombre del módulo del controlador, separados por un punto. Por ejemplo, `transform.lambda_handler` llama al método `lambda_handler` definido en `transform.py`.

1. Seleccione **Save**.

1. (Opcional) En la página de detalles de la función de Lambda, seleccione la pestaña **Configuración**. En el panel de navegación izquierdo, elija **Configuración general** y, a continuación, elija **Editar**. En el campo **Tiempo de espera**, introduzca **1** min **0** s. Mantenga la configuración restante establecida en los valores predeterminados y elija **Guardar**.

   **Tiempo de espera**: período durante el cual Lambda permite que se ejecute una función antes de pararla. El valor predeterminado es de 3 segundos. La duración máxima de una función de Lambda utilizada por S3 Object Lambda es de 60 segundos. Los precios se basan en la cantidad de memoria configurada y en la cantidad de tiempo durante la que se ejecuta el código.

## Paso 5: Configurar una política de IAM para el rol de ejecución de su función de Lambda
<a name="ol-upper-step5"></a>

Para habilitar la función de Lambda para proporcionar datos personalizados y encabezados de respuesta a `GetObject`, el rol de ejecución de la función de Lambda debe tener permisos de IAM para llamar a la API de `WriteGetObjectResponse`.

**Para asociar una política de IAM a su función de Lambda**



1. En la consola AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/), elija **Functions (Funciones)** en el panel de navegación izquierdo. 

1. Elija la función que creó en el [paso 4](#ol-upper-step4) (por ejemplo: **tutorial-object-lambda-function**).

1. En la página de detalles de su función de Lambda, elija la opción **Configuration (Configuración)** y, a continuación, elija **Permissions (Permisos)** en el panel de navegación izquierdo. 

1. En **Execution role (Rol de ejecución)**, elija el enlace del **Role name (Nombre del rol)**. Abra la consola de IAM. 

1. En la página **Summary (Resumen)** de la consola de IAM para el rol de ejecución de la función de Lambda, elija la pestaña **Permissions** (Permisos). A continuación, en el menú **Add Permissions** (Agregar permisos), elija **Attach policies** (Asociar políticas).

1. En la página **Attach Permissions (Asociar permisos)**, introduzca **AmazonS3ObjectLambdaExecutionRolePolicy** en el campo de búsqueda para filtrar la lista de políticas. Active la casilla de verificación que hay junto al nombre del cuadro de diálogo**AmazonS3ObjectLambdaExecutionRolePolicy**política. 

1. Seleccione **Asociar políticas**. 

## Paso 6: Crear un punto de acceso de S3 Object Lambda
<a name="ol-upper-step6"></a>

Un punto de acceso de S3 Object Lambda proporciona la flexibilidad para invocar una función de Lambda directamente desde una solicitud GET S3 para que la función pueda procesar datos recuperados de un punto de acceso de S3. Al crear y configurar un punto de acceso de S3 Object Lambda, debe especificar la función de Lambda para invocar y proporcionar el contexto de evento en formato JSON como parámetros personalizados para utilizar Lambda.

**Para crear un punto de acceso de S3 Object Lambda**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación del lado izquierdo de la consola, elija **Object Lambda Access Points (Puntos de acceso de Object Lambda)**.

1. En la página **Object Lambda Access Points (Puntos de acceso Object Lambda)**, elija **Create Object Lambda Access Point (Crear un punto de acceso de Object Lambda)**.

1. En **Nombre del punto de acceso del objeto Lambda**, introduzca el nombre que desea utilizar para el punto de acceso del objeto Lambda (por ejemplo: **tutorial-object-lambda-accesspoint**). 

1. Para **Supporting Access Point (Soporte de punto de acceso)**, introduzca o busque el punto de acceso estándar que ha creado en el [Paso 3](#ol-upper-step3)(por ejemplo: **tutorial-access-point**), y luego elija **Choose Supporting Access Point (Elegir soporte de punto de acceso)**. 

1. Para las **S3 APIs** (API de S3), para recuperar objetos del bucket de S3 para que la función de Lambda los procese, seleccione **GetObject**.

1. Para **Invoke Lambda function (Invocación de una función de Lambda)**, puede elegir una de las dos opciones siguientes. 
   + Seleccione **Elegir entre las funciones de la cuenta** y, a continuación, elija la función de Lambda que ha creado en el [Paso 4](#ol-upper-step4) (por ejemplo, **tutorial-object-lambda-function**) desde la lista desplegable de **Función de Lambda**.
   + Elegir **Enter ARN (Ingresar ARN)** y, a continuación, introduzca el nombre de recurso de Amazon (ARN) de la función de Lambda que ha creado en el [Paso 4](#ol-upper-step4).

1. Para **Lambda function version (Versión de función de Lambda)**, elija **\$1LATEST** (la última versión de la función de Lambda que ha creado en el [Paso 4](#ol-upper-step4)).

1. (Opcional) Si necesita su función de Lambda para reconocer y procesar solicitudes GET con encabezados de rango y número de pieza, seleccione **Lambda function supports requests using range (La función de Lambda admite solicitudes usando rango)** y **Lambda function supports requests using part numbers (La función de Lambda admite solicitudes usando números de pieza)**. De lo contrario, desactive estas dos casillas de verificación.

   Para obtener más información acerca de cómo utilizar números de rango o rango con S3 Object Lambda, consulte [Trabajar con encabezados Range y partNumber](range-get-olap.md).

1. (Opcional) En **Payload - *optional* (Carga - opcional)**, agregue texto JSON para proporcionar información adicional a su función de Lambda.

   Una carga es texto JSON opcional que puede proporcionar a su función de Lambda como entrada para todas las invocaciones procedentes de un punto de acceso de S3 Object Lambda específico. Puede configurar cargas con diferentes parámetros para diferentes puntos de acceso Object Lambda que invoquen la misma función de Lambda, ampliando así la flexibilidad de su función de Lambda.

   Para obtener más información acerca de patones de rutas, consulte [Formato y uso del contexto del evento](olap-event-context.md).

1. (Opcional) Para las **Métricas de solicitudes: *opcional***, elija **Deshabilitar** o **Habilitar** para agregar la supervisión de Amazon S3 al punto de acceso de Object Lambda. Las métricas de solicitud se facturan según la tarifa de Amazon CloudWatch estándar. Para obtener más información, consulte los [precios de CloudWatch](https://aws.amazon.com/cloudwatch/pricing/).

1. En **Object Lambda Access Point policy - *optional* (Política de punto de acceso Object Lambda -opcional)**, conserve la configuración predeterminada. 

   (Opcional) Ejecute para establecer la política de recursos. Esta política de recursos concede el permiso de la API `GetObject` para usar el punto de acceso del objeto Lambda específico.

1. Mantenga la configuración restante establecida en los valores predeterminados y elija **Create Object Lambda Access Point (Creación de punto de acceso Object Lambda)**.

## Paso 7: Ver los datos transformados
<a name="ol-upper-step7"></a>

Ahora, S3 Object Lambda está listo para transformar sus datos para su caso de uso. En este tutorial, S3 Object Lambda transforma todo el texto de su objeto a mayúsculas.

**Topics**
+ [

### Visualización de los datos transformados en el punto de acceso de S3 Object Lambda
](#ol-upper-step7-check-data)
+ [

### Ejecución de una secuencia de comandos de Python para imprimir los datos originales y transformados
](#ol-upper-step7-python-print)

### Visualización de los datos transformados en el punto de acceso de S3 Object Lambda
<a name="ol-upper-step7-check-data"></a>

Cuando solicita recuperar un archivo a través de su punto de acceso de S3 Object Lambda, cree una llamada de la API `GetObject` a S3 Object Lambda. S3 Object Lambda invoca la función de Lambda para transformar sus datos, y luego devuelve los datos transformados como la respuesta a la llamada a la API estándar S3 `GetObject`.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación, elija **Object Lambda Access Points (Puntos de acceso de Object Lambda)**.

1. En la página **Puntos de acceso del objeto lambda**, elija el punto de acceso de S3 Object Lambda que ha creado en el [Paso 6](#ol-upper-step6) (por ejemplo, **tutorial-object-lambda-accesspoint**).

1. En la pestaña **Objetos** de su punto de acceso de S3 Object Lambda, seleccione el archivo que tenga el mismo nombre (por ejemplo, `tutorial.txt`) como el que cargó en el bucket de S3 en el [Paso 2](#ol-upper-step2). 

   Este archivo debe contener todos los datos transformados.

1. Para ver los datos transformados, elija **Open (Abrir) ** o **Download (Descargar)**.

### Ejecución de una secuencia de comandos de Python para imprimir los datos originales y transformados
<a name="ol-upper-step7-python-print"></a>

Puede utilizar S3 Object Lambda con sus aplicaciones existentes. Para ello, actualice la configuración de la aplicación para utilizar el nuevo ARN de punto de acceso de S3 Object Lambda que creó en el [Paso 6](#ol-upper-step6) para recuperar datos desde S3.

El siguiente ejemplo de secuencia de comandos de Python imprime tanto los datos originales del bucket de S3 como los datos transformados desde el punto de acceso de S3 Object Lambda. 

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación, elija **Object Lambda Access Points (Puntos de acceso de Object Lambda)**.

1. En la página **Puntos de acceso del objeto Lambda**, elija el botón de opción situado a la izquierda del punto de acceso de S3 Object Lambda que ha creado en el [Paso 6](#ol-upper-step6)(por ejemplo, **tutorial-object-lambda-accesspoint**).

1. Seleccionar **Copy ARN (Copiar ARN)**.

1. Guarde el ARN para utilizarlo más tarde.

1. Escriba un script de Python en su máquina local para imprimir los datos originales (por ejemplo, `tutorial.txt`) de su S3 Bucket y los datos transformados (por ejemplo, `tutorial.txt`) desde el punto de acceso de S3 Object Lambda). Puede realizar una prueba con el siguiente script de ejemplo. 

   ```
   import boto3
   from botocore.config import Config
   
   s3 = boto3.client('s3', config=Config(signature_version='s3v4'))
   
   def getObject(bucket, key):
       objectBody = s3.get_object(Bucket = bucket, Key = key)
       print(objectBody["Body"].read().decode("utf-8"))
       print("\n")
   
   print('Original object from the S3 bucket:')
   # Replace the two input parameters of getObject() below with 
   # the S3 bucket name that you created in Step 1 and 
   # the name of the file that you uploaded to the S3 bucket in Step 2
   getObject("tutorial-bucket", 
             "tutorial.txt")
   
   print('Object transformed by S3 Object Lambda:')
   # Replace the two input parameters of getObject() below with 
   # the ARN of your S3 Object Lambda Access Point that you saved earlier and
   # the name of the file with the transformed data (which in this case is
   # the same as the name of the file that you uploaded to the S3 bucket 
   # in Step 2)
   getObject("arn:aws:s3-object-lambda:us-west-2:111122223333:accesspoint/tutorial-object-lambda-accesspoint",
             "tutorial.txt")
   ```

1. Guarde su script de Python con un nombre personalizado (por ejemplo: `tutorial_print.py`) en la carpeta (por ejemplo: `object-lambda`) que ha creado en el [Paso 4](#ol-upper-step4) en el equipo local.

1. En el terminal local, ejecute el siguiente comando desde la raíz del directorio (por ejemplo: `object-lambda`) que ha creado en el [Paso 4](#ol-upper-step4).

   ```
   python3 tutorial_print.py
   ```

   Debería ver tanto los datos originales como los datos transformados (todo el texto en mayúsculas) a través del terminal. Debería ver algo parecido a lo siguiente.

   ```
   Original object from the S3 bucket:
   Amazon S3 Object Lambda Tutorial:
   You can add your own code to process data retrieved from S3 before 
   returning it to an application.
   
   Object transformed by S3 Object Lambda:
   AMAZON S3 OBJECT LAMBDA TUTORIAL:
   YOU CAN ADD YOUR OWN CODE TO PROCESS DATA RETRIEVED FROM S3 BEFORE 
   RETURNING IT TO AN APPLICATION.
   ```

## Paso 8: Eliminación
<a name="ol-upper-step8"></a>

Si transformó sus datos a través de S3 Object Lambda solo como un ejercicio de aprendizaje, elimine los recursos de AWS que asignó para dejar de acumular cargos. 

**Topics**
+ [

### Eliminar el punto de acceso del objeto Lambda
](#ol-upper-step8-delete-olap)
+ [

### Elimine el punto de acceso de S3
](#ol-upper-step8-delete-ap)
+ [

### Busque el rol de ejecución de la función de Lambda.
](#ol-upper-step8-delete-lambda-role)
+ [

### Para eliminar la función de Lambda
](#ol-upper-step8-delete-lambda-function)
+ [

### Eliminación del grupo de registros de CloudWatch
](#ol-upper-step8-delete-cloudwatch)
+ [

### Elimine el archivo original en el bucket de origen de S3
](#ol-upper-step8-delete-file)
+ [

### Eliminar el bucket de origen de S3
](#ol-upper-step8-delete-bucket)
+ [

### Eliminación del rol de IAM
](#ol-upper-step8-delete-user)

### Eliminar el punto de acceso del objeto Lambda
<a name="ol-upper-step8-delete-olap"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación, elija **Object Lambda Access Points (Puntos de acceso de Object Lambda)**.

1. En la página **Puntos de acceso del objeto Lambda**, elija el botón de opción situado a la izquierda del punto de acceso de S3 Object Lambda que ha creado en el [Paso 6](#ol-upper-step6) (por ejemplo, **tutorial-object-lambda-accesspoint**).

1. Elija **Delete** (Eliminar).

1. Confirme que desea eliminar el punto de acceso del objeto Lambda. Para ello, escriba su nombre en el campo de texto que aparece y elija **Eliminar**.

### Elimine el punto de acceso de S3
<a name="ol-upper-step8-delete-ap"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación, elija **Access Points (Puntos de acceso)**.

1. Desplácese hasta el punto de acceso que creó en el [Paso 3](#ol-upper-step3) (por ejemplo: **tutorial-access-point**) y elija el botón de opción situado junto al nombre del punto de acceso.

1. Elija **Eliminar**.

1. Confirme que desea eliminar el punto de acceso escribiendo su nombre en el campo de texto que aparece y elija **Delete (Eliminar)**.

### Busque el rol de ejecución de la función de Lambda.
<a name="ol-upper-step8-delete-lambda-role"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. En el panel de navegación izquierdo, elija **Funciones**.

1. Elija la función que creó en el [paso 4](#ol-upper-step4) (por ejemplo: **tutorial-object-lambda-function**).

1. En la página de detalles de su función de Lambda, elija la opción **Configuration (Configuración)** y, a continuación, elija **Permissions (Permisos)** en el panel de navegación izquierdo. 

1. En **Execution role (Rol de ejecución)**, elija el enlace del **Role name (Nombre del rol)**. Abra la consola de IAM.

1. En la página **Summary (Resumen)** de la consola de IAM de la página de ejecución de su función de Lambda, elija **Delete role (Eliminar rol)**.

1. En el cuadro de diálogo **Delete role (Eliminar rol)**, elija **Yes, delete (Sí, eliminar)**.

### Para eliminar la función de Lambda
<a name="ol-upper-step8-delete-lambda-function"></a>

1. En la consola AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/), elija **Funciones** en el panel de navegación izquierdo. 

1. Active la casilla de verificación situada a la izquierda del nombre de la función que ha creado en el [Paso 4](#ol-upper-step4) (por ejemplo: **tutorial-object-lambda-function**).

1. Elija **Acciones** y, a continuación, elija **Eliminar**.

1. En el cuadro de diálogo **Eliminar función**, elija **Eliminar**.

### Eliminación del grupo de registros de CloudWatch
<a name="ol-upper-step8-delete-cloudwatch"></a>

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación izquierdo, elija Registros, **Grupos de registros**.

1. Busque el grupo de registros cuyo nombre termina con la función de Lambda que creó en el [Paso 4](#ol-upper-step4)(por ejemplo: **tutorial-object-lambda-function**).

1. Active la casilla de verificación situada a la izquierda del nombre del grupo de registros.

1. Elija **Actions (Acciones)** y, a continuación, elija **Delete log group (Eliminar grupo de registro)**.

1. En el cuadro de diálogo **Delete log group(s)**, Eliminar grupo(s) de registro(s) elija **Delete** (Eliminar).

### Elimine el archivo original en el bucket de origen de S3
<a name="ol-upper-step8-delete-file"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets**.

1. En la lista **Nombre del bucket**, seleccione el nombre del bucket al que ha subido el archivo original en el [Paso 2](#ol-upper-step2) (por ejemplo: **tutorial-bucket**).

1. Seleccione la casilla de verificación situada a la izquierda de los nombres de los objetos que desea eliminar (por ejemplo: )., `tutorial.txt`).

1. Elija **Eliminar**.

1. En la página **Delete objects (Eliminar objetos)**, en la sección **Permanently delete objects? (¿Eliminar objetos de forma permanente?)**, confirme que desea eliminar este objeto escribiendo **permanently delete** en el cuadro de texto.

1. Elija **Eliminar objetos**.

### Eliminar el bucket de origen de S3
<a name="ol-upper-step8-delete-bucket"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets**.

1. En la lista **Buckets**, elija el botón de opción situado junto al nombre del bucket que ha creado en el [Paso 1](#ol-upper-step1) (por ejemplo: **tutorial-bucket**).

1. Elija **Eliminar**.

1. En la página **Delete bucket (Eliminar bucket)** confirme que desea eliminar el bucket introduciendo el nombre del bucket en el campo de texto y, a continuación, elija **Delete bucket (Eliminar bucket)**.

### Eliminación del rol de IAM
<a name="ol-upper-step8-delete-user"></a>

1. Inicie sesión en Consola de administración de AWS y abra la consola IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, elija **Roles** y, a continuación, seleccione la casilla de verificación junto al nombre del rol que desee eliminar.

1. En la parte superior de la página, elija **Delete user (Eliminar usuario)**.

1. En el cuadro de diálogo **Delete *user name*?** (¿Eliminar Nombre de usuario?), introduzca el nombre de usuario en el campo de entrada de texto para confirmar la eliminación del usuario. Elija **Eliminar**.

## Siguientes pasos
<a name="ol-upper-next-steps"></a>

Después de completar este tutorial, puede personalizar la función de Lambda para su caso de uso para modificar los datos devueltos por solicitudes GET de S3 estándar.

La siguiente es una lista de casos de uso comunes para S3 Object Lambda:
+ Enmascarar datos confidenciales para garantizar la seguridad y el cumplimiento.

  Para obtener más información, consulte [Tutorial: detección y redacción de datos de PII con S3 Object Lambda y Amazon Comprehend](tutorial-s3-object-lambda-redact-pii.md).
+ Filtrar ciertas filas de datos para entregar información específica.
+ Aumentar los datos con información de otros servicios o bases de datos.
+ Convertir entre formatos de datos, como convertir XML a JSON para la compatibilidad de aplicaciones.
+ Comprimir o descomprimir archivos a medida que se descargan.
+ Cambio de tamaño y marcas de agua de las imágenes

  Para obtener más información, consulte [Tutorial: Uso de S3 Object Lambda para agregar marcas de agua dinámicas a las imágenes a medida que se recuperan](https://aws.amazon.com/getting-started/hands-on/amazon-s3-object-lambda-to-dynamically-watermark-images/?ref=docs_gateway/amazons3/tutorial-s3-object-lambda-uppercase.html).
+ Implementar reglas de autorización personalizadas para acceder a los datos.

Para obtener más información acerca de S3 Object Lambda, consulte [Transformación de objetos con Lambda para objetos S3](transforming-objects.md).