Comment démarrer avec les fonctions sans serveur de DigitalOcean

0
58

Functions est l'un des derniers ajouts à la plate-forme cloud DigitalOcean. Il fournit une méthode de premier ordre pour développer des fonctions sans serveur sans quitter DigitalOcean. Votre code est exécuté à la demande lorsqu'il est appelé, ce qui élimine le provisionnement et la maintenance manuels du serveur.

Dans cet article, nous expliquerons ce que DigitalOcean Functions prend en charge et vous présenterons une démonstration de créer votre propre fonction simple. Functions propose un niveau gratuit qui fournit 25 Gio-heures par mois, avec un Gio-seconde calculé comme la consommation de mémoire multipliée par le temps d'exécution de chaque appel de fonction.

Fonctionnalités prises en charge

Lancé en mai 2022, Functions offre aux clients de DigitalOcean une option intégrée pour exécuter des charges de travail sans serveur. Chaque fonction obtient son propre point de terminaison d'API qui exécute le code que vous avez créé. Vous n'avez pas besoin de configurer vos propres serveurs ni de conteneuriser le projet avant le déploiement. Les fonctions en direct sont hébergées par le backend de la plate-forme d'applications de DigitalOcean.

Les fonctions peuvent s'intégrer aux bases de données gérées de DigitalOcean pour faciliter le stockage persistant des données. Ils sont également livrés avec une CLI complète qui vous permet de déployer et de tester votre code dans votre terminal.

La version initiale de la plate-forme prend en charge cinq environnements de programmation différents :

  • Go 1.17
  • Node.js 14
  • Node.js 14 (compatible avec les fonctions AWS Lambda)
  • PHP 8
  • Python 3.9

Vous devrez être à l'aise pour écrire votre code dans l'un de ces langages pour le déployer en tant que fonction. D'autres runtimes pourraient être pris en charge à l'avenir.

Préparation

Il est possible de lancer de nouvelles fonctions à l'aide du panneau de contrôle Web de DigitalOcean ou de Doctl, sa CLI orientée développeur. Nous nous concentrons sur l'approche Doctl basée sur les terminaux pour les besoins de cet article. Cela expose toutes les fonctionnalités de Functions et constitue la voie prévue pour tous les cas d'utilisation, sauf les plus simples. Assurez-vous que la dernière version de Doctl est installée et authentifiée sur votre compte DigitalOcean avant de continuer.

< /p>

Vous devrez effectuer d'autres étapes de configuration si c'est la première fois que vous utilisez les fonctions DigitalOcean. Terminez d'abord l'installation de l'extension serverless de Doctl. Cela ajoute une prise en charge complète du développement et du déploiement de fonctions.

$ doctl serverless install Téléchargement…Décompression…Installation…Nettoyage… Terminé

Connectez ensuite les fonctionnalités sans serveur à votre compte DigitalOcean :

$ doctl serverless connect Connecté à l'espace de noms de fonction 'fn-3c1d9001-8e04-44e8-9375-c22b13c4a41a' sur l'hôte API 'https://faas-lon1-917a94a7.doserverless .co'

Vous devriez maintenant être prêt à commencer à écrire des fonctions. Exécutez la commande d'état sans serveur pour vérifier que tout fonctionne :

$ doctl serverless status Connecté à l'espace de noms de fonction 'fn-3c1d9001-8e04-44e8-9375-c22b13c4a41a' sur l'hôte API 'https://faas-lon1-917a94a7.doserverless.co' La version de Sandbox est 3.1.1-1.2.1 < p>La sortie ci-dessus confirme que la prise en charge des fonctions est installée et prête à être utilisée.

La commande sans serveur est un alias de sandbox. Au moment de la rédaction, les deux mots-clés ont des fonctionnalités identiques et sont utilisés de manière interchangeable dans la documentation de DigitalOcean. Nous standardisons le sans serveur pour ce guide.

Création d'une fonction

Utilisez la commande suivante pour créer un nouveau projet Functions :< /p>$ doctl serverless init –language js demo-project Une zone sandbox locale 'demo-project' a été créée pour vous. Vous pouvez le déployer en exécutant la commande indiquée sur la ligne suivante : doctl sandbox deploy demo-project

Cette commande crée une nouvelle fonction JavaScript dans demo-project dans votre répertoire de travail. Inspectez le contenu de ce répertoire pour voir ce que Doctl a élaboré pour vous :

