Entrar Empieza gratis
Lambda

Cómo hacer que una función Lambda responda desde una dirección web, sin montar nada más

Explicado desde cero: qué es una función Lambda, qué es una URL de función y cómo activarla para que tu código responda cuando alguien abre una dirección web o un programa la llama, con la seguridad mínima para no llevarte sorpresas.

⏱ 10 minutos ◎ Para todos Actualizada el 26/10/2026

Imagina un pequeño programa que solo quieres que se ejecute cuando alguien lo llama: recibir el aviso de que un cliente ha pagado, procesar un formulario de contacto, convertir una imagen. No quieres un servidor encendido las 24 horas para eso. Para eso existe Lambda: le das tu código a Amazon, y Amazon lo ejecuta solo cuando hace falta y te cobra solo por ese rato. Nada de máquinas que mantener.

La pregunta es: ¿cómo lo llamas? Lo más universal es darle una dirección web, una URL como https://algo.on.aws/, de forma que cualquier navegador o programa pueda "abrirla" y tu código responda. Esta guía hace exactamente eso con la opción que trae Lambda de serie, llamada URL de función. No hay que instalar ni contratar nada más.

Antes de empezar: qué significa cada cosa

Función Lambda
Un trozo de código tuyo (en Python, Node.js, etc.) guardado en Amazon, que se ejecuta cuando algo lo llama y se apaga al terminar. Pagas por cada ejecución, no por tener algo encendido.
URL
Una dirección web, lo que se escribe en la barra del navegador. Aquí, la dirección por la que se puede llamar a tu función.
Petición y respuesta
Cuando un navegador o un programa abre una URL, envía una "petición" (qué quiere) y recibe una "respuesta" (lo que le devuelven). Tu función recibe la petición y fabrica la respuesta.
Webhook
Un aviso automático que un servicio (por ejemplo, tu pasarela de pagos) envía a una URL tuya cuando pasa algo. Para recibirlo, necesitas una URL que responda: esta guía te la da.
API Gateway
Otro servicio de Amazon, más completo y más complejo, que también sirve para poner una dirección web delante de una función. Durante años era la única opción. Hoy, para la mayoría de los casos sencillos, no hace falta, y esta guía no lo usa.
CORS
Una norma de seguridad de los navegadores: una página web solo puede llamar a direcciones de otros sitios si esos sitios lo permiten expresamente. Si tu función la va a llamar una página web tuya, hay que decirle a Lambda qué páginas pueden hacerlo.
Registros (logs)
El diario de lo que hace tu función en cada ejecución: cuánto tardó, si falló y por qué. Se guardan en otro servicio llamado CloudWatch.

