Google Cloud Platform 的无服务器实验:第三部分





5.00/5 (3投票s)
将函数与其他 Web 服务连接
7.1. 通过计时器调用函数
我们来设想一下,您想发送一份每周的通讯。假设您知道如何自动化其内容(为什么不把您最近喜欢的文章放进去呢? https://codeproject.org.cn/Articles/1159363/Export-Selected-Items-from-RSS-Reader-using-Micros),在本文系列的前两部分之后,编写一个发送电子邮件的函数应该不是什么大问题。
但是如何安排您的函数的定期调用呢?当然,您仍然不希望花钱购买一个全职服务器来随时调用您。
一种便宜的选择是使用 IFTTT.com 或其替代品。
IFTTT(IF This Than That)允许通过组合各种服务来创建所谓的Applet。
创建免费的IFTTT 账户 https://ifttt.com/join ,登录后转到您的Applets。
从那里,创建一个新 Applet。
我们的函数将由日期和时间服务触发,该服务除了其他可能性(向下滚动 https://ifttt.com/date_and_time 并单击日期和时间触发器和操作)之外,还允许在您指定的日期和时间触发(触发器是Applet 的This 部分)每周的每天在。
单击This,找到并选择日期和时间。第一次选择服务通常需要连接和设置它。
在下一步中,选择触发器 每周的每天在并填写其属性。
作为that(Applet 的Action 部分),使用Webhooks 的唯一Action Make a web request。
作为URL,填写指向您的函数的路径(例如,从第一课中的 https://us-central1-ProjectName-123456.cloudfunctions.net/helloWorldFunction),Method 选择POST,Content Type 选择application/json(如果您的函数需要)。然后您的Applet action 的Body 应该如下所示
{"message": "Hello!"}
由于当前触发器是日期和时间,因此URL 或Body 还应包含其任何属性(Add ingredient),例如
{"message": "Hello, it's {{CheckTime}}!"}
每个Applet 都有自己的日志。从My Applets 中选择一个,转到其Configure(右上角的齿轮图标)并单击 View activity log。
使用正确填写的URL,在Applet 运行后,GCP Function 的日志中也会出现新的条目。
请记住,示例 `helloWorldFunction` 需要必需的 `body.message`。
if (req.body.message === undefined) {
// This is an error case, as "message" is required.
res.status(400).send('No message defined!');
如果没有发布 `message`,Applet 应该会进入错误状态,有时甚至在创建过程中就会出现。在Applet 的日志中,而不是 `Applet ran`,会出现 `Applet failed`,几分钟后IFTTT 会再尝试一次,这在(IFTTT 和GCP)日志中都可以看到。
7.1. 其他触发器
正如在创建新 Applet 时所见,Webhooks 的触发不限于日期和时间。
触发器也可以是邮件(Email、Gmail、Office 365 Mail),所以也许您可以使用IFTTT 而不是上一章中的Mailgun。
当前列表包含RSS、Facebook、Twitter、Pocket、Calendar、GitHub、Weather 甚至Dishwasher 等服务,并且还在不断增长。
Webhooks 也可以作为Trigger。这样,您可以轻松地将您的Function 与例如Twitter 连接起来,而无需了解Twitter API 的详细信息或安装特定的软件包http://www.amitdeshmukh.co/getting-started-google-cloud-functions/。(某些服务可能存在更多替代软件包。)当然,连接更多服务器意味着更多的延迟和更多的潜在故障。不过,值得尝试一下。
查看您的Webhooks 设置,您将看到与之关联的唯一URL。它应该看起来像 https://maker.ifttt.com/use/abcdefghijklmnopqrstuvwxyz。单击Edit connection 按钮将更改URL。
在 Web 浏览器中打开您的 https://maker.ifttt.com/use/abcdefghijklmnopqrstuvwxyz ,您将看到一个页面,其中包含
Your key is: abcdefghijklmnopqrstuvwxyz
信息和用于测试三个固定命名可选参数的表单
With an optional JSON body of:
{ "value1" : "", "value2" : "", "value3" : "" }
知道您的密钥后,打开 https://maker.ifttt.com/trigger/makertest/with/key/abcdefghijklmnopqrstuvwxyz ,您将看到
Congratulations! You've fired the makertest event
在日志 https://ifttt.com/activity/service/maker_webhooks 中,可以看到如下方式
EventName
makertest
OccurredAt
June 41, 2017 at 27:98PM
Value1
(none)
Value2
(none)
Value3
(none)
不要被日志所迷惑。变量名以小写字母开头。在 URL 中设置它们应该是这样的
not
7.2. 替代方案
除了IFTTT,您还可以尝试Zapier。
这里的Applets 被命名为Zaps,计时器是Schedule,Webhooks 也是Webhooks。
与第三方服务的连接方式与IFTTT 类似,但它们的列表并不相同。一些功能在Free Plan 中受到限制。
独特之处在于它们的电子邮件Parser。发送(转发)到与 parser 相关的电子邮件地址(例如 abcdef12@robot.zapier.com)的电子邮件会与预定义的模式进行比较,选定的部分可以成为在Zaps 中使用的文本变量。有时,这可以完全消除编写自己的电子邮件解析器(如 GCP Function)的需要。
第三部分结束。