$ tree demo-project demo-project ├── packages │ └── sample │ └── hello │ └── hello.js └─ ─ project.yml 3 répertoires, 2 fichiers

Le fichier project.yml est l'endroit où vous configurez votre projet de fonctions et les points de terminaison qu'il fournit.

targetNamespace : '' parameters : {} packages : – nom : exemple d'environnement : {} paramètres : {} annotations : {} actions : – nom : bonjour binaire : faux main : '' runtime : 'nodejs:default' web : vrai paramètres : {} environnement : {} annotations : {} limites : {}

Le modèle de démarrage configure un package appelé sample. Dans ce package, il existe une seule action (endpoint) nommée hello qui est exécutée à l'aide de l'environnement d'exécution Node. Le code source de cette action est stocké dans packages/sample/hello/hello.js. Regardons ensuite ce fichier :

function main(args) { let name = args.name || 'étranger' let salutation = 'Bonjour ' + nom + '!' console.log(salutation) retour {"corps" : salutation} }

Ceci est du code JavaScript normal. La fonction main() sera invoquée chaque fois que votre fonction sera appelée. Il reçoit un objet contenant des arguments soumis en tant que données HTTP GET et POST dans la requête de l'utilisateur. Vous pouvez également configurer des arguments statiques, en utilisant le champ de paramètres sur les actions, les packages et le projet de niveau supérieur dans votre fichier project.yml.

Les fonctions doivent renvoyer un objet qui décrit la réponse HTTP au problème. Le champ du corps devient les données incluses dans la réponse.

Invoquer et déployer des fonctions

Ce projet est prêt à fonctionner. Utilisez cette commande pour déployer votre fonction :

