Todos los productos
Search
Centro de documentos

Function Compute:Funciones web

Última actualización: Sep 09, 2026

Este tema describe los métodos de invocación, los límites y los ejemplos de código para las funciones en un runtime personalizado.

Contexto

Un runtime personalizado puede alojar su servidor HTTP. Function Compute convierte las solicitudes de invocación de la función en solicitudes HTTP y las envía a su servidor HTTP. Después, Function Compute convierte las respuestas de su servidor HTTP en respuestas de invocación de la función y las devuelve al cliente. A continuación se muestra el proceso.

image

Puede invocar una función de dos maneras:

  • Llamada HTTP (recomendado): invoque la función mediante HTTP, por ejemplo, con un activador HTTP o un nombre de dominio personalizado.

  • Llamada de API: invoque la función mediante la API InvokeFunction, por ejemplo, con un SDK o mediante un origen de eventos.

Cada método de invocación genera formatos distintos de solicitud y respuesta en su servidor HTTP.

Límites

  • Solo puede crear un activador HTTP por cada versión o alias de una función. Para obtener más información, consulte Manage versions y Manage aliases.

  • Límites de las solicitudes HTTP

    • Los encabezados de solicitud no admiten campos personalizados que comiencen con x-fc- ni los siguientes campos personalizados:

      • connection

      • keep-alive

    • Si una solicitud supera los siguientes límites, se devuelve un código de estado 400 y un código de error InvalidArgument.

      • Tamaño del encabezado: el tamaño total de todas las claves y valores de los encabezados no puede superar los 8 KB.

      • Tamaño de la ruta: el tamaño total de la ruta, incluidos todos los parámetros de consulta, no puede superar los 4 KB.

      • Tamaño del cuerpo: el tamaño total del cuerpo de la solicitud para una invocación síncrona no puede superar los 32 MB. Para una invocación asíncrona, no puede superar los 128 KB.

  • Límites de las respuestas HTTP

    • Los encabezados de respuesta no admiten campos personalizados que comiencen con x-fc- ni los siguientes campos personalizados:

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        Nota

        Por motivos de seguridad, cuando usa el dominio predeterminado aliyuncs.com de Function Compute, el servidor agrega de forma obligatoria el encabezado content-disposition: attachment a los encabezados de respuesta. Este encabezado hace que el navegador descargue la respuesta como archivo adjunto. Para quitar esta restricción, configure a custom domain name.

    • Si una respuesta supera los siguientes límites, se devuelve un código de estado 502 y un código de error BadResponse.

      • Tamaño del encabezado: el tamaño total de todas las claves y valores de los encabezados no puede superar los 8 KB.

  • Otras notas de uso

    Puede asignar distintas rutas de acceso HTTP a su función si vincula un nombre de dominio personalizado. Para obtener más información, consulte Configure a custom domain name.

Llamada HTTP (recomendado)

En las invocaciones HTTP, Function Compute utiliza el modo de paso directo. Reenvía la solicitud HTTP del cliente a su servidor HTTP y la respuesta del servidor HTTP al cliente. Algunos campos reservados por el sistema no se reenvían. Para obtener más información, consulte Limits.

Encabezados de solicitud

Cuando invoca una función mediante un activador HTTP o un nombre de dominio personalizado, Function Compute le permite configurar los encabezados de solicitud para controlar el comportamiento de la petición. A continuación se describen los encabezados de solicitud compatibles.

Nombre

Tipo

Obligatorio

Ejemplo

Descripción

X-Fc-Invocation-Type

String

No

Sync

El método de invocación. Para obtener más información, consulte Invocation methods. Valores válidos:

  • Sync: invocación síncrona.

  • Async: invocación asíncrona.

X-Fc-Log-Type

String

No

Tail

Los registros que se devuelven en la respuesta. Valores válidos:

  • Tail: devuelve los últimos 4 KB de registros generados por la solicitud actual.

  • None: no devuelve los registros de la solicitud. Este es el valor predeterminado.

Encabezados de respuesta

Cuando invoca una función mediante un activador HTTP o un nombre de dominio personalizado, la respuesta incluye algunos encabezados que Function Compute agrega de forma predeterminada. A continuación se describen estos encabezados de respuesta.

Nombre

Descripción

Ejemplo

X-Fc-Request-Id

El identificador de la solicitud de invocación de la función.

dab25e58-9356-4e3f-97d6-f044c4****

Llamada de API

En las invocaciones mediante la API InvokeFunction, Function Compute convierte la solicitud InvokeFunction en una solicitud HTTP y la envía a su servidor HTTP. Las reglas de conversión son las siguientes:

  • El parámetro event de InvokeFunction se convierte en el cuerpo del mensaje de la solicitud HTTP.

  • path es /invoke.

  • method es POST.

  • El encabezado de mensaje Content-Type es application/octet-stream.

