如何使用CloudFormation模板扩展InfluxDB的数据收集

导航到

在之前的一篇文章中,我展示了如何从AWS Lambda调用InfluxDB API,但设置相当手动,结果不可移植。理想情况下,我们作为社区可以扩展并共享收集和处理时间序列数据的方法。为此,我想分享一个CloudFormation模板。

CloudFormation是AWS的基础设施即代码服务,允许您在配置文件中定义几乎任何AWS组件。结果是提供了一种具体、可重复的环境定义服务,这在许多场景中都非常有用。例如,如果有人意外删除了您的简单队列服务主题或一个EC2实例,您可以通过运行CloudFormation模板轻松地重新创建它们。

地理时序CloudFormation模板

CloudFormation模板创建了AWS堆栈,这些堆栈封装了模板中定义的AWS组件。AWS堆栈易于创建、更新、重新创建和删除。

下面我将介绍CloudFormation模板,该模板每小时从美国地质调查局(USGS)提取地震数据并将其写入InfluxDB。我不会尝试给您一个完整的CloudFormation教程,但如果您想使用此模板创建自己的,理解不同部分的分解是有帮助的。

  • 前约20行定义了模板在安装时请求的变量。
  • 第21行至120行处理Lambda部署的一个怪癖,即Lambda资产在部署之前必须在您的区域中。因为没有优雅的解决方案,这100行在您创建堆栈的区域中创建了一个S3存储桶,并将资源复制进去。
  • 第121行至132行定义了一个具有运行Lambda的基本权限的角色。
  • 第133行至144行定义了一个Python库层。Lambda层在解耦函数与其支持库方面非常实用。在这个层中,我打包了Python HTTP库、Python S2 Geometry库和InfluxDB Python客户端库。
  • 第146行至165行定义了Lambda函数。Lambda是一个简短的Python脚本,被压缩在一个名为geo_lambda.zip的文件中。
  • 第166行至188行定义了一个具有运行Lambda权限的事件规则。该规则将每小时运行一次Lambda。

部署Lambda堆栈

现在我们已经了解了模板,让我们来部署它。首先,登录您的免费AWS账户,搜索CloudFormation服务。确保您在要部署Lambda的区域中——我部署到错误区域的堆栈比我想承认的要多。以下截图显示了在弗吉尼亚北部区域(右上角)搜索CloudFormation的情况。

Lambda Cloudformation - InfluxDB

导航到CloudFormation后,点击“创建堆栈”按钮。选择“模板已就绪”和“Amazon S3 URL”选项,然后将以下URL复制并粘贴到“Amazon S3 URL”字段中

https://influxdata-lambda.s3.amazonaws.com/GeoLambda.yml

CloudFormation - create stack

点击“下一步”,然后命名您的堆栈。提供以下InfluxDB详细信息

  • 您的组织ID
  • Lambda写入的桶的Bucket ID
  • 具有写入桶权限的令牌
  • 您的InfluxDB URL

还有两个其他参数(QSS3BucketName,QSS3KeyPrefix)具有默认值,您应该不要更改。这些参数是资产复制的辅助工具。

CloudFormation - specify stack details

在指定堆栈详细信息页面上,留空字段,然后点击“下一步”。选择“我承认创建此堆栈将创建资源”,然后点击“创建堆栈”。

CloudFormation - create resources

几分钟后,堆栈将部署到您的区域。要导航到您的新Lambda,请点击“服务 -> Lambda”。在Lambda函数页面上,您应该看到那里列出了您的新Lambda。CopyZipsFunction是辅助复制函数,GeoPythonLambda执行数据收集和写入工作。

GeoPythonLambda CloudFormation

根据我们设置的AWS规则,GeoPythonLambda应该每小时运行一次,但您应该测试并确认它是否正常工作。要测试,请点击“GeoPythonLambda”,然后点击“测试”。测试需要输入定义,但此Lambda没有输入要求,所以点击并通过并保存默认数据集。

CloudFormation test

在测试成功之后,您应该期待看到以下结果——绿色的 执行结果:成功

CloudFormation test result

数据点写入后,当您登录到您的 InfluxDB UI 时,您将能够探索地理位置地震数据。

geolocation earthquake data

还有其他什么吗?

顺便说一句,现在 Python 客户端库层资产已经存在于您的环境/区域中,您可以轻松创建新的 Lambda 并与客户端进行实验。创建一个新的 Python 3.8 Lambda 并选择 添加层

create Python Lambda CloudFormation

在“添加层到函数”中,“my-layers”是运行时兼容层列表中的一个选项。

add layer to function - Lambda

添加后,您可以在任何 Lambda 代码中导入并使用客户端库。

接下来是什么?

本博客介绍了如何通过 CloudFormation 在 AWS 上分发数据收集器。如果您有在 AWS 上运行的数据收集需求和负载,这个模板可以启动您的 AWS 堆栈创建工作。

除了数据收集讨论之外,这个 Lambda 还直接支持对 Flux 的新地理时间查询能力的深入审查。现在您已经将 USGS 地震数据报告在内,您可以使用 Flux 分析您的数据 随时间和空间的变化。

一如既往,如果您有任何问题或反馈,请通过我们的 社区论坛加入 Slack 与我联系!