Configurer l'exécution et les secrets
Définir le délai et la mémoire d'une function, autoriser les hôtes sortants et stocker des identifiants dans des bundles de secrets.
Définissez le cadre d'exécution de votre function, ouvrez les appels réseau sortants dont elle a besoin, et fournissez-lui des identifiants sans les inscrire dans votre source. Tout ce qui suit est propre à chaque function, à l'exception des bundles de secrets, partagés à l'échelle du tenant.
Avant de commencer
- La function existe déjà. Sinon, commencez par Créer et compiler une function.
- Vous êtes Admin et travaillez dans l'organisation globale.
- Préparez les noms d'hôtes exacts des API appelées par votre gestionnaire. Les caractères génériques ne sont pas acceptés.
L'interface Functions est uniquement en anglais
Les écrans Functions ne sont pas traduits ; les libellés sont donc cités en anglais dans cet article.
Limites d'exécution
Ouvrez la function et utilisez l'onglet Settings. La première carte encadre une invocation isolée.
| Réglage | Plage | Par défaut | Ce qu'il contrôle |
|---|---|---|---|
| Timeout (ms) | 50 – 2000 | 2000 | Le temps d'exécution accordé à votre gestionnaire. C'est aussi la limite de traitement effective : une boucle emballée est interrompue à l'expiration du délai. |
| Max memory pages | 1 – 64 | 32 | La mémoire disponible pour votre gestionnaire, à raison de 64 Kio par page. La valeur par défaut correspond à 2 Mio et le plafond à 4 Mio. |
Laisser un champ vide applique la valeur par défaut du service. Comme le délai par défaut est déjà le plafond, la seule direction utile est de le réduire.
Sur un hook, un dépassement de délai est une inscription refusée — pas une dégradation en douceur
Un hook s'exécute dans la requête d'un utilisateur réel : un délai de 2000 ms peut donc ajouter deux secondes à chaque inscription couverte par l'association. Il est tentant de le resserrer, mais les hooks échouent en mode fermé : un gestionnaire qui dépasse son délai est traité comme un refus, et un délai plus court échange donc de la latence contre des clients perdus.
Faites le calcul avant de le modifier. Votre gestionnaire dispose de 2000 ms au maximum, et une seule requête HTTP en son sein peut prendre jusqu'à 1500 ms. Réglez le gestionnaire sur 400 ms parce que la médiane de votre fournisseur est de 180 ms, et chaque réponse lente de la traîne — incident du fournisseur, accroc DNS, renégociation TLS — refusera une inscription réelle.
Laissez de la marge pour la traîne lente de votre dépendance, et interceptez ses échecs dans le code plutôt que de les laisser expirer : un dépassement de délai du gestionnaire ne peut pas être intercepté, une erreur HTTP oui. Voir quand votre fournisseur est indisponible.
Au-delà du délai, deux limites s'appliquent à toute function et ne peuvent pas être relevées : un maximum de 20 appels SDK par invocation, et un délai de 1500 ms sur chaque requête HTTP.
Hôtes autorisés
La deuxième carte est la liste blanche du réseau sortant. C'est la raison la plus fréquente pour laquelle un gestionnaire fonctionnel échoue en production.
- Une function sans hôte autorisé voit toutes ses requêtes sortantes refusées. C'est l'état par défaut d'une nouvelle function.
- Les entrées sont des noms d'hôtes exacts, comparés sans tenir compte de la casse —
api.example.com. Les caractères génériques, les chemins, les ports et les adresses IP brutes sont rejetés. - Seuls
httpethttpssont autorisés. - Vous pouvez déclarer jusqu'à 16 hôtes. La carte affiche un compteur en temps réel.
Saisissez un nom d'hôte, puis appuyez sur Entrée ou sélectionnez Add. Chaque hôte devient une puce supprimable.
Les adresses privées et internes sont toujours refusées
Les plages réseau privées, la boucle locale, les adresses lien-local et les noms d'hôtes internes du cluster sont bloqués même si vous les ajoutez à la liste. La vérification est répétée après résolution DNS : un nom d'hôte public qui résout vers une adresse privée est donc également refusé. Un appel bloqué lève une erreur EGRESS_BLOCKED dans votre gestionnaire.