Function Compute convierte la respuesta de su servidor HTTP en la respuesta de InvokeFunction y la devuelve al cliente. Las reglas de conversión son las siguientes:

  • El cuerpo de la respuesta HTTP se convierte en el cuerpo de la respuesta de InvokeFunction.

  • Los encabezados de la respuesta HTTP y el código de estado se pierden durante la conversión.

Ejemplo de conversión de una solicitud de la API Invoke

Solicitud de invocación

Solicitud HTTP (la solicitud que recibe el servidor HTTP)

Contenido de la solicitud de la API Invoke:

"hello world"
> POST /invoke HTTP/1.1
> Host: 21.0.X.X
> Content-Length: 11
> Content-Type: application/octet-stream

hello world

Ejemplo de salida de una respuesta de la API Invoke

Respuesta HTTP

Respuesta de invocación

< HTTP/1.1 200 OK
< Date: Mon, 10 Jul 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 11
< Connection: keep-alive

hello world
hello world
< HTTP/1.1 400 Bad Request
< Date: Mon, 10 Jul 2025 10:37:15 GMT
< Content-Type: application/octet-stream
< Content-Length: 28
< Connection: keep-alive

{"errorMessage":"exception"}
{"errorMessage":"exception"}

Códigos y encabezados de respuesta de Function Compute

Un runtime personalizado es, en esencia, un servidor HTTP que usted implementa. Por lo tanto, cada invocación de función es una solicitud HTTP y cada respuesta incluye un código y encabezados de respuesta.

  • Código de respuesta StatusCode

    • 200: ejecución correcta.

    • 404: ejecución con errores.

  • Encabezado de respuesta x-fc-status

    • 200: ejecución correcta.

    • 404: ejecución con errores.

Con el encabezado de respuesta x-fc-status puede indicar a Function Compute si la función se ejecutó correctamente.

  • Si no establece x-fc-status: Function Compute asume de forma predeterminada que la invocación se ejecutó correctamente. Sin embargo, es posible que su función haya encontrado una excepción que no se reportó a Function Compute. En este caso, Function Compute considera que la ejecución no tuvo errores. Esto quizá no afecte su lógica de negocio, pero sí afecta el monitoreo y la observability. A continuación se muestra un ejemplo:

        print("FC Invoke Start RequestId: " + rid)
        data = request.stream.read()
        print("Path: " + path)
        print("Data: " + str(data))
        # Simulate an exception to trigger a runtime error
        raise Exception("mock exception")
        print("FC Invoke End RequestId: " + rid)
        return "Hello, World!"
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=9000)
  • Si establece x-fc-status: cuando su función encuentra una excepción, puede usar el encabezado de respuesta x-fc-status para notificar el error de ejecución a Function Compute. La información de la pila de errores se imprime en los registros. Como se muestra en el siguiente ejemplo, después de establecer el encabezado de respuesta x-fc-status en 404, Function Compute identifica la invocación como una ejecución con errores. El tipo de error es InvocationError y el resultado devuelto es mock exception. El código de ejemplo en app.py es el siguiente:

    @app.route('/', defaults={'path': ''})
    @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
    def hello_world(path):
        rid = request.headers.get(REQUEST_ID_HEADER)
        print("FC Invoke Start RequestId: " + rid)
        try:
            raise Exception("mock exception")
        except Exception as e:
            print("FC Invoke End RequestId: " + rid + ", Error: Unhandled Exception")
            print(str(e))
            return str(e), 404, [{"x-fc-status", "404"}]
Nota

Se recomienda establecer tanto StatusCode como x-fc-status en la respuesta HTTP devuelta.

Ejemplo de código

Si configuró un activador para la función, puede implementar un servidor HTTP en cualquier lenguaje. En este tema se usa Python como ejemplo. A continuación se muestra el código de ejemplo.

Nota

El código de ejemplo depende de un entorno de Python y de la biblioteca Flask. Se recomienda seleccionar Web Function como método de creación de la función y Python 3.10 como runtime.

import os
from flask import Flask
from flask import request
REQUEST_ID_HEADER = 'x-fc-request-id'
app = Flask(__name__)
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def hello_world(path):
    rid = request.headers.get(REQUEST_ID_HEADER)
    data = request.stream.read()
    print("Path: " + path)
    print("Data: " + str(data))
    return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

A continuación se explica el código de ejemplo:

  • @app.route('/', defaults={'path': ''}): la ruta predeterminada, que corresponde a la ruta raíz.

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']): una ruta dinámica con un parámetro de ruta. Puede procesar solicitudes GET, POST, PUT y DELETE. El valor del parámetro de ruta se pasa a la función hello_world como argumento path.

  • rid = request.headers.get(REQUEST_ID_HEADER): obtiene el valor del campo x-fc-request-id de los encabezados de solicitud.

  • data = request.stream.read(): lee el contenido de la solicitud y lo asigna a la variable data.

  • return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]: devuelve un cuerpo de respuesta que contiene "Hello, World!", establece el código de estado en 200 e incluye un encabezado Function-Name.