6.7. Développer des fonctions Python


Important

OpenShift Serverless Functions with Python est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

Après avoir créé un projet de fonction Python, vous pouvez modifier les fichiers modèles fournis pour ajouter une logique commerciale à votre fonction. Il s'agit notamment de configurer l'invocation de la fonction ainsi que les en-têtes et les codes d'état renvoyés.

6.7.1. Conditions préalables

6.7.2. Structure du modèle de fonction Python

Lorsque vous créez une fonction Python en utilisant l'interface de programmation Knative (kn), le répertoire du projet ressemble à un projet Python classique. Les fonctions Python ont très peu de restrictions. Les seules exigences sont que votre projet contienne un fichier func.py qui contient une fonction main() et un fichier de configuration func.yaml.

Les développeurs ne sont pas limités aux dépendances fournies dans le fichier modèle requirements.txt. Des dépendances supplémentaires peuvent être ajoutées comme dans tout autre projet Python. Lorsque le projet est construit pour être déployé, ces dépendances seront incluses dans l'image du conteneur d'exécution créé.

Les fonctions de déclenchement http et event ont la même structure de modèle :

Structure du modèle

fn
├── func.py 1
├── func.yaml 2
├── requirements.txt 3
└── test_func.py 4

1
Contient une fonction main().
2
Utilisé pour déterminer le nom et le registre de l'image.
3
Des dépendances supplémentaires peuvent être ajoutées au fichier requirements.txt comme dans tout autre projet Python.
4
Contient un test unitaire simple qui peut être utilisé pour tester votre fonction localement.

6.7.3. A propos de l'invocation des fonctions Python

Les fonctions Python peuvent être invoquées à l'aide d'une simple requête HTTP. Lorsqu'une requête est reçue, les fonctions sont invoquées avec un objet context comme premier paramètre.

L'objet context est une classe Python dotée de deux attributs :

  • L'attribut request est toujours présent et contient l'objet Flask request.
  • Le deuxième attribut, cloud_event, est renseigné si la demande entrante est un objet CloudEvent.

Les développeurs peuvent accéder à toutes les données de CloudEvent à partir de l'objet contextuel.

Exemple d'objet contextuel

def main(context: Context):
    """
    The context parameter contains the Flask request object and any
    CloudEvent received with the request.
    """
    print(f"Method: {context.request.method}")
    print(f"Event data {context.cloud_event.data}")
    # ... business logic here

6.7.4. Valeurs de retour des fonctions Python

Les fonctions peuvent renvoyer n'importe quelle valeur prise en charge par Flask. En effet, le cadre d'invocation transmet ces valeurs directement au serveur Flask.

Exemple :

def main(context: Context):
    body = { "message": "Howdy!" }
    headers = { "content-type": "application/json" }
    return body, 200, headers

Les fonctions peuvent définir des en-têtes et des codes de réponse en tant que valeurs de réponse secondaires et tertiaires à partir de l'invocation de la fonction.

6.7.4.1. Retourner les CloudEvents

Les développeurs peuvent utiliser le décorateur @event pour indiquer à l'invocateur que la valeur de retour de la fonction doit être convertie en CloudEvent avant d'envoyer la réponse.

Exemple :

@event("event_source"="/my/function", "event_type"="my.type")
def main(context):
    # business logic here
    data = do_something()
    # more data processing
    return data

Cet exemple envoie un CloudEvent comme valeur de réponse, avec un type de "my.type" et une source de "/my/function". La propriété CloudEvent data est définie sur la variable data renvoyée. Les attributs décoratifs event_source et event_type sont tous deux facultatifs.

6.7.5. Test des fonctions Python

Vous pouvez tester les fonctions Python localement sur votre ordinateur. Le projet par défaut contient un fichier test_func.py, qui fournit un test unitaire simple pour les fonctions.

Note

Le cadre de test par défaut pour les fonctions Python est unittest. Vous pouvez utiliser un autre cadre de test si vous le souhaitez.

Conditions préalables

  • Pour exécuter localement des tests de fonctions Python, vous devez installer les dépendances nécessaires :

    $ pip install -r requirements.txt

Procédure

  1. Naviguez jusqu'au dossier de votre fonction qui contient le fichier test_func.py.
  2. Exécutez les tests :

    $ python3 test_func.py

6.7.6. Prochaines étapes

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.