

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# UDF de Lambda escalares
<a name="udf-creating-a-lambda-sql-udf"></a>

Amazon Redshift puede utilizar funciones personalizadas definidas en AWS Lambda como parte de las consultas SQL. Puede escribir UDF de Lambda escalares en cualquier lenguaje de programación admitido por Lambda, como Java, Go, PowerShell, Node.js, C\$1, Python y Ruby. También puede utilizar un tiempo de ejecución personalizado.

El comando [CREATE EXTERNAL FUNCTION](r_CREATE_EXTERNAL_FUNCTION.md) crea los siguientes parámetros:
+ (Opcional) Una lista de argumentos con tipo de datos. 
+ Un tipo de datos de retorno.
+ Un nombre de función de la función externa a la que llama Amazon Redshift. 
+ Un rol de IAM que el clúster de Amazon Redshift está autorizado a asumir y llamar a Lambda.
+ Un nombre de función de Lambda que invoca la UDF de Lambda.

Para obtener más información acerca de CREATE EXTERNAL FUNCTION, consulte [CREATE EXTERNAL FUNCTION](r_CREATE_EXTERNAL_FUNCTION.md).

Los tipos de datos de entrada y devolución para las UDF de Lambda pueden ser cualquiera de los siguientes tipos:
+  SMALLINT 
+  INTEGER 
+  BIGINT 
+  DECIMAL 
+  REAL 
+  DOUBLE PRECISION 
+  CHAR 
+  VARCHAR 
+  BOOLEANO 
+  DATE 
+  TIMESTAMP 

Los alias para estos tipos también son válidos. Para obtener una lista completa de tipos de datos y los alias, consulte [Tipos de datos](c_Supported_data_types.md).

Amazon Redshift se asegura de que la función externa pueda enviar y recibir argumentos y resultados en lotes. 

Las UDF de Lambda se definen y administran en Lambda. Además, puede controlar los privilegios de acceso para invocar estas UDF en Amazon Redshift. Puede invocar varias funciones de Lambda en la misma consulta o invocar la misma función varias veces.

Utilice las UDF de Lambda en cualquier cláusula de las instrucciones SQL donde se admitan funciones escalares. También puede utilizar las UDF de Lambda en cualquier instrucción SQL, como SELECT, UPDATE, INSERT o DELETE. 

**nota**  
El uso de las UDF de Lambda puede generar cargos adicionales por el servicio Lambda. Si esto sucede o no depende de distintos factores, como el número de solicitudes de Lambda (invocaciones de UDF) y la duración total de la ejecución del programa Lambda. No obstante, no se generan cargos adicionales por el uso de las UDF de Lambda en Amazon Redshift. Para obtener información acerca de los precios de AWS Lambda, consulte [Precios de AWS Lambda](https://aws.amazon.com/lambda/pricing).  
El número de solicitudes de Lambda varía según la cláusula de instrucción SQL específica en la que se utiliza la UDF de Lambda. Por ejemplo, supongamos que la función se utiliza en una cláusula WHERE como la siguiente. ``  
`SELECT a, b FROM t1 WHERE lambda_multiply(a, b) = 64; SELECT a, b FROM t1 WHERE a*b = lambda_multiply(2, 32) `  
En este caso, Amazon Redshift llama a la primera instrucción SELECT para cada una y llama a la segunda instrucción SELECT solo una vez.  
No obstante, es posible que el uso de una UDF en la parte de proyección de la consulta solo invoque la función de Lambda una vez por cada fila calificada o agrupada en el conjunto de resultados. 

## Seguridad y permisos de UDF
<a name="udf-lambda-security"></a>

Para crear una UDF de Lambda, asegúrese de tener los permisos de uso en LANGUAGE EXFUNC. Debe conceder de forma explícita USAGE ON LANGUAGE EXFUNC o revocar USAGE ON LANGUAGE EXFUNC a usuarios, grupos o público específicos.

En el siguiente ejemplo, se establece el uso de EXFUNC como PUBLIC.

```
grant usage on language exfunc to PUBLIC; 
```

En el siguiente ejemplo, se revoca el permiso de uso PUBLIC de exfunc y se concede el permiso de uso al grupo de usuarios lambda\$1udf\$1devs.

```
revoke usage on language exfunc from PUBLIC;
grant usage on language exfunc to group lambda_udf_devs;
```

Para ejecutar una UDF de Lambda, asegúrese de tener permiso para cada función a la que se llama. De manera predeterminada, se establece como PUBLIC el permiso para ejecutar las UDF de Lambda nuevas. Para restringir el uso, revoque el permiso PUBLIC para la función. Luego, conceda el privilegio a usuarios o grupos específicos.

En el siguiente ejemplo, se revoca la ejecución de la función exfunc\$1sum como PUBLIC. Luego, se concede el uso al grupo de usuarios lambda\$1udf\$1devs.

```
revoke execute on function exfunc_sum(int, int) from PUBLIC;
grant execute on function exfunc_sum(int, int) to group lambda_udf_devs;
```

De manera predeterminada, los superusuarios tienen todos los privilegios.

Para obtener más información sobre cómo conceder y revocar privilegios, consulte [GRANT](r_GRANT.md) y [REVOKE](r_REVOKE.md).

## Configuración del parámetro de autorización para las UDF de Lambda
<a name="udf-lambda-authorization"></a>

El comando CREATE EXTERNAL FUNCTION requiere autorización para invocar funciones de Lambda en AWS Lambda. Para comenzar la autorización, especifique un rol de AWS Identity and Access Management (IAM) cuando ejecute el comando CREATE EXTERNAL FUNCTION. Para obtener más información acerca de los roles de IAM, consulte [Roles de IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_roles.html) en la *Guía del usuario de IAM*.

Si ya existe un rol de IAM con permisos para invocar funciones de Lambda adjuntas a su clúster, puede sustituir el nombre de recurso de Amazon (ARN) del rol en el parámetro IAM\$1ROLE con el comando. En las siguientes secciones, se describen los pasos para utilizar un rol de IAM en el comando CREATE EXTERNAL FUNCTION.

### Creación de un rol de IAM para Lambda
<a name="udf-lambda-create-iam"></a>

El rol de IAM requiere permiso para invocar funciones de Lambda. Cuando cree el rol de IAM, proporcione el permiso a través de una de las siguientes maneras:
+ Adjunte la política `AWSLambdaRole` en la página **Attach permissions policy** (Adjuntar política de permisos) cuando cree un rol de IAM. La política `AWSLambdaRole` concede permisos para invocar funciones de Lambda, que es el requisito mínimo. Para obtener más información y otras políticas, consulte [Políticas de IAM basadas en identidad para AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html) en la *Guía para desarrolladores de AWS Lambda*.
+ Cree su propia política personalizada para adjuntarla a su rol de IAM con el permiso `lambda:InvokeFunction` de todos los recursos o de una función de Lambda en particular con el ARN de esa función. Para obtener más información sobre cómo crear una política, consulte [Creación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) en la *Guía del usuario de IAM*.

  La siguiente política de ejemplo permite invocar a Lambda en una función de Lambda en particular.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Invoke",
              "Effect": "Allow",
              "Action": [
                  "lambda:InvokeFunction"
              ],
              "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function"
          }
      ]
  }
  ```

------

  Para obtener más información sobre los recursos para funciones de Lambda, consulte [Recursos y condiciones para acciones de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-api-permissions-ref.html) en la *Referencia de la API de IAM*.

  Después de crear una política personalizada con los permisos necesarios, puede adjuntar la política al rol de IAM en la página **Attach permissions policy** (Adjuntar política de permisos) cuando cree un rol de IAM.

Para conocer los pasos que se deben realizar para crear un rol de IAM, consulte [Autorización de Amazon Redshift para acceder a otros servicios de AWS en su nombre](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) en la *Guía de administración de Amazon Redshift*.

Si no desea crear un rol de IAM nuevo, puede agregar los permisos mencionados anteriormente a su rol de IAM existente.

### Asociación de un rol de IAM al clúster
<a name="udf-lambda-associate-iam"></a>

Adjunte el rol de IAM a su clúster. Puede agregar un rol a un clúster o ver los roles asociados a un clúster mediante la consola de administración, la CLI o la API de Amazon Redshift. Para obtener más información, consulte [Asociación de un rol de IAM a un clúster](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html) en la *Guía de administración de Amazon Redshift*.

### Inclusión del rol de IAM en el comando
<a name="udf-lambda-include-iam"></a>

Incluya el ARN del rol de IAM en el comando CREATE EXTERNAL FUNCTION. Al crear un rol de IAM, IAM devuelve el Amazon Resource Name (ARN, Nombre de recurso de Amazon) del rol. Para especificar un rol de IAM, proporcione el ARN del rol con el parámetro `IAM_ROLE`. A continuación, se muestra la sintaxis del parámetro `IAM_ROLE`.

```
IAM_ROLE 'arn:aws:iam::aws-account-id:role/role-name'
```

Para invocar funciones de Lambda que se encuentran en otras cuentas dentro de la misma región, consulte [Encadenamiento de roles de IAM en Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles.html).

## Uso de la interfaz JSON entre Amazon Redshift y AWS Lambda
<a name="udf-lambda-json"></a>

Amazon Redshift utiliza una interfaz común para todas las funciones de Lambda con las que Amazon Redshift se comunica.

La siguiente tabla muestra la lista de campos de entrada con las funciones designadas de Lambda que puede esperar con la carga de JSON.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/redshift/latest/dg/udf-creating-a-lambda-sql-udf.html)

El orden de la matriz JSON determina el orden del procesamiento por lotes. La función de Lambda debe procesar los argumentos de manera iterativa y producir el número exacto de registros. A continuación, se muestra un ejemplo de carga. 

```
{
  "request_id" : "23FF1F97-F28A-44AA-AB67-266ED976BF40",
  "cluster" : "arn:aws:redshift:xxxx",
  "user" : "adminuser",
  "database" : "db1",
  "external_function": "public.foo",
  "query_id" : 5678234,
  "num_records" : 4,
  "arguments" : [
     [ 1, 2 ],
     [ 3, null],
     null,
     [ 4, 6]
   ]
 }
```

La salida de la función de Lambda contiene los siguientes campos.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/redshift/latest/dg/udf-creating-a-lambda-sql-udf.html)

El siguiente es un ejemplo de la salida de la función de Lambda.

```
{
  "success": true,   // true indicates the call succeeded
  "error_msg" : "my function isn't working",  // shall only exist when success != true
  "num_records": 4,      // number of records in this payload
  "results" : [
     1,
     4,
     null,
     7
   ]
}
```

Cuando llama a las funciones de Lambda desde consultas SQL, Amazon Redshift garantiza la seguridad de la conexión con las siguientes consideraciones:
+ Permisos GRANT y REVOKE. Para obtener más información acerca de los permisos y la seguridad de UDF, consulte [Seguridad y permisos de UDF](udf-security-and-privileges.md).
+ Amazon Redshift solo envía el conjunto mínimo de datos a la función de Lambda designada.
+ Amazon Redshift solo llama a la función de Lambda designada con el rol de IAM designado.