

# Tutorial: Uso de Lambda con API Gateway
<a name="services-apigateway-tutorial"></a>

En este tutorial, se crea una API de REST a través la cual invoca una función de Lambda mediante una solicitud HTTP. Su función de Lambda realizará operaciones de creación, lectura, actualización y eliminación (CRUD) en una tabla de DynamoDB. Se proporciona esta función a modo de demostración, pero aprenderá a configurar una API de REST de API Gateway que pueda invocar cualquier función de Lambda.

![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/APIG_tut_resources.png)


El uso de API Gateway proporciona a los usuarios un punto de conexión seguro en HTTP para invocar la función de Lambda y puede ayudar a gestionar grandes volúmenes de llamadas a su función al limitar el tráfico, validar y autorizar automáticamente las llamadas a la API. API Gateway también proporciona controles de seguridad flexibles mediante AWS Identity and Access Management (IAM) y Amazon Cognito. Esto resulta útil para los casos de uso en los que se requiere una autorización previa para las llamadas a la aplicación.

**sugerencia**  
Lambda ofrece dos formas de invocar la función a través de un punto de conexión HTTP: API Gateway y URL de función de Lambda. Si no está seguro de cuál es el mejor método para el caso, consulte [Selección de un método para invocar una función de Lambda mediante una solicitud HTTP](apig-http-invoke-decision.md).

Para completar este tutorial, pasará por las siguientes etapas:

1. Cree y configure una función de Lambda en Python o Node.js para realizar operaciones en una tabla de DynamoDB.

1. Cree una API de REST en API Gateway para conectarse a la función de Lambda.

1. Cree una tabla de DynamoDB y pruébela con la función de Lambda en la consola.

1. Despliegue su API y pruebe la configuración completa con curl en una terminal.

Al completar estas etapas, aprenderá a utilizar API Gateway para crear un punto de conexión en HTTP que pueda invocar de forma segura una función de Lambda a cualquier escala. También aprenderá a implementar su API, a probarla en la consola y a enviar una solicitud HTTP mediante una terminal.

## Creación de una política de permisos
<a name="services-apigateway-tutorial-policy"></a>

Para poder crear un [rol de ejecución](lambda-intro-execution-role.md) para la función de Lambda, primero debe crear una política de permisos que permita a la función acceder a los recursos de AWS necesarios. Para este tutorial, la política le permite a Lambda realizar operaciones de CRUD en una tabla de DynamoDB y escribir en Registros de Amazon CloudWatch.

**Para crear la política de**

