Tous les produits
Search
Centre de documentation

Function Compute:Développement de code pour les environnements d'exécution Custom Container

Dernière mise à jour :Aug 12, 2026

Les environnements d'exécution Custom Container hébergent votre serveur HTTP dans un conteneur. Function Compute convertit chaque invocation de fonction en requête HTTP, la transmet à votre serveur, puis transforme la réponse HTTP en réponse d'invocation de fonction.

Fonctionnement

image

Function Compute prend en charge deux méthodes d'invocation :

  • Appels HTTP (recommandé) : invoquez une fonction via un déclencheur HTTP ou un nom de domaine personnalisé. Function Compute transfère les requêtes et réponses HTTP entre le client et votre serveur HTTP avec une transformation minimale.

  • Appels API : invoquez une fonction en appelant l'opération InvokeFunction, par exemple via un SDK ou une source d'événement. Function Compute convertit la requête InvokeFunction en requête HTTP POST et la transmet au chemin fixe /invoke de votre serveur HTTP.

Le format des requêtes et des réponses reçues par votre serveur HTTP dépend de la méthode d'invocation.

Limites

Déclencheur HTTP

Vous ne pouvez créer qu'un seul déclencheur HTTP par fonction HTTP pour chaque version ou alias. Pour plus d'informations, consultez Gérer les versions et Gérer les alias.

Limites des requêtes

Les en-têtes de requête ne doivent pas contenir de champs personnalisés commençant par x-fc-, ni les champs réservés suivants :

  • connection

  • keep-alive

Le système renvoie le code d'état 400 et le code d'erreur InvalidArgument si une requête dépasse l'une des limites suivantes :

Ressource Limite
Taille des en-têtes 8 Ko (total des clés et valeurs)
Taille du chemin 4 Ko (paramètres de requête inclus)
Taille du corps — invocation synchrone 32 Mo
Taille du corps — invocation asynchrone 128 Ko

Limites des réponses

Les en-têtes de réponse ne doivent pas inclure de champs personnalisés commençant par x-fc-, ni les champs réservés suivants :

  • connection

  • content-length

  • date

  • keep-alive

  • server

  • content-disposition:attachment

Avec le domaine par défaut aliyuncs.com , Function Compute ajoute systématiquement content-disposition: attachment à tous les en-têtes de réponse. Les navigateurs téléchargent alors les réponses sous forme de pièces jointes au lieu de les afficher. Configurez un nom de domaine personnalisé pour lever cette restriction. Pour plus d'informations, consultez Configurer un nom de domaine personnalisé .

Le système renvoie le code d'état 502 et le code d'erreur BadResponse si une réponse dépasse la limite suivante :

Ressource Limite
Taille des en-têtes 8 Ko (total des clés et valeurs)

Routage des chemins

Associez un nom de domaine personnalisé pour mapper différents chemins HTTP aux fonctions. Pour plus d'informations, consultez Configurer un nom de domaine personnalisé.

Appels HTTP (recommandé)

En mode passthrough, Function Compute transmet les requêtes HTTP des clients à votre serveur HTTP et renvoie les réponses HTTP aux clients. Certains champs réservés par le système ne sont pas transmis. Pour plus de détails, consultez Limites.

En-têtes de requête

Pour invoquer une fonction via un déclencheur HTTP ou un nom de domaine personnalisé, utilisez les en-têtes de requête suivants afin de contrôler le comportement de Function Compute :

Paramètre Type Obligatoire Exemple Description
X-Fc-Invocation-Type String Non Sync Mode d'invocation. Valeurs valides : Sync (invocation synchrone) et Async (invocation asynchrone). Pour plus d'informations, consultez Méthodes d'invocation.
X-Fc-Log-Type String Non Tail Méthode de retour des journaux. Valeurs valides : Tail (renvoie les 4 derniers Ko de journaux pour la requête en cours) et None (aucun journal renvoyé ; valeur par défaut).

En-têtes de réponse

Function Compute ajoute automatiquement l'en-tête de réponse suivant aux réponses des appels HTTP :

Paramètre Description Exemple
X-Fc-Request-Id ID de requête de l'invocation de la fonction. dab25e58-9356-4e3f-97d6-f044c4****

Appels API

Lorsque vous invoquez une fonction à l'aide de l'opération InvokeFunction, Function Compute convertit la requête en requête HTTP et la transmet à votre serveur HTTP sur le chemin fixe /invoke.

Conversion des requêtes (InvokeFunction vers HTTP)

Champ InvokeFunction Requête HTTP
Paramètre event Corps de la requête
Chemin /invoke (fixe)
Méthode POST (fixe)
Content-Type application/octet-stream (fixe)

Conversion des réponses (HTTP vers InvokeFunction)

Champ de réponse HTTP Réponse InvokeFunction
Corps de la réponse Corps de la réponse
En-têtes de réponse Perdus lors de la conversion
Code d'état Perdu lors de la conversion

Exemples de conversion

Requête :

Requête InvokeFunction Requête HTTP reçue par le serveur HTTP
"hello world"

POST /invoke HTTP/1.1

Host: 21.0.X.X

Content-Length: 11

Content-Type: application/octet-stream

hello world

Réponse :

Réponse HTTP Réponse InvokeFunction

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 2023 10:37:15 GMT

Content-Type: application/octet-stream

Content-Length: 28

Connection: keep-alive

{"errorMessage":"exception"}

{"errorMessage":"exception"}

Exemple de code

L'exemple Python (Flask) suivant implémente un serveur HTTP qui gère à la fois les appels HTTP et les appels API. Ce serveur écoute sur le port 9000 et traite les requêtes GET, POST, PUT et DELETE sur n'importe quel chemin.

import os
from flask import Flask, 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):
    # Read the request ID injected by Function Compute
    rid = request.headers.get(REQUEST_ID_HEADER)
    # Read the request body
    data = request.stream.read()
    print("Path: " + path)
    print("Data: " + str(data))
    # Return a response body, status code, and a custom header
    return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

Points clés :

  • @app.route('/', defaults={'path': ''}) : gère les requêtes vers le chemin racine.

  • @app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE']) : traite les requêtes vers tout autre chemin et passe la valeur du chemin à hello_world via le paramètre path.

  • request.headers.get(REQUEST_ID_HEADER) : lit l'en-tête x-fc-request-id injecté par Function Compute dans chaque requête.

  • request.stream.read() : lit le corps de la requête.

  • return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))] : renvoie un corps de réponse contenant "Hello, World!", le code d'état 200 ainsi qu'un en-tête de réponse Function-Name issu de la variable d'environnement FC_FUNCTION_NAME.

Étapes suivantes