Configuration du plugin
La troisième carte contient des paires clé-valeur libres que votre gestionnaire lit à l'exécution avec OmniLab.Config.get. À utiliser pour ce qui varie d'un environnement ou d'une organisation à l'autre sans être sensible : un identifiant de gabarit, un indicateur de fonctionnalité, une URL de base.
const templateId = OmniLab.Config.get("brevo_template_id");Vous pouvez stocker jusqu'à 32 clés, pour un total de 4 Ko. Lire une clé absente retourne undefined. Les lignes dont la clé est vide sont supprimées à l'enregistrement.
Ne placez jamais d'identifiants dans la configuration du plugin
Les valeurs de configuration sont stockées en clair et lisibles par toute personne pouvant ouvrir la function. Les clés d'API, jetons et mots de passe relèvent d'un bundle de secrets.
Bundles de secrets
Un bundle de secrets regroupe des identifiants sous une clé unique — par exemple un bundle brevo contenant api_key. Les bundles existent au niveau du tenant afin que plusieurs functions puissent les partager, et les valeurs sont en écriture seule : une fois enregistrées, elles ne sont plus jamais affichées.
Créer un bundle
Faites défiler jusqu'à la section Secrets, sous la liste des functions dans l'onglet Functions, puis sélectionnez New secret.
| Champ | À renseigner |
|---|---|
| Key | Le nom utilisé dans le code. Lettres minuscules, chiffres et tirets bas, commençant par une lettre, jusqu'à 32 caractères. Définitif. |
| Display name | Un libellé lisible, par exemple Brevo Production. |
| Description | Note facultative sur l'usage des identifiants. |
Ajoutez ensuite un secret par identifiant, avec une clé telle que API_KEY et sa valeur. Sélectionnez Save secrets.
Un tenant peut détenir 5 bundles, contenant chacun jusqu'à 32 secrets.

Associer un bundle à une function
Sur l'onglet Settings de la function, utilisez la carte Secret bundles et sélectionnez les bundles que cette function doit pouvoir lire. Une function peut en associer jusqu'à 5.
Une fois l'association faite, la carte liste une référence prête à copier pour chaque secret du bundle. Lisez une valeur à l'exécution par son nom complet :
const apiKey = OmniLab.Config.getSecret("brevo.api_key");Une function ne peut lire que les secrets des bundles qui lui sont associés. Lire une clé inexistante lève une erreur NOT_FOUND plutôt que de retourner une valeur vide : une faute de frappe échoue donc bruyamment.
Modifier ou retirer un secret
Réouvrez le bundle. Les valeurs existantes affichent un masque : laissez une ligne intacte pour conserver sa valeur, saisissez une nouvelle valeur pour la remplacer, ou utilisez le bouton de la ligne pour la marquer en suppression. Un bundle ne peut pas être supprimé tant qu'une function y fait référence.
Enregistrer vos modifications
Sélectionnez Save settings. Les limites d'exécution, les hôtes autorisés, la configuration et les associations de bundles prennent effet à l'invocation suivante — aucun d'entre eux ne nécessite de recompilation, puisqu'aucun ne modifie votre code compilé.
Si quelque chose bloque
Un appel HTTP échoue avec EGRESS_BLOCKED. Le nom d'hôte n'est pas dans la liste, est orthographié différemment, utilise un protocole autre que HTTP ou HTTPS, ou résout vers une adresse privée.
La lecture d'un secret lève NOT_FOUND. Vérifiez que le bundle est bien associé à cette function dans l'onglet Settings, et que la référence s'écrit cle_du_bundle.cle_du_secret — les deux parties comptent.
Un bundle associé apparaît comme inconnu. Le bundle a été supprimé après l'association. Retirez la référence obsolète et associez un bundle existant.
L'écriture d'un champ personnalisé de contact est rejetée. Les clés commençant par system. ou feature. sont réservées par la plateforme. Choisissez une autre clé.
Une valeur de délai est refusée. Le champ accepte de 50 à 2000 millisecondes. Les valeurs supérieures au plafond ne sont pas acceptées, car ce plafond existe précisément pour éviter qu'un hook synchrone ne reste plus longtemps sur le chemin critique.
Pour aller plus loin
Functions de type hook
Écrire une function qui s'exécute au cœur d'une opération OmniLab et décide si elle se poursuit, puis l'associer à un point d'ancrage.
Tester et superviser des functions
Lancer des invocations de test dans l'environnement isolé réel, lire le journal d'exécution et diagnostiquer une function en échec ou silencieuse.