Comment démarrer avec les fonctions sans serveur de DigitalOcean
Agence web » Actualités du digital » Comment démarrer avec les fonctions sans serveur de DigitalOcean

Comment démarrer avec les fonctions sans serveur de DigitalOcean

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 présenterons une démonstration de la création de votre propre fonction simple. Functions a 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 ou 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 :

  • Aller 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.

Mise en place

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.

image des fonctions de DigitalOcean

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 Doctl’s serverless extension. Cela ajoute un support complet pour le développement et le déploiement de fonctions.

$ doctl serverless install
Downloading...Unpacking...Installing...Cleaning up...
Done

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

$ doctl serverless connect
Connected to function namespace 'fn-3c1d9001-8e04-44e8-9375-c22b13c4a41a' on API host 'https://faas-lon1-917a94a7.doserverless.co'

Vous devriez maintenant être prêt à commencer à écrire des fonctions. Exécutez le serverless status commande pour vérifier que tout fonctionne :

$ doctl serverless status
Connected to function namespace 'fn-3c1d9001-8e04-44e8-9375-c22b13c4a41a' on API host 'https://faas-lon1-917a94a7.doserverless.co'
Sandbox version is 3.1.1-1.2.1

La sortie ci-dessus confirme que la prise en charge des fonctions est installée et prête à être utilisée.

La serverless la commande 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 sur serverless pour ce guide.

Création d’une fonction

Utilisez la commande suivante pour créer un nouveau projet Functions :

$ doctl serverless init --language js demo-project
A local sandbox area 'demo-project' was created for you.
You may deploy it by running the command shown on the next line:
  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 échafaudé pour vous :

$ tree demo-project
demo-project
├── packages
│   └── sample
│       └── hello
│           └── hello.js
└── project.yml

3 directories, 2 files

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

targetNamespace: ''
parameters: {}
packages:
  - name: sample
    environment: {}
    parameters: {}
    annotations: {}
    actions:
      - name: hello
        binary: false
        main: ''
        runtime: 'nodejs:default'
        web: true
        parameters: {}
        environment: {}
        annotations: {}
        limits: {}

Le modèle de démarrage configure un package appelé sample. Dans ce package, il y a une seule action (endpoint) nommée hello qui est exécuté à l’aide du runtime 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 || 'stranger'
    let greeting = 'Hello ' + name + '!'
    console.log(greeting)
    return {"body": greeting}
}

Ceci est du code JavaScript normal. La main() La fonction 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 demande de l’utilisateur. Vous pouvez également configurer des arguments statiques, en utilisant le parameters sur les actions, les packages et le projet de niveau supérieur dans votre project.yml dossier.

Les fonctions doivent renvoyer un objet décrivant la réponse HTTP à émettre. La body 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 .
Deploying '/home/james/@scratch/demo-project'
  to namespace 'fn-3c1d9001-8e04-44e8-9375-c22b13c4a41a'
  on host 'https://faas-lon1-917a94a7.doserverless.co'
Deployment status recorded in '.nimbella'

Deployed functions ('doctl sbx fn get <funcName> --url' for URL):
  - sample/hello

La serverless deploy La commande 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 invoke sample/hello -p name:howtogeek
{
    "body": "Hello howtogeek!"
}

La -p paramètre 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)

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

$ curl $URL?name=howtogeek
Hello howtogeek!

La name Le paramètre de chaîne de requête 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 hello.js fichier donc il ressemble à ceci:

function main(args) {
    return {
        body: {
            value: (args.value * 2),
            timestamp: Date.now()
        },
        headers: {
            "Content-Type": "application/json"
        }
    };
}

Redéployez votre fonction :

$ doctl serverless deploy .

Cette fonction double naïvement le nombre donné par le value paramètre de requête. Il inclut également un horodatage avec chaque corps de réponse. La headers champ est utilisé dans l’objet de réponse pour appliquer un JSON correct Content-Type.

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 chronophage. Exécutez le watch pendant que vous travaillez pour déployer automatiquement les modifications après avoir modifié vos fichiers :

$ doctl serverless watch .
Watching '.' [use Control-C to terminate]

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

La serverless deploy La commande 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 plateforme 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

image de la création d'une application dans DigitalOcean App Platform

Ensuite, dirigez-vous vers votre panneau de contrôle DigitalOcean et cliquez sur le lien « Applications » dans la barre latérale gauche. Cliquez sur le bouton « Créer une application » 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 ».

image de la création d'une application dans DigitalOcean App Platform

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

image d'une application Functions dans DigitalOcean App Platform

L’écran suivant devrait confirmer que vous serez facturé avec le forfait Fonctions.

image d'une application Functions dans DigitalOcean App Platform

Appuyez sur « Créer des ressources » pour provisionner votre application et démarrer son premier déploiement. Les progrès seront affichés sur le tableau de bord.

image d'une application Functions en cours de déploiement dans la plate-forme d'applications DigitalOcean

Les points de terminaison de votre fonction seront accessibles publiquement une fois le déploiement terminé. Vous pouvez trouver la valeur par défaut de votre application ondigitalocean.app domaine 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.

image de la recherche du domaine d'une application dans la plate-forme d'applications DigitalOcean

Les fonctions sont automatiquement exposées en tant qu’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.

Sommaire

DigitalOcean Functions est le nouveau concurrent dans le domaine des fonctions sans serveur de plus en plus encombré. 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 pouvez vous 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 project.yml fichier, vous donnant un moyen rapide et facile de créer des points de terminaison à la demande relativement complexes.

★★★★★