Paso a paso

  1. Comprueba que tu función sabe contestar a una petición web

    Cuando se llama a la función por su dirección web, Lambda le entrega un paquete de datos con la petición (qué pedía, con qué datos) y espera que tu código devuelva una respuesta con dos cosas: un código de estado (200 quiere decir "todo bien") y un cuerpo (el texto o los datos que devuelves). Si tu función fue hecha para otro uso, hay que adaptarla. Un ejemplo mínimo, en Node.js, que responde "hola, mundo":

    export const handler = async (event) => ({
      statusCode: 200,
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ hola: "mundo" })
    });

    Si no programas tú, pásale este párrafo a quien lo haga: sabrá qué significa.

  2. Decide quién va a poder llamar a la función

    Es la única decisión importante de la guía, y conviene entenderla bien. Hay dos opciones:

    • Solo con credenciales de AWS (la opción se llama AWS_IAM): solo podrá llamarla un programa tuyo que tenga permisos en tu cuenta de Amazon. Es la más segura, pero un navegador normal o un servicio externo no podrán usarla.
    • Abierta (la opción se llama NONE): cualquiera que conozca la dirección podrá llamarla. Es lo que necesitas si la va a llamar un servicio externo (un webhook) o una página web. A cambio, la seguridad la tiene que poner tu código: comprobar una contraseña o una firma en cada llamada. Lo vemos en el último paso.

    Regla sencilla: si no sabes cuál elegir, elige la primera. Si la función tiene que recibir llamadas de fuera de tu cuenta, elige la segunda y no te saltes el último paso.

  3. Activa la dirección web

    En la consola de AWS entra en Lambda, abre tu función y pulsa la pestaña Configuración. En el menú de la izquierda elige URL de función y pulsa Crear URL de función. Elige el tipo de acceso del paso anterior.

    Si la va a llamar una página web tuya desde otro dominio, despliega CORS y escribe la dirección de esa página en "Permitir origen" (por ejemplo https://miweb.com). Si pones un asterisco, cualquier web del mundo podrá llamarla desde el navegador; evítalo salvo que sea lo que quieres. Guarda. Arriba aparece la dirección nueva, con esta pinta: https://xxxxxxxx.lambda-url.eu-west-1.on.aws/. Esa es tu URL.

  4. Pruébala

    Si elegiste la opción abierta, copia la dirección y pégala en el navegador: deberías ver la respuesta de tu función (en el ejemplo, el texto "hola, mundo"). Ya está funcionando.

    Si prefieres probarla desde una terminal, en CloudShell (el icono de terminal en la barra superior de la consola de AWS) escribe:

    curl -i https://xxxxxxxx.lambda-url.eu-west-1.on.aws/

    Si elegiste la opción con credenciales, el navegador dirá "Forbidden": es lo esperado, porque no lleva credenciales. La prueba la tendrá que hacer el programa tuyo que la vaya a llamar, usando las bibliotecas de AWS, que ya saben firmar las peticiones.

  5. Mira el diario de ejecuciones

    Pestaña Monitorizar, botón Ver registros de CloudWatch. Cada llamada deja una anotación con lo que tardó y lo que tu código haya escrito. Si una llamada devuelve un error, aquí verás el motivo. Un consejo que ahorra dinero: en ese grupo de registros, pon una retención de, por ejemplo, 30 días; si no, los registros se guardan para siempre y se cobran.

  6. Si la dejaste abierta, protégela

    Abierta quiere decir que cualquiera puede llamarla, así que tu código debe comprobar algo en cada llamada. Lo normal: el servicio que te envía el webhook incluye una firma o una clave secreta en cada aviso, y tu función comprueba que es correcta antes de hacer nada. Esa clave guárdala en las variables de entorno de la función (pestaña Configuración), no escrita en el código.

    Y pon un tope a cuántas veces puede ejecutarse a la vez (concurrencia reservada, en Configuración): si alguien bombardea la dirección, el tope evita que la factura se dispare.

Qué puede salir mal

La página web dice algo de "CORS" y no recibe respuesta

Es el navegador protegiendo al usuario: tu función no ha dicho que esa página pueda llamarla. Edita la URL de función, sección CORS, y añade la dirección exacta de tu página y el tipo de petición que usa (GET, POST). Si tu código también devuelve cabeceras de CORS por su cuenta, quítalas de uno de los dos sitios: duplicadas también fallan.

Devuelve "Forbidden" aunque la dejé abierta

A la función le falta el permiso que deja que la llame cualquiera. Al crear la URL desde la consola se añade solo; si la creó un programa o un script, pídele a quien lo hizo que añada el permiso lambda:InvokeFunctionUrl para el público (principal *).

La primera llamada tarda varios segundos y luego va rápido

Se llama "arranque en frío": si la función lleva un rato sin usarse, Amazon tiene que cargarla de nuevo. Para un webhook da igual. Para una web con usuarios esperando, se puede reducir haciendo la función más pequeña o pagando para tenerla siempre lista (concurrencia aprovisionada).

Necesito que la dirección sea de mi dominio, o controlar quién llama y cuánto

Para eso ya hace falta API Gateway, el servicio más completo que mencionábamos al principio, o poner CloudFront delante. La URL de función es la vía corta y para la mayoría basta; cuando se quede corta, lo notarás.

En Simplio

En Simplio tus funciones Lambda aparecen con su estado y sus registros en una lista; si están en Python, Node.js o Ruby puedes editar el código, guardar con el doble factor y probarlas en el momento viendo la respuesta. Y darles una dirección web es un clic, con el tipo de acceso explicado en claro. Cada persona de tu equipo ve solo las funciones que le asignes.

Lo mismo, en AWS y en Simplio

En la consola de AWSEn Simplio
Dar la dirección web a la funciónLambda, Configuración, URL de función, tipo de acceso, CORS: 5 pasosBotón "URL pública" en la función, con el tipo de acceso explicado: 1 clic
Probarla y ver qué devolvióNavegador o curl, y CloudWatch para los registrosProbar desde Simplio viendo respuesta y registros en la misma pantalla
Cambiar el códigoEditor de Lambda, sin control de quién lo tocóEditor con doble factor al guardar, y registro de actividad

Probarlo gratis 15 días Ver cómo funciona

Todo esto, sin la consola de AWS

Simplio es un panel en español para manejar tus cuentas de AWS: máquinas, copias programadas, bases de datos, dominios, correo y lo que te cobra AWS, con permisos por persona y doble factor. Sin instalar nada en tus servidores.

Empieza gratis 15 días, sin tarjeta

¿Ya eres cliente? Acceso clientes.