Todos os produtos
Search
Central de documentação

Function Compute:Funções Web

Última atualização: Sep 09, 2026

Este tópico descreve os métodos de invocação, as limitações e os exemplos de código para funções em um custom runtime.

Informações básicas

Um custom runtime pode hospedar seu servidor HTTP. O Function Compute converte as solicitações de invocação de função em solicitações HTTP e as envia ao seu servidor HTTP. Em seguida, o Function Compute converte as respostas do seu servidor HTTP em respostas de invocação de função e as retorna ao cliente. A figura a seguir ilustra esse processo.

image

Você pode invocar uma função das seguintes maneiras:

  • Chamada HTTP (recomendado): invoque a função por meio de HTTP, utilizando, por exemplo, um gatilho HTTP ou um nome de domínio personalizado.

  • Chamada de API: invoque a função chamando a API InvokeFunction, como ao usar um SDK para invocar a função ou ao acioná-la por meio de uma source de evento.

Cada método de invocação resulta em formatos diferentes de solicitação e resposta no seu servidor HTTP.

Limites

  • É possível criar apenas um gatilho HTTP para cada versão ou alias de uma função. Para obter mais informações, consulte Gerencie versions e Gerencie aliases.

  • Limites de solicitação HTTP

    • Os cabeçalhos de solicitação não aceitam campos personalizados que começam com x-fc- nem os seguintes campos personalizados:

      • connection

      • keep-alive

    • Se uma solicitação exceder os limites abaixo, o sistema retornará um código de status 400 e um código de erro InvalidArgument.

      • Tamanho do cabeçalho: o tamanho total de todas as chaves e valores nos cabeçalhos não pode exceder 8 KB.

      • Tamanho do caminho: o tamanho total do caminho, incluindo todos os parâmetros de consulta, não pode exceder 4 KB.

      • Tamanho do corpo: o tamanho total do corpo da solicitação para uma invocação síncrona não pode exceder 32 MB. Para uma invocação assíncrona, o limite é de 128 KB.

  • Limites de resposta HTTP

    • Os cabeçalhos de resposta não aceitam campos personalizados que começam com x-fc- nem os seguintes campos personalizados:

      • connection

      • content-length

      • date

      • keep-alive

      • server

      • content-disposition:attachment

        Nota

        Por motivos de segurança, ao usar o domínio padrão aliyuncs.com do Function Compute, o servidor adiciona obrigatoriamente o cabeçalho content-disposition: attachment aos cabeçalhos de resposta. Esse cabeçalho faz com que o navegador baixe a resposta como um anexo. Para remover essa restrição, configure a custom domain name.

    • Se uma resposta exceder os limites abaixo, o sistema retornará um código de status 502 e um código de erro BadResponse.

      • Tamanho do cabeçalho: o tamanho total de todas as chaves e valores nos cabeçalhos não pode exceder 8 KB.

  • Outras observações de uso

    Para mapear diferentes caminhos de acesso HTTP para sua função, vincule um nome de domínio personalizado. Para obter mais informações, consulte Configure a custom domain name.

Chamada HTTP (recomendado)

Nas invocações HTTP, o Function Compute utiliza o modo de passagem direta. Ele encaminha a solicitação HTTP do cliente diretamente ao seu servidor HTTP e repassa a resposta do servidor HTTP de volta ao cliente. Alguns campos reservados pelo sistema não são repassados. Para obter mais informações, consulte Limits.

Cabeçalhos de solicitação

Ao invocar uma função usando um gatilho HTTP ou um nome de domínio personalizado, o Function Compute permite configurar cabeçalhos de solicitação para controlar o comportamento da requisição. A tabela a seguir descreve os cabeçalhos de solicitação suportados.

Name

Type

Required

Example

Description

X-Fc-Invocation-Type

String

No

Sync

O método de invocação. Para obter mais informações, consulte Invocation methods. Valores válidos:

  • Sync: invocação síncrona.

  • Async: invocação assíncrona.

X-Fc-Log-Type

String

No

Tail

Os logs a serem retornados na resposta. Valores válidos:

  • Tail: retorna os últimos 4 KB de logs gerados pela solicitação atual.

  • None: não retorna os logs da solicitação. Este é o valor padrão.

