TL;DR InfluxDB技术小贴士:InfluxDB Cloud中的API可调用脚本
作者:Anais Dotis-Georgiou / 产品,用例,开发者
2021年11月10日
导航至
如果您熟悉InfluxDB Cloud,那么您可能已经熟悉Flux了。Flux使您能够以任何方式转换您的数据,并编写自定义任务、检查和通知规则。但您可能不知道的是,InfluxDB Cloud现在支持Flux中的API可调用脚本。API可调用脚本是由InfluxDB Cloud服务器托管和调用的参数化查询,这样应用开发者可以在不向客户端服务和代码中引入查询资源的情况下,为他们的时序应用添加自定义功能。通过支持运行时参数,可以泛化这些函数,以便为每个用户返回自定义结果。目前,API可调用脚本只能通过v2 API在InfluxDB Cloud中使用,但将来会出现在CLI、然后是InfluxDB用户界面,最后在InfluxDB OSS v2.x版本中。
InfluxDB Cloud中创建第一个Flux API可调用脚本
您可以使用InfluxDB v2 API创建一个API可调用脚本和相关的功能资源。相关的功能资源包含以下内容:名称、ID、描述、组织ID、脚本、语言、URL、创建时间和更新时间。这些功能帮助开发者识别他们的API可调用脚本及其相关元数据。功能ID用于在请求时手动调用该功能。
要创建一个带有相关功能资源的功能,请使用api/v2/functions
端点。在这个例子中,我们的参数化查询返回我们选择的存储桶中的最后两个数据点。
curl -X 'POST' \
'https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/functions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "myFirstAPIInvokableScripts",
"description": "a API Invokable Script that gathers the last point from a bucket",
"orgID": "<myOrgID>",
"script": "from(bucket:params.mybucket) \
|> range(start: -7d) \
|> limit(n:2)",
"language": "flux"
}'
当您创建API可调用脚本时,函数ID将返回在响应体中。或者,您也可以通过列出功能来检索函数ID和所有其他相关功能资源。然后您可以使用以下方式列出功能:
curl -X 'GET' \
'https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/functions?orgID=<myOrgID>' \
-H 'accept: application/json'
InfluxDB Cloud中用参数化查询调用脚本
一旦您有了函数ID,您就可以手动调用API可调用脚本并传递参数。在这种情况下,我们将把存储桶名称传递给mybucket
参数。我们的请求看起来像这样
curl -X 'POST' \
'https://us-west-2-1.aws.cloud2.influxdata.com/api/v2/functions/<functionID>/invoke' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"params": {"mybucket":"telegraf"}
}'
在VS Code中使用参数化查询调用脚本
您还可以使用VS Code的Flux扩展轻松创建和执行带参数的调用脚本。一旦您安装了VS Code的Flux扩展并进行了配置,您就可以创建一个新的调用脚本并运行它。例如,我可以使用以下参数运行以下调用脚本
params = { "mybucket": "airsensor" }
from(bucket:params.mybucket)
|> range(start: -1y)
|> limit(n:2)
首先,通过在左侧菜单上右键单击来创建一个新脚本。为您的调用脚本命名并添加描述。
接下来,编写您的调用脚本。右键单击您的脚本以运行查询。脚本输出将默认在右侧的新选项卡中弹出。
现在您可以在远程运行调用脚本,并将脚本集成到基于InfluxDB构建的应用程序中,例如。但是,一旦您确认脚本给出了预期的输出,您将想删除以下行:params = { "mybucket": "airsensor" }
。
现在您可以通过API调用脚本时注入参数,就像上面的示例一样,但需要在请求体中使用正确的参数
-d '{
"params": {"mybucket":"airsensor"}
}'
进一步阅读
虽然这篇文章旨在提供关于具有参数化查询的调用脚本的全面概述,但以下资源也可能对您感兴趣
- 使用Flux VS Code扩展进行物联网应用开发:这篇文章描述了如何使用Flux VS Code扩展通过创建桶和任务来管理InfluxDB实例,从而促进在InfluxDB之上进行应用开发。
- 使用Flux VS Code扩展:InfluxData关于Flux VS Code扩展的文档。
- InfluxDB技术提示:使用InfluxDB进行参数化Flux查询:这篇文章描述了如何使用InfluxDB编写参数化查询。
- 可调用脚本和任务:了解如何使用相同的脚本与内部和外部源一起使用,以在您的应用程序中提供一致的警报行为。
关于InfluxDB的可调用脚本总结
希望这篇InfluxDB技术提示文章能够激励您利用InfluxDB云的API可调用脚本。如果您使用Flux并需要帮助,请在我们社区网站或Slack频道上寻求帮助。如果您正在InfluxDB之上开发酷炫的物联网应用程序,我们非常乐意了解,请确保分享您的故事!此外,请在评论区分享您的想法、关注点或问题。我们非常希望获得您的反馈,并帮助您解决遇到的问题!