基于OpenWhisk的无服务器计算,第2部分


本文是Priti Desai撰写的有关OpenWhisk的一系列翻译说明的继续。 今天,我们将看一下GitHub Webhook部署,定期信号以及向Slack发送消息的最简单应用程序的示例。


Github Webhook


OpenWhisk函数可以由GitHub存储库中的各种事件(例如,push,pull request等)触发。


让我们看看如何使用wskdeploy部署函数来处理GitHub webhook。


第一步


创建清单文件:


要使用GitHub处理事件,您需要指定事件源/whisk.system/github/webhook作为触发条件:


 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 

第二步


我们创建一个用于部署的文件,在其中设置输入参数usernamerepositoryaccessTokenevents的值,以对事件源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 

第三步


扩展功能:


 ./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. 

我们部署了hello world函数,每次在GitHub存储库中更新代码时都会从GitHub中调用该函数,并使用webhook进行此操作:



我们可以通过在GitHub存储库中创建新的代码更改来检查已部署的功能。 在这种情况下,将返回简单的欢迎消息。 让我们尝试在通过POST请求更新从GitHub发送的代码时使用有效负载。 此数据可用作功能参数,例如:


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

这是通过常规编辑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 } } ], 

您可以在此处了解有关GitHub webhook触发方式的详细说明


讯号


OpenWhisk函数可以由内部信号定期触发(类似于cron任务)。 让我们尝试通过wskdeploy在信号上添加条件触发器。


第一步


要处理信号,必须将事件源/whisk.system/alarms/alarm指定为清单中触发的条件:


 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 

第二步


创建一个用于部署的文件,将cron指定为输入条件,其值为Every12Hours 。 您还可以同时使用cron,传统的和增强的两个选项:


 <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> 

deploy.yaml文件的内容:


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

可以将触发信号时发送的有效负载(每次触发时作为功能参数发送)指定为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\"}" 

第三步


扩展功能:


 ./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. 

从现在开始,交流电具有每12小时运行一次的hello world函数。 我们可以通过激活条件来检查它,如之前所示


松弛包


为了向Slack发送消息,提供了Slack软件包 。 让我们看一下使用wskdeploy包绑定。


第一步


创建带有用于Slack的程序包绑定的清单文件。 为此,请将其指定为依赖项,并将位置值设置为/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 

首先,我们需要在Slack工作环境中配置对传入Webhook的支持。 您可以使用此分步说明配置新的Webhook,以将消息发送到Slack频道。


现在,我们将Slack软件包添加到我们的应用程序中,以使用以下清单将消息每小时发送到Slack频道:


 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 

post-to-slack.js函数的内容可以在此处查看。


第二步


创建用于部署的文件:


 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 * * *" 

第三步


扩展功能:


 ./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. 

在这一步,我们已经拥有一个从后到松弛的功能,该功能每小时运行1次。 您可以通过激活条件来验证它, 如前所述 。 激活后,我们应该在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" ] 

其他自行车文章


基于OpenWhisk的无服务器计算,第1部分
基于OpenWhisk的无服务器计算,第2部分
基于OpenWhisk的无服务器计算,第3部分
基于OpenWhisk的无服务器计算,第4部分

Source: https://habr.com/ru/post/zh-CN477628/


All Articles