Cabeçalhos de resposta

Quando você invoca uma função usando um gatilho HTTP ou um nome de domínio personalizado, a resposta contém alguns cabeçalhos que o Function Compute adiciona por padrão. A tabela a seguir descreve esses cabeçalhos de resposta.

Name

Description

Example

X-Fc-Request-Id

O ID da solicitação de invocação da função.

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

Chamada de API

Para invocações realizadas por meio da API InvokeFunction, o Function Compute converte a solicitação InvokeFunction em uma solicitação HTTP e a envia ao seu servidor HTTP. As regras de conversão são as seguintes:

  • O parâmetro event do InvokeFunction é convertido no corpo da mensagem da solicitação HTTP.

  • O path é /invoke.

  • O method é POST.

  • O cabeçalho de mensagem Content-Type é application/octet-stream.

O Function Compute converte a resposta do seu servidor HTTP na resposta do InvokeFunction e a retorna ao cliente. As regras de conversão são as seguintes:

  • O corpo da resposta HTTP é convertido no corpo da resposta do InvokeFunction.

  • Os cabeçalhos de resposta HTTP e o código de status são perdidos durante a conversão.

Exemplo de conversão de solicitação da API Invoke

Invoke request

HTTP request (the request received by the HTTP server)

Conteúdo da solicitação da API Invoke:

"hello world"
> POST /invoke HTTP/1,1
> Host: 21,0.X.X
> Content-Length: 11
> Content-Type: application/octet-stream

hello world

Exemplo de saída de resposta da API Invoke

HTTP response

Invoke response

< 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 de resposta e cabeçalhos de resposta do Function Compute

Um custom runtime é, essencialmente, um servidor HTTP implementado por você. Portanto, cada invocação de função corresponde a uma solicitação HTTP, e cada resposta inclui um código de resposta e cabeçalhos de resposta.

  • Código de resposta StatusCode

    • 200: sucesso.

    • 404: falha.

  • Cabeçalho de resposta x-fc-status

    • 200: sucesso.

    • 404: falha.

Utilize o cabeçalho de resposta x-fc-status para informar ao Function Compute se a função foi executada com sucesso.

  • Se você não definir x-fc-status: o Function Compute assume, por padrão, que a invocação foi executada com sucesso. No entanto, sua função pode ter encontrado uma exceção que não foi reportada ao Function Compute. Nesse caso, o Function Compute considera a execução livre de erros. Isso pode não afetar sua lógica de negócios, mas impacta o monitoramento e a observabilidade. O código a seguir mostra um exemplo:

        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)
  • Se você definir x-fc-status: caso sua função encontre uma exceção, use o cabeçalho de resposta x-fc-status para reportar a falha de execução ao Function Compute. As informações da pilha de erros serão impressas nos logs. Conforme mostrado no exemplo a seguir, após definir o cabeçalho de resposta x-fc-status como 404, o Function Compute identifica a invocação como uma execução com falha. O tipo de erro é InvocationError, e o resultado retornado é mock exception. O código de exemplo em app.py é o seguinte:

    @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

Na resposta HTTP retornada, recomendamos definir tanto StatusCode quanto x-fc-status.

Exemplo de código

Se houver um gatilho configurado para a função, você poderá implementar um servidor HTTP em qualquer linguagem. Este tópico usa Python como exemplo. O código de amostra é apresentado a seguir.

Nota

O código de exemplo depende de um ambiente Python e da biblioteca Flask. Recomendamos selecionar Web Function como método de criação da função e 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 explicação do código de amostra é a seguinte:

  • @app.route('/', defaults={'path': ''}): a rota padrão, que corresponde ao caminho raiz.

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']): uma rota dinâmica com um parâmetro de caminho. Ela lida com solicitações GET, POST, PUT e DELETE. O valor do parâmetro de caminho é passado para a função hello_world como o argumento path.

  • rid = request.headers.get(REQUEST_ID_HEADER): obtém o valor do campo x-fc-request-id nos cabeçalhos da solicitação.

  • data = request.stream.read(): lê o conteúdo da solicitação e o atribui à variável data.

  • return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]: retorna um corpo de resposta contendo "Hello, World!", define o código de status como 200 e inclui um cabeçalho Function-Name.