$ doctl serverless deploy . Déploiement de '/home/james/@scratch/demo-project' dans l'espace de noms 'fn-3c1d9001-8e04-44e8-9375-c22b13c4a41a' sur l'hôte 'https://faas-lon1-917a94a7.doserverless.co' Statut de déploiement enregistré dans '.nimbella' Fonctions déployées ('doctl sbx fn get <funcName> –url' pour l'URL) : – sample/hello

La commande de déploiement sans serveur prend un argument, le chemin d'accès au répertoire qui contient vos fonctions. Utilisation . lorsque la racine de votre projet est déjà votre répertoire de travail.

Vous pouvez maintenant tester votre fonction à l'aide de la CLI :

$ doctl serverless functions invoque sample/hello -p name:howtogeek { “body” : “Bonjour howtogeek !” }

Le paramètre -p définit un argument qui est transmis à votre code. Cet exemple montre comment la valeur de retour de votre fonction devient le corps de la réponse HTTP.

Essayez ensuite de faire une vraie requête API à votre fonction. Vous pouvez découvrir son URL avec la commande suivante :

$ URL=$(doctl serverless functions get sample/hello –url)

Utilisez curl ou votre propre client HTTP préféré pour atteindre ce point de terminaison :

$ curl $URL?name=howtogeek Bonjour howtogeek !

Le paramètre de chaîne de requête de nom a été transmis avec succès à la fonction.

Modification de votre fonction

Jusqu'à présent, nous utilisons l'exemple de code de DigitalOcean sans aucune modification. Cela ne vous mènera pas loin dans votre voyage sans serveur ! Modifiez votre fichier hello.js pour qu'il ressemble à ceci :

function main(args) { retour { corps : { valeur : (args.value * 2), horodatage : Date.now() }, en-têtes : { "Content-Type" : "application/json" } }; }

Redéployez votre fonction :

$ doctl serverless deploy .

Cette fonction double naïvement le nombre donné par le paramètre value request. Il inclut également un horodatage avec chaque corps de réponse. Le champ d'en-tête est utilisé dans l'objet de réponse pour appliquer un type de contenu JSON correct.

Vous pouvez appeler cette fonction en utilisant Doctl ou curl dans le même style que précédemment :

$ curl $URL ? value=2 { “timestamp”: 1654784122966, “value”: 4 }

Redéployer manuellement votre fonction après chaque changement est fastidieux et prend du temps. Exécutez la commande watch pendant que vous travaillez pour déployer automatiquement les modifications après avoir modifié vos fichiers :

$ doctl serverless watch . En train de regarder '.' [utilisez Control-C pour terminer]

Gardez la fenêtre du terminal ouverte pendant que vous développez votre fonction. Chaque nouveau déploiement enregistrera un message afin que vous sachiez quand vous pourrez tester vos modifications. Cela facilite une itération efficace au fur et à mesure que vous développez vos fonctions.

Vous pouvez également diffuser les journaux de vos fonctions. Ceci est inestimable lorsqu'une fonction se bloque ou ne se comporte pas comme prévu. Exécutez cette commande pour accéder aux journaux associés à votre fonction de démonstration :

$ doctl serverless activations logs –follow –function sample/hello

Une nouvelle ligne sera imprimée chaque fois que vous appelez votre fonction. Les journaux incluent également les messages que votre code émet vers la sortie standard et les flux d'erreurs de l'environnement.

Déploiement en production

Le serveur sans serveur La commande de déploiement est actuellement conçue pour une utilisation en développement uniquement. Vous pouvez déployer en production en créant un référentiel Git pour votre projet Functions et en le lançant à l'aide de la plate-forme d'applications de DigitalOcean.

Créez un nouveau projet sur GitHub ou GitLab et poussez votre code :

$ git init $ git remote add origin git@github.com:user/repo.git $ git add . $ git commit -m “initial commit” $ git push -u origin master

Ensuite, dirigez-vous vers votre panneau de configuration DigitalOcean et cliquez sur “Apps” lien dans la barre latérale gauche. Cliquez sur “Créer une application” bouton qui apparaît. Sur l'écran suivant, suivez les invites pour vous connecter à votre compte GitHub et sélectionnez votre nouveau référentiel. Appuyez sur le bouton bleu “Suivant” bouton.

DigitalOcean détectera automatiquement votre référentiel en tant que projet Functions si vous avez a obtenu un project.yml à sa racine. Cliquez sur “Passer à la révision” bouton pour continuer.

L'écran suivant devrait confirmer que vous serez facturé à l'aide du Planification des fonctions.

Appuyez sur “Créer des ressources” pour provisionner votre application et démarrer son premier déploiement. La progression sera affichée sur le tableau de bord.

 

Les points de terminaison de votre fonction seront accessibles publiquement une fois le déploiement terminé. Vous pouvez trouver le domaine ondigitalocean.app par défaut de votre application en faisant défiler la page Paramètres de l'application dans votre tableau de bord. Dans notre exemple, le domaine de l'application est sea-lion-app.7ougx.ondigitalocean.app.

< /p>

Les fonctions sont automatiquement exposées sous forme d'URI au format suivant :

<app>.ondigitalocean.app/<function-package>/<function-action>

Vous pouvez appeler l'exemple de fonction créé précédemment en effectuant la requête suivante :

$ curl https://sea-lion-app.7ougx.ondigitalocean.app/sample/hello?value=2 { “timestamp”: 1654786505969, “value”: 4 }

La fonction a été déployée avec succès ! Vous pouvez désormais utiliser l'onglet Domaines dans les paramètres de votre application pour associer un domaine personnalisé au lieu de celui par défaut.

Résumé

DigitalOcean Functions est le nouveau concurrent dans l'arène de plus en plus encombrée des fonctions sans serveur. La plate-forme vous permet de développer des fonctionnalités côté serveur sans gérer les machines virtuelles ni conteneuriser manuellement votre code.

Functions fournit une CLI complète pour créer et tester vos points de terminaison. Vous pouvez ensuite déployer vos fonctions sur la solution App Platform existante de DigitalOcean, soit en tant que projet autonome, soit dans le cadre d'une application plus large.

Une fois que vous avez une fonction de base opérationnelle, vous peut se référer à la documentation de DigitalOcean pour commencer à configurer des comportements plus avancés. Vous pouvez configurer des variables d'environnement, plusieurs actions et des limites de ressources à l'aide des champs de votre fichier project.yml, ce qui vous permet de créer rapidement et facilement des points de terminaison à la demande relativement complexes.

LIRE LA SUITE

  • › Examen du chargeur UGREEN Nexode 100 W : plus qu'assez de puissance
  • &rsaquo ; 10 excellentes fonctionnalités iPhone que vous devriez utiliser
  • › Test de la tablette Amazon Fire 7 (2022) : faible mais bon marché
  • › 10 nouvelles fonctionnalités de Windows 11 que vous devriez utiliser
  • › Pourquoi voulez-vous un Wi-Fi maillé, même si vous n'avez besoin que d'un seul routeur
  • &rsaquo ; Samsung Galaxy Z Flip 4 a des mises à niveau internes, pas des modifications de conception