1. Abra la página de [Policies (Políticas)](https://console.aws.amazon.com/iam/home#/policies) de la consola de IAM.

1. Seleccione **Crear política**.

1. Elija la pestaña **JSON** y pegue la siguiente política personalizada en el editor JSON.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "Stmt1428341300017",
         "Action": [
           "dynamodb:DeleteItem",
           "dynamodb:GetItem",
           "dynamodb:PutItem",
           "dynamodb:Query",
           "dynamodb:Scan",
           "dynamodb:UpdateItem"
         ],
         "Effect": "Allow",
         "Resource": "*"
       },
       {
         "Sid": "",
         "Resource": "*",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents"
         ],
         "Effect": "Allow"
       }
     ]
   }
   ```

------

1. Elija **Siguiente: Etiquetas**.

1. Elija **Siguiente: Revisar**.

1. En **Review policy (Revisar política)**, para el **Name (Nombre)** de la política, ingrese **lambda-apigateway-policy**.

1. Elija **Crear política**.

## Creación de un rol de ejecución
<a name="services-apigateway-tutorial-role"></a>

Un [rol de ejecución](lambda-intro-execution-role.md) es un rol de AWS Identity and Access Management (IAM) que concede a la función de Lambda permiso para acceder a recursos y Servicios de AWS. Para permitir que la función realice operaciones en una tabla de DynamoDB, adjuntará la política de permisos que creó en el paso anterior.

**Para crear una función de ejecución y adjuntar su política de permisos personalizada**

1. Abra la [página Roles](https://console.aws.amazon.com/iam/home#/roles) en la consola de IAM.

1. Elija **Creación de rol**.

1. Para el tipo de entidad de confianza, seleccione **Servicio de AWS** y, para el caso de uso, elija **Lambda**.

1. Elija **Siguiente**.

1. En el cuadro de búsqueda de políticas, escriba **lambda-apigateway-policy**.

1. En los resultados de búsqueda, seleccione la política que ha creado (`lambda-apigateway-policy`), y luego **Next** (Siguiente).

1. En **Role details** (Detalles del rol), introduzca **lambda-apigateway-role** en **Role name** (Nombre del rol) y, luego, elija **Create role** (Crear rol).

## Crear la función de Lambda
<a name="services-apigateway-tutorial-function"></a>

1. Abra la [página Funciones](https://console.aws.amazon.com/lambda/home#/functions) de la consola de Lambda y elija **Crear función**.

1. Elija **Crear desde cero**.

1. En **Nombre de la función**, introduzca `LambdaFunctionOverHttps`.

1. En **tiempo de ejecución**, elija el tiempo de ejecución de Node.js o Python más reciente.

1. En **Permissions** (Permisos), expanda **Change default execution role**(Cambiar rol de ejecución predeterminado).

1. Elija **Usar un rol existente** y, a continuación, seleccione el rol **lambda-apigateway-role** que creó antes.

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

1. En el panel **Código de fuente**, sustituya el código predeterminado por el siguiente código de Node.js o Python.

------
#### [ Node.js ]

   La configuración de la `region` debe coincidir con la Región de AWS en la que se implementa la función y se [crea la tabla de DynamoDB](#services-apigateway-tutorial-table).

**Example index.mjs**  

   ```
   import { DynamoDBDocumentClient, PutCommand, GetCommand, 
            UpdateCommand, DeleteCommand} from "@aws-sdk/lib-dynamodb";
   import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
   
   const ddbClient = new DynamoDBClient({ region: "us-east-2" });
   const ddbDocClient = DynamoDBDocumentClient.from(ddbClient);
   
   // Define the name of the DDB table to perform the CRUD operations on
   const tablename = "lambda-apigateway";
   
   /**
    * Provide an event that contains the following keys:
    *
    *   - operation: one of 'create,' 'read,' 'update,' 'delete,' or 'echo'
    *   - payload: a JSON object containing the parameters for the table item
    *     to perform the operation on
    */
   export const handler = async (event, context) => {
      
        const operation = event.operation;
      
        if (operation == 'echo'){
             return(event.payload);
        }
        
       else { 
           event.payload.TableName = tablename;
           let response;
           
           switch (operation) {
             case 'create':
                  response = await ddbDocClient.send(new PutCommand(event.payload));
                  break;
             case 'read':
                  response = await ddbDocClient.send(new GetCommand(event.payload));
                  break;
             case 'update':
                  response = ddbDocClient.send(new UpdateCommand(event.payload));
                  break;
             case 'delete':
                  response = ddbDocClient.send(new DeleteCommand(event.payload));
                  break;
             default:
               response = 'Unknown operation: ${operation}';
             }
           console.log(response);
           return response;
       }
   };
   ```

------
#### [ Python ]

**Example lambda\$1function.py**  

   ```
   import boto3
   
   # Define the DynamoDB table that Lambda will connect to
   table_name = "lambda-apigateway"
   
   # Create the DynamoDB resource
   dynamo = boto3.resource('dynamodb').Table(table_name)
   
   # Define some functions to perform the CRUD operations
   def create(payload):
       return dynamo.put_item(Item=payload['Item'])
   
   def read(payload):
       return dynamo.get_item(Key=payload['Key'])
   
   def update(payload):
       return dynamo.update_item(**{k: payload[k] for k in ['Key', 'UpdateExpression', 
       'ExpressionAttributeNames', 'ExpressionAttributeValues'] if k in payload})
   
   def delete(payload):
       return dynamo.delete_item(Key=payload['Key'])
   
   def echo(payload):
       return payload
   
   operations = {
       'create': create,
       'read': read,
       'update': update,
       'delete': delete,
       'echo': echo,
   }
   
   def lambda_handler(event, context):
       '''Provide an event that contains the following keys:
         - operation: one of the operations in the operations dict below
         - payload: a JSON object containing parameters to pass to the 
           operation being performed
       '''
       
       operation = event['operation']
       payload = event['payload']
       
       if operation in operations:
           return operations[operation](payload)
           
       else:
           raise ValueError(f'Unrecognized operation "{operation}"')
   ```

------
**nota**  
En este ejemplo, el nombre de la tabla de DynamoDB se define como una variable en el código de la función. En la aplicación real, la mejor práctica es pasar este parámetro como variable de entorno y evitar codificar el nombre de la tabla. Para obtener más información, consulte [Uso de variables de entorno de AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html).

1. En la sección **IMPLEMENTAR** elija **Implementar** para actualizar el código de la función:  
![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/getting-started-tutorial/deploy-console.png)

## Prueba de la función
<a name="services-apigateway-tutorial-test-function"></a>

Antes de integrar la función con API Gateway, confirme que la ha implementado de forma correcta. Utilice la consola de Lambda para enviar un evento de prueba a su función.

1. En la página de la consola de Lambda para su función, seleccione la pestaña **Prueba**.  
![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/test-tab.png)

1. Desplácese a la sección **Evento JSON** y sustituya el evento predeterminado con el siguiente. Este evento coincide con la estructura esperada por la función de Lambda.

   ```
   {
       "operation": "echo",
       "payload": {
           "somekey1": "somevalue1",
           "somekey2": "somevalue2"
       }
   }
   ```

1. Seleccione **Probar**

1. En **Ejecutar la función: se realizó correctamente**, expanda **Detalles**. Debería ver la siguiente respuesta:

   ```
   {
     "somekey1": "somevalue1",
     "somekey2": "somevalue2"
   }
   ```

## Creación de una API REST mediante API Gateway
<a name="services-apigateway-tutorial-api"></a>

En este paso, crea la API de REST de API Gateway que utilizará para invocar la función de Lambda.

**Para crear la API**

1. Abra la [consola de API Gateway](https://console.aws.amazon.com/apigateway).

1. Seleccione **Create API (Crear API)**.

1. En el cuadro **REST API (API de REST)**, elija **Build (Crear)**.

1. En **Detalles de la API**, deje seleccionada la opción **Nueva API** y, en **Nombre de la API**, ingrese **DynamoDBOperations**.

1. Seleccione **Create API** (Crear API).

## Creación de un recurso en su API de REST.
<a name="services-apigateway-tutorial-resource"></a>

Para agregar un método HTTP a su API, primero debe crear un recurso para que funcione ese método. Aquí, se crea el recurso para administrar la tabla de DynamoDB.

**Para crear el recurso**

1. En la [consola de puerta de enlace de la API](https://console.aws.amazon.com/apigateway), en la página **Recursos** de su API, seleccione **Crear recurso**.

1. En **Detalles del recurso**, ingrese el **nombre del recurso****DynamoDBManager**.

1. Elija **Create Resource (Crear recurso)**.

## Creación de un método HTTP POST.
<a name="services-apigateway-tutorial-method"></a>

En este paso, creará un método (`POST`) para su recurso `DynamoDBManager`. Debe vincular este método `POST` a la función de Lambda para que cuando el método reciba una solicitud HTTP, API Gateway invoca la función de Lambda.

**nota**  
 A los efectos de este tutorial, se utiliza un método HTTP (`POST`) para invocar una única función de Lambda que lleva a cabo todas las operaciones de la tabla de DynamoDB. En una aplicación real, la práctica recomendada es utilizar una función de Lambda y un método HTTP diferente para cada operación. Para obtener más información, consulte [The Lambda monolith](https://serverlessland.com/content/service/lambda/guides/aws-lambda-operator-guide/monolith) en Serverless Land. 

**Para crear el método POST**

1. En la página **Recursos** de su API, asegúrese de que el recurso `/DynamoDBManager` esté resaltado. A continuación, en el panel **Métodos**, seleccione **Crear método**.

1. En **Tipo de método**, elija **POST**.

1. En **Tipo de integración**, seleccione **función de Lambda**.

1. Para la **función de Lambda**, elija el nombre de recurso de Amazon (ARN) para la función (`LambdaFunctionOverHttps`).

1. Elija **Crear método**.

## Creación de una tabla de DynamoDB
<a name="services-apigateway-tutorial-table"></a>

Cree una tabla de DynamoDB vacía en la que la función de Lambda realizará operaciones CRUD.

**Creación de la tabla de DynamoDB**

1. Abra la [página Tables (Tablas) en la consola de DynamoDB](https://console.aws.amazon.com/dynamodbv2#tables).

1. Seleccione **Create table (Creación de tabla)**.

1. En **Table details (Detalles de la tabla)**, haga lo siguiente:

   1. En **Nombre de la tabla**, introduzca **lambda-apigateway**.

   1. En **Partition key (Clave de partición)**, ingrese **id** y mantenga el tipo de datos establecido como **String (Cadena)**.

1. En **Settings** (Configuración), mantenga los valores predeterminados en **Default settings** (Configuración predeterminada).

1. Seleccione **Create table (Creación de tabla)**.

## Pruebe la integración de API Gateway, Lambda y DynamoDB.
<a name="services-apigateway-tutorial-test-setup"></a>

Ya está listo para probar la integración del método de API de API Gateway con la función de Lambda y la tabla de DynamoDB. Con la consola de API Gateway, envíe las solicitudes directamente a su método `POST` mediante la función de prueba de la consola. En este paso, primero use una operación `create` para agregar un nuevo elemento a la tabla de DynamoDB y, a continuación, use una operación `update` para modificar el elemento.

**Prueba 1: Crear un nuevo elemento en la tabla de DynamoDB**

1. En la [consola de API Gateway](https://console.aws.amazon.com/apigateway), elija su API (`DynamoDBOperations`).

1. Elija el método **POST** debajo del recurso `DynamoDBManager`.

1. Elija la pestaña **Prueba**. Puede que tenga que elegir el botón de flecha hacia la derecha para mostrar la pestaña.

1. En **Método de prueba**, deje vacías **las cadenas de consulta** y **los encabezados**. En **Cuerpo de la solicitud**, pegue el siguiente JSON:

   ```
   {
     "operation": "create",
     "payload": {
       "Item": {
         "id": "1234ABCD",
         "number": 5
       }
     }
   }
   ```

1. Seleccione **Probar**

   Los resultados que se muestran al finalizar la prueba deben mostrar el estado `200`. Este código de estado indica que la operación `create` se ha realizado correctamente.

    Para confirmarlo, verifique que ahora su tabla de DynamoDB contenga un nuevo elemento.

1. Abra la página [Tables](https://console.aws.amazon.com/dynamodbv2#tables) (Tablas) en la consola de DynamoDB y elija la tabla `lambda-apigateway`.

1. Elija **Explore table items** (Explorar elementos de la tabla). En el panel **Items returned** (Devolución de elementos), debería ver un elemento con el **id**`1234ABCD` y el **número** de `5`. Ejemplo:  
![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/items-returned.png)

**Prueba 2: Actualización del elemento de la tabla de DynamoDB**

1. En la [consola de la puerta de enlace de API](https://console.aws.amazon.com/apigateway), vuelva a la pestaña **Prueba** del método POST.

1. En **Método de prueba**, deje vacías **las cadenas de consulta** y **los encabezados**. En **Cuerpo de la solicitud**, pegue el siguiente JSON:

   ```
   {
       "operation": "update",
       "payload": {
           "Key": {
               "id": "1234ABCD"
           },
           "UpdateExpression": "SET #num = :newNum",
           "ExpressionAttributeNames": {
               "#num": "number"
           },
           "ExpressionAttributeValues": {
               ":newNum": 10
           }
       }
   }
   ```

1. Seleccione **Probar**

   Los resultados que se muestran cuando finaliza la prueba deben mostrar el estado `200`. Este código de estado indica que la operación de `update` se ha realizado correctamente.

    Para confirmarlo, compruebe que el elemento de la tabla de DynamoDB se haya modificado.

1. Abra la página [Tables](https://console.aws.amazon.com/dynamodbv2#tables) (Tablas) en la consola de DynamoDB y elija la tabla `lambda-apigateway`.

1. Elija **Explore table items** (Explorar elementos de la tabla). En el panel **Items returned** (Devolución de elementos), debería ver un elemento con el **id**`1234ABCD` y el **número** de `10`.  
![\[\]](http://docs.aws.amazon.com/es_es/lambda/latest/dg/images/items-returned-2.png)

## Implemente la API.
<a name="services-apigateway-tutorial-deploy-api"></a>

Para que un cliente llame a la API, debe crear una implementación y una etapa asociada. La etapa representa una imagen instantánea de su API, incluidos sus métodos e integraciones.

**Para implementar la API**

1. Abra la página **API** de la [consola de API Gateway](https://console.aws.amazon.com/apigateway) y seleccione la API de `DynamoDBOperations`.

1. En la página **Recursos** de su API, seleccione **Implementar la API**.

1. Para la **Etapa de implementación**, seleccione **\$1Nueva etapa\$1** y, en **Nombre de etapa**, introduzca **test**.

1. Elija **Implementar**.

1. En el panel **Editor de etapas de prueba**, copie la **URL de invocación**. Lo utilizará en el siguiente paso para invocar su función mediante una solicitud HTTP.

## Utilice curl para invocar tu función mediante solicitudes HTTP.
<a name="services-apigateway-tutorial-invoke-function"></a>

Ahora puede invocar la función de Lambda al emitir una solicitud HTTP a la API. En este paso, creará un elemento nuevo en la tabla de DynamoDB y, a continuación, lo someterá a operaciones de lectura, actualización y eliminación.

**Para crear un elemento en la tabla de DynamoDB con curl**

1. Abra una petición de comando o un terminal en su máquina local y ejecute el siguiente comando `curl` por medio de la URL de invocación que copió en el paso anterior. Este comando utiliza las siguientes opciones:
   + `-H`: añada un encabezado personalizado a la solicitud. Aquí, se especifica el tipo de contenido como JSON.
   + `-d`: envía los datos en el cuerpo de la solicitud. Esta opción usa un método HTTP POST de forma predeterminada.

------
#### [ Linux/macOS ]

   ```
   curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
   -H "Content-Type: application/json" \
   -d '{"operation": "create", "payload": {"Item": {"id": "5678EFGH", "number": 15}}}'
   ```

------
#### [ PowerShell ]

   ```
   curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"create\", \"payload\": {\"Item\": {\"id\": \"5678EFGH\", \"number\": 15}}}'
   ```

------

   Si la operación se realizó correctamente, debería ver una respuesta con el código de estado HTTP 200.

1. También puede utilizar la consola de DynamoDB para comprobar que el nuevo elemento esté en la tabla con las siguientes acciones:

   1. Abra la página [Tables](https://console.aws.amazon.com/dynamodbv2#tables) (Tablas) en la consola de DynamoDB y elija la tabla `lambda-apigateway`.

   1. Elija **Explore table items** (Explorar elementos de la tabla). En el panel **Items returned** (Devolución de elementos), debería ver un elemento con el **id**`5678EFGH` y el **número**`15`.

**Para leer el elemento en la tabla de DynamoDB con curl**
+ En la petición de comando o en el terminal, ejecute el siguiente comando `curl` para leer el valor del elemento que acaba de crear. Utilice su propia URL de invocación.

------
#### [ Linux/macOS ]

  ```
  curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
  -H "Content-Type: application/json" \
  -d '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'
  ```

------
#### [ PowerShell ]

  ```
  curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"read\", \"payload\": {\"Key\": {\"id\": \"5678EFGH\"}}}'
  ```

------

  Debería ver uno de los siguientes resultados dependiendo de si eligió el código de función Node.js o Python:

------
#### [ Node.js ]

  ```
  {"$metadata":{"httpStatusCode":200,"requestId":"7BP3G5Q0C0O1E50FBQI9NS099JVV4KQNSO5AEMVJF66Q9ASUAAJG",
  "attempts":1,"totalRetryDelay":0},"Item":{"id":"5678EFGH","number":15}}
  ```

------
#### [ Python ]

  ```
  {"Item":{"id":"5678EFGH","number":15},"ResponseMetadata":{"RequestId":"QNDJICE52E86B82VETR6RKBE5BVV4KQNSO5AEMVJF66Q9ASUAAJG",
  "HTTPStatusCode":200,"HTTPHeaders":{"server":"Server","date":"Wed, 31 Jul 2024 00:37:01 GMT","content-type":"application/x-amz-json-1.0",
  "content-length":"52","connection":"keep-alive","x-amzn-requestid":"QNDJICE52E86B82VETR6RKBE5BVV4KQNSO5AEMVJF66Q9ASUAAJG","x-amz-crc32":"2589610852"},
  "RetryAttempts":0}}
  ```

------

**Para actualizar el elemento en la tabla de DynamoDB con curl**

1. En la petición de comando o en el terminal, ejecute el siguiente comando `curl` para actualizar el elemento que acaba de crear cambiando el valor `number`. Utilice su propia URL de invocación.

------
#### [ Linux/macOS ]

   ```
   curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
   -H "Content-Type: application/json" \
   -d '{"operation": "update", "payload": {"Key": {"id": "5678EFGH"}, "UpdateExpression": "SET #num = :new_value", "ExpressionAttributeNames": {"#num": "number"}, "ExpressionAttributeValues": {":new_value": 42}}}'
   ```

------
#### [ PowerShell ]

   ```
   curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"update\", \"payload\": {\"Key\": {\"id\": \"5678EFGH\"}, \"UpdateExpression\": \"SET #num = :new_value\", \"ExpressionAttributeNames\": {\"#num\": \"number\"}, \"ExpressionAttributeValues\": {\":new_value\": 42}}}'
   ```

------

1. Para confirmar que se ha actualizado el valor de `number` correspondiente al elemento, ejecute otro comando de lectura:

------
#### [ Linux/macOS ]

   ```
   curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
   -H "Content-Type: application/json" \
   -d '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'
   ```

------
#### [ PowerShell ]

   ```
   curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"read\", \"payload\": {\"Key\": {\"id\": \"5678EFGH\"}}}'
   ```

------

**Para eliminar el elemento en la tabla de DynamoDB con curl**

1. En la petición de comando o en el terminal, ejecute el siguiente comando `curl` para eliminar el elemento que ha creado. Utilice su propia URL de invocación.

------
#### [ Linux/macOS ]

   ```
   curl https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager \
   -H "Content-Type: application/json" \
   -d '{"operation": "delete", "payload": {"Key": {"id": "5678EFGH"}}}'
   ```

------
#### [ PowerShell ]

   ```
   curl.exe 'https://l8togsqxd8.execute-api.us-east-2.amazonaws.com/test/DynamoDBManager' -H 'Content-Type: application/json' -d '{\"operation\": \"delete\", \"payload\": {\"Key\": {\"id\": \"5678EFGH\"}}}'
   ```

------

1. Confirme que la operación de eliminación se ha realizado correctamente. En el panel **Elementos devueltos** de la página **Explorar elementos** de la consola de DynamoDB, verifique que el elemento con **id** `5678EFGH` ya no se encuentre en la tabla.

## Elimine sus recursos (opcional)
<a name="cleanup"></a>

A menos que desee conservar los recursos que creó para este tutorial, puede eliminarlos ahora. Si elimina los recursos de AWS que ya no utiliza, evitará gastos innecesarios en su Cuenta de AWS.

**Cómo eliminar la función de Lambda**

1. Abra la [página de Funciones](https://console.aws.amazon.com/lambda/home#/functions) en la consola de Lambda.

1. Seleccione la función que ha creado.

1. Elija **Acciones**, **Eliminar**.

1. Escriba **confirm** en el campo de entrada de texto y elija **Delete**(Eliminar).

**Cómo eliminar el rol de ejecución**

1. Abra la página [Roles](https://console.aws.amazon.com/iam/home#/roles) en la consola de IAM.

1. Seleccione el rol de ejecución que creó.

1. Elija **Eliminar**.

1. Si desea continuar, escriba el nombre del rol en el campo de entrada de texto y elija **Delete** (Eliminar).

**Para eliminar la API**

1. Abra la [página API](https://console.aws.amazon.com/apigateway/main/apis) de la consola de API Gateway.

1. Seleccione la API que ha creado.

1. Elija **Actions** (Acciones), **Delete** (Eliminar).

1. Elija **Eliminar**.

**Para eliminar una tabla de DynamoDB**

1. Abra la página [Tables (Tablas)](https://console.aws.amazon.com//dynamodb/home#tables:) en la consola de DynamoDB.

1. Seleccione la tabla que ha creado.

1. Elija **Eliminar**.

1. Escriba **delete** en el cuadro de texto.

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