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、描述、orgID、脚本、语言、url、createdAt 和 updatedAt。这些功能帮助开发人员识别他们的 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 和所有其他关联的函数资源。然后您可以使用 list function
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 中使用参数化查询调用脚本
您还可以使用 Flux VS Code 扩展 轻松创建和执行带有参数化查询的可调用脚本。安装 Flux VS code 扩展 并配置后,您可以创建一个新的可调用脚本并运行它。例如,我可以运行以下带有参数的可调用脚本
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 扩展:关于 Flux VS Code 扩展的 InfluxData 文档。
- InfluxDB 技术提示:InfluxDB 中的参数化 Flux 查询:这篇文章描述了如何使用 InfluxDB 编写参数化查询。
- 可调用脚本和任务:了解如何将相同的脚本与内部和外部源一起使用,以在您的应用程序中提供一致的警报行为。
关于 InfluxDB 可调用脚本的最终想法
我希望这篇 InfluxDB 技术提示文章能启发您利用 InfluxDB Cloud 的 API 可调用脚本。如果您正在使用 Flux 并且需要帮助,请在我们的社区网站或 Slack 频道中提问。如果您正在 InfluxDB 之上开发一个很酷的物联网应用程序,我们很乐意听到它,所以请务必分享您的故事!此外,请在评论区分享您的想法、疑虑或问题。我们很乐意获得您的反馈并帮助您解决遇到的任何问题!