Informatique sans serveur basée sur OpenWhisk, partie 2


Cet article poursuit la série de notes traduites sur OpenWhisk par Priti Desai . Aujourd'hui, nous allons examiner des exemples de déploiement de webhook GitHub, des signaux périodiques, ainsi que l'application la plus simple pour envoyer des messages à Slack.


Webhook Github


Les fonctions OpenWhisk peuvent être déclenchées par divers événements (par exemple, push, pull request, etc.) à partir du référentiel GitHub .


Voyons comment vous pouvez déployer une fonction pour gérer le webhook GitHub à l'aide de wskdeploy .


Première étape


Créez un fichier manifeste:


Pour gérer les événements avec GitHub, vous devez spécifier la source d'événement /whisk.system/github/webhook comme condition de déclenchement:


 packages: helloworld: actions: helloworld: location: src/hello.js runtime: nodejs:6 inputs: name: type: string description: name of a person place: type: string description: location of a person outputs: payload: type: string description: a simple greeting message, Hello World! triggers: GitHubWebhookTrigger: feed: /whisk.system/github/webhook rules: helloworldOnWebhook: action: helloworld trigger: GitHubWebhookTrigger 

Deuxième étape


Nous créons un fichier pour le déploiement, dans lequel nous définissons les valeurs des paramètres d'entrée username , repository , accessToken et events pour le traitement conditionnel de la source d'événement GitHubWebhookTrigger :


 application: name: SampleHelloWorld namespace: _ packages: helloworld: actions: helloworld: inputs: name: Amy place: Paris triggers: GitHubWebhookTrigger: inputs: username: pritidesai repository: pritidesai/helloworld accessToken: <accessToken> events: push 

Étape trois


Développez la fonction:


 ./wskdeploy -p ~/SampleHelloWorldApp/ ____ ___ _ _ _ _ _ /\ \ / _ \ _ __ ___ _ __ | | | | |__ (_)___| | __ /\ /__\ \ | | | | '_ \ / _ \ '_ \| | | | '_ \| / __| |/ / / \____ \ / | |_| | |_) | __/ | | | |/\| | | | | \__ \ < \ \ / \/ \___/| .__/ \___|_| |_|__/\__|_| |_|_|___/_|\_\ \___\/ |_| Packages: Name: helloworld bindings: * action: helloworld bindings: - name: name value: Amy - name: place value: Paris Triggers: * trigger: GitHubWebhookTrigger bindings: - name: accessToken value: **** - name: events value: push - name: username value: pritidesai - name: repository value: pritidesai/helloworld annotations: - name: feed value: /whisk.system/github/webhook Rules * rule: helloworldOnWebhook - trigger: GitHubWebhookTrigger - action: helloworld Do you really want to deploy this? (y/N): y Deploying package helloworld ... Done! Deploying action helloworld/helloworld ... Done! Deploying trigger feed GitHubWebhookTrigger ... Done! Deploying rule helloworldOnWebhook ... Done! Deployment completed successfully. 

Nous avons déployé la fonction hello world , appelée depuis GitHub chaque fois que nous mettons à jour le code dans le référentiel GitHub, et avons utilisé le webhook pour cela:



Nous pouvons vérifier la fonction déployée en créant de nouveaux changements de code dans le référentiel GitHub. Dans ce cas, de simples messages de bienvenue seront retournés. Essayons d'utiliser la charge utile lors de la mise à jour du code envoyé depuis GitHub via une requête POST. Ces données sont disponibles en tant que paramètres de fonction, par exemple:


 function main(params) { console.log("GitHub repository is at ", params.repository.url); return {commits: params.commits}; } 

Voici un extrait de la charge utile obtenue par l'édition normale de README.md:


 "commits" : [ { "author" : { "name" : Priti Desai, "username" : pritidesai }, "timestamp" : 2017-03-20T12:54:41-07:00, "removed" : [ ], "modified" : [ README.md ], "added" : [ ], "message" : Update README.md, "committer" : { "name" : GitHub, "email" : noreply@github.com, "username" : web-flow } } ], 

Vous pouvez découvrir une description détaillée de la façon dont le webhook GitHub se déclenche ici.


Signaux


Les fonctions OpenWhisk peuvent être déclenchées périodiquement par un signal interne (quelque chose comme des tâches cron). Essayons d'ajouter un déclencheur conditionnel sur un signal via wskdeploy .


Première étape


Pour traiter les signaux, vous devez spécifier la source d'événement /whisk.system/alarms/alarm comme condition de déclenchement dans le manifeste:


 packages: helloworld: actions: helloworld: location: src/hello.js runtime: nodejs:6 inputs: name: type: string description: name of a person place: type: string description: location of a person outputs: payload: type: string description: a simple greeting message, Hello World! triggers: Every12Hours: feed: /whisk.system/alarms/alarm rules: hellowroldOnCron: action: helloworld trigger: Every12Hours 

Deuxième étape


Créez un fichier pour le déploiement, spécifiez cron comme condition d'entrée, avec une valeur de Every12Hours . Vous pouvez également utiliser les deux options utilisées dans cron, traditionnelles et améliorées:


 <Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week>  <Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week> <Year> 

Contenu du fichier deployment.yaml:


 application: name: SampleHelloWorld namespace: _ packages: helloworld: actions: helloworld: inputs: name: Amy place: Paris triggers: Every12Hours: inputs: cron: "0 */12 * * *" 

