Una URL de función es un punto de conexión HTTP(S) dedicado para la función de Lambda. Puede crear y configurar una URL de función a través de la consola de Lambda o la API de Lambda.
sugerencia
Lambda ofrece dos formas de invocar la función a través de un punto de conexión HTTP: URL de función y Amazon API Gateway. 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.
Al crear una URL de función, Lambda genera automáticamente un punto de conexión de URL único para usted. Una vez que crea una URL de función, el punto de conexión de la URL nunca cambia. Los puntos de conexión de la URL de función tienen el siguiente formato:
https://
<url-id>
.lambda-url.<region>.on.aws
nota
Las URL de función no se admiten en las siguientes Regiones de AWS: Asia-Pacífico (Hyderabad) (ap-south-2
), Asia-Pacífico (Melbourne) (ap-southeast-4
), Asia-Pacífico (Malasia) (ap-southeast-5
), Oeste de Canadá (Calgary) (ca-west-1
), Europa (España) (eu-south-2
), Europa (Zúrich) (eu-central-2
), Israel (Tel Aviv) (il-central-1
) y Medio Oriente (Emiratos Árabes Unidos) (me-central-1
).
Las URL de funciones están habilitadas para doble pila y son compatibles con IPv4 e IPv6. Después de configurar la URL de función, puede invocar la función a través de su punto de conexión HTTP(S) mediante un navegador web, curl, Postman o cualquier cliente HTTP. Para invocar una URL de función, debe tener permisos lambda:InvokeFunctionUrl
. Para obtener más información, consulte Control de acceso.
Conceptos básicos de invocación de URL de funciones
Si la URL de función utiliza el tipo de autenticación AWS_IAM
, debe firmar cada solicitud HTTP utilizando AWS Signature Version 4 (SigV4). Herramientas tales como Postman
Si no utiliza una herramienta para firmar solicitudes HTTP en la URL de función, debe firmar manualmente cada solicitud mediante SigV4. Cuando la URL de función recibe una solicitud, Lambda también calcula la firma SigV4. Lambda procesa la solicitud solo si las firmas coinciden. Para obtener instrucciones sobre cómo firmar de manera manual las solicitudes con SigV4, consulte Firmar solicitudes de AWS con Signature Version 4 en la Guía de Referencia general de Amazon Web Services.
Si la URL de función utiliza el tipo de autenticación NONE
, no es necesario que firme las solicitudes con SigV4. Puede invocar la función mediante un navegador web, curl, Postman o cualquier cliente HTTP.
Para probar solicitudes GET
simples a su función, utilice un navegador web. Por ejemplo, si la URL de función es https://abcdefg.lambda-url.us-east-1.on.aws
, y toma un parámetro de cadena message
, la URL de la solicitud podría tener un aspecto similar al siguiente:
https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld
Para probar otras solicitudes HTTP, como una solicitud POST
, puede utilizar una herramienta como curl. Por ejemplo, si desea incluir algunos datos JSON en una solicitud POST
a la URL de función, puede utilizar el siguiente comando curl:
curl -v 'https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld' \ -H 'content-type: application/json' \ -d '{ "example": "test" }'
Cargas de solicitud y respuesta
Cuando un cliente llama a la URL de función, Lambda asigna la solicitud a un objeto de evento antes de pasarla a la función. A continuación, la respuesta de la función se asigna a una respuesta HTTP que Lambda envía de vuelta al cliente a través de la URL de función.
Los formatos de eventos de solicitud y respuesta siguen el mismo esquema que la versión de formato de carga 2.0 de Amazon API Gateway.
Formato de carga de solicitud
La carga de una solicitud tiene la siguiente estructura:
{
"version": "2.0",
"routeKey": "$default",
"rawPath": "/my/path",
"rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value",
"cookies": [
"cookie1",
"cookie2"
],
"headers": {
"header1": "value1",
"header2": "value1,value2"
},
"queryStringParameters": {
"parameter1": "value1,value2",
"parameter2": "value"
},
"requestContext": {
"accountId": "123456789012",
"apiId": "<urlid>",
"authentication": null,
"authorizer": {
"iam": {
"accessKey": "AKIA...",
"accountId": "111122223333",
"callerId": "AIDA...",
"cognitoIdentity": null,
"principalOrgId": null,
"userArn": "arn:aws:iam::111122223333:user/example-user",
"userId": "AIDA..."
}
},
"domainName": "<url-id>.lambda-url.us-west-2.on.aws",
"domainPrefix": "<url-id>",
"http": {
"method": "POST",
"path": "/my/path",
"protocol": "HTTP/1.1",
"sourceIp": "123.123.123.123",
"userAgent": "agent"
},
"requestId": "id",
"routeKey": "$default",
"stage": "$default",
"time": "12/Mar/2020:19:03:58 +0000",
"timeEpoch": 1583348638390
},
"body": "Hello from client!",
"pathParameters": null,
"isBase64Encoded": false,
"stageVariables": null
}
Parámetro | Descripción | Ejemplo |
---|---|---|
|
La versión de formato de carga de este evento. Actualmente, las URL de funciones de Lambda son compatibles con la versión de formato de carga 2.0. |
|
|
Las URL de funciones no utilizan este parámetro. Lambda establece |
|
|
Ruta de acceso de la solicitud. Por ejemplo, si la URL de solicitud es |
|
|
La cadena sin procesar que contiene los parámetros de cadena de consulta de la solicitud. Los caracteres admitidos incluyen |
|
|
Una matriz que contiene todas las cookies enviadas como parte de la solicitud. |
|
|
La lista de encabezados de solicitud, presentada como pares clave-valor. |
|
|
Los parámetros de consulta de la solicitud. Por ejemplo, si la URL de solicitud es |
|
|
Un objeto que contiene información adicional sobre la solicitud, como el |
|
|
El ID de Cuenta de AWS del propietario de la función. |
|
|
El ID de la URL de función. |
|
|
Las URL de funciones no utilizan este parámetro. Lambda establece esto como |
|
|
Un objeto que contiene información sobre la identidad del intermediario, si la URL de función utiliza el tipo de autenticación |
|
|
La clave de acceso de la identidad del intermediario. |
|
|
El ID de identidad de Cuenta de AWS del intermediario. |
|
|
El ID (ID de usuario) del intermediario. |
|
|
Las URL de funciones no utilizan este parámetro. Lambda establece esto como |
|
|
El ID de la entidad principal de la organización asociado a la identidad del intermediario. |
|
|
El nombre de recurso de Amazon (ARN) del usuario de la identidad del intermediario. |
|
|
El ID de usuario de la identidad del intermediario. |
|
|
El nombre de dominio de la URL de función. |
|
|
El prefijo de dominio de la URL de función. |
|
|
Un objeto que contiene detalles sobre la solicitud HTTP. |
|
|
El método HTTP utilizado en esta solicitud. Los valores válidos son |
|
|
Ruta de acceso de la solicitud. Por ejemplo, si la URL de solicitud es |
|
|
El protocolo de la solicitud. |
|
|
La dirección IP de origen de la conexión TCP inmediata que realiza la solicitud. |
|
|
El valor del encabezado de solicitud usuario-agente. |
|
|
El ID de la solicitud de invocación. Puede utilizar este ID para realizar un seguimiento de los registros de invocación relacionados con la función. |
|
|
Las URL de funciones no utilizan este parámetro. Lambda establece |
|
|
Las URL de funciones no utilizan este parámetro. Lambda establece |
|
|
La marca de tiempo de la solicitud. |
|
|
La marca de tiempo de la solicitud, en fecha de inicio Unix. |
|
|
El cuerpo de la solicitud. Si el tipo de contenido de la solicitud es binario, el cuerpo está codificado en base64. |
|
|
Las URL de funciones no utilizan este parámetro. Lambda establece esto como |
|
|
|
|
|
Las URL de funciones no utilizan este parámetro. Lambda establece esto como |
|
Formato de carga de respuesta
Cuando la función devuelve una respuesta, Lambda analiza la respuesta y la convierte en una respuesta HTTP. Las cargas de respuesta de la función tienen el siguiente formato:
{
"statusCode": 201,
"headers": {
"Content-Type": "application/json",
"My-Custom-Header": "Custom Value"
},
"body": "{ \"message\": \"Hello, world!\" }",
"cookies": [
"Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT",
"Cookie_2=Value2; Max-Age=78000"
],
"isBase64Encoded": false
}
Lambda le infiere el formato de respuesta. Si la función devuelve JSON válido y no devuelve un statusCode
, Lambda asume lo siguiente:
-
statusCode
es200
. -
content-type
esapplication/json
. -
body
es la respuesta de la función. -
isBase64Encoded
esfalse
.
En los ejemplos siguientes se muestra cómo se asigna la salida de la función de Lambda a la carga de respuesta y cómo se asigna la carga de respuesta a la respuesta HTTP final. Cuando el cliente invoca la URL de función, ve la respuesta HTTP.
Ejemplo de salida para una respuesta de cadena
Salida de función de Lambda | Salida de respuesta interpretada | Respuesta HTTP (lo que ve el cliente) |
---|---|---|
|
|
|
Ejemplo de salida para una respuesta JSON
Salida de función de Lambda | Salida de respuesta interpretada | Respuesta HTTP (lo que ve el cliente) |
---|---|---|
|
|
|
Ejemplo de salida para una respuesta personalizada
Salida de función de Lambda | Salida de respuesta interpretada | Respuesta HTTP (lo que ve el cliente) |
---|---|---|
|
|
|
Cookies
Para devolver las cookies de su función, no agregue encabezados set-cookie
manualmente. En su lugar, incluya las cookies en su objeto de carga de respuesta. Lambda interpreta esto automáticamente y las agrega como encabezados set-cookie
de la respuesta HTTP, como en el siguiente ejemplo.
Salida de función de Lambda | Respuesta HTTP (lo que ve el cliente) |
---|---|
|
|