Il est possible de spécifier la charge utile transmise lorsque le signal est déclenché (transmis comme paramètre de fonction à chaque fois qu'il est déclenché) comme paramètre trigger_payload :


 application: name: SampleHelloWorld namespace: _ packages: helloworld: actions: helloworld: inputs: name: Amy place: Paris triggers: Every12Hours: inputs: cron: "0 */12 * * * *" trigger_payload: "{\"name\":\"Mark\", \"place\":\"Barcelona\"}" 

Étape trois


Développez la fonction:


 ./wskdeploy -p ~/SampleHelloWorldApp/ ____ ___ _ _ _ _ _ /\ \ / _ \ _ __ ___ _ __ | | | | |__ (_)___| | __ /\ /__\ \ | | | | '_ \ / _ \ '_ \| | | | '_ \| / __| |/ / / \____ \ / | |_| | |_) | __/ | | | |/\| | | | | \__ \ < \ \ / \/ \___/| .__/ \___|_| |_|__/\__|_| |_|_|___/_|\_\ \___\/ |_| Packages: Name: helloworld bindings: * action: helloworld bindings: - name: name value: Amy - name: place value: Paris Triggers: * trigger: Every12Hours bindings: - name: cron value: 0 */12 * * * * annotations: - name: feed value: /whisk.system/alarms/alarm Rules * rule: helloworldEvery12Hours - trigger: Every12Hours - action: helloworld Do you really want to deploy this? (y/N): y Deploying package helloworld ... Done! Deploying action helloworld/helloworld ... Done! Deploying trigger feed Every12Hours ... Done! Deploying rule helloworldEvery12Hours ... Done! Deployment completed successfully. 

Désormais, ac a une fonction Hello World qui s'exécute toutes les 12 heures. Nous pouvons le vérifier en activant la condition, comme indiqué précédemment


Paquet pour Slack


Pour envoyer des messages à Slack , un package pour Slack est proposé. Examinons la liaison de packages à l'aide de wskdeploy .


Première étape


Créez un fichier manifeste avec une liaison de package pour Slack. Pour ce faire, spécifiez-le en tant que dépendance, en définissant la valeur d'emplacement sur /whisk.system/slack :


 packages: SlackPackage: dependencies: slack-package-to-post-messages: location: /whisk.system/slack inputs: username: $SLACK_USERNAME url: $SLACK_URL channel: $SLACK_CHANNEL 

Tout d'abord, nous devons configurer la prise en charge du webhook entrant dans notre environnement de travail Slack. Vous pouvez configurer un nouveau webhook pour envoyer des messages au canal Slack à l'aide de cette instruction étape par étape .


Maintenant, nous ajoutons le package pour Slack à notre application d'envoi de messages au canal Slack toutes les heures en utilisant ce manifeste:


 packages: SlackPackage: dependencies: slack-package-to-post-messages: location: /whisk.system/slack inputs: username: $SLACK_USERNAME url: $SLACK_URL channel: $SLACK_CHANNEL actions: post-to-slack: function: actions/post-to-slack.js runtime: nodejs:6 inputs: message: type: string description: message to post on slack slack_package: type: string description: slack package name triggers: everyhour: feed: /whisk.system/alarms/alarm rules: post-to-slack-every-hour: action: post-to-slack trigger: everyhour 

Le contenu de la fonction post-to-slack.js peut être consulté ici .


Deuxième étape


Créez un fichier pour le déploiement:


 application: name: AppToPostToSlack packages: SlackPackage: actions: post-to-slack: inputs: message: "Hello from WskDeploy!" slack_package: slack-package-to-post-messages triggers: everyhour: inputs: cron: "0 */1 * * *" 

Étape trois


Développez la fonction:


 ./wskdeploy -p ~/AppToPostToSlack/ ____ ___ _ _ _ _ _ /\ \ / _ \ _ __ ___ _ __ | | | | |__ (_)___| | __ /\ /__\ \ | | | | '_ \ / _ \ '_ \| | | | '_ \| / __| |/ / / \____ \ / | |_| | |_) | __/ | | | |/\| | | | | \__ \ < \ \ / \/ \___/| .__/ \___|_| |_|__/\__|_| |_|_|___/_|\_\ \ __\/ |_| Packages: Name: SlackPackage bindings: * dependency: slack-package-to-post-messages location: /whisk.system/slack * action: post-to-slack bindings: - message : "Hello from WskDeploy!" - slack_package : "slack-package-to-post-messages" annotations: Triggers: * trigger: everyhour bindings: - cron : "0 */1 * * *" annotations: - name: feed value: /whisk.system/alarms/alarm Rules * rule: post-to-slack-every-hour - trigger: everyhour - action: SlackPackage/post-to-slack Do you really want to deploy this? (y/N): y Deployment completed successfully. 

À cette étape, nous avons déjà une fonction de post-relâchement qui s'exécute 1 fois par heure. Vous pouvez le vérifier en activant la condition, comme indiqué précédemment . Après l'activation, nous devrions recevoir un nouveau message sur le canal Slack:


 Activation: post-to-slack (9909dd5229e84526bff9902a2cd860df) [ "2017-09-12T23:05:17.17872899Z stdout: Hello from WskDeploy!", "2017-09-12T23:05:17.549177677Z stdout: Posted message to slack" ] 

Autres articles de cycle


Informatique sans serveur basée sur OpenWhisk, partie 1
Informatique sans serveur basée sur OpenWhisk, partie 2
Informatique sans serveur basée sur OpenWhisk, partie 3
Informatique sans serveur basée sur OpenWhisk, partie 4

Source: https://habr.com/ru/post/fr477628/


All Articles