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

导航至

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

CloudFormation 是 AWS 的基础设施即代码服务,它允许您在配置文件中定义几乎任何 AWS 组件。其结果是一个服务,它提供了对您的环境的具体、可重复的定义,这在许多场景中都非常有用。例如,如果有人意外删除了您的 Simple Queue Service 主题或 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 部署到的 AWS 区域?— 我在错误的区域部署的堆栈比我想承认的要多。以下屏幕截图显示了在弗吉尼亚北部区域(右上角)搜索 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 写入的存储桶的存储桶 ID
  • 具有写入存储桶权限的令牌
  • 您的 InfluxDB URL

还有另外两个参数(QSS3BucketName、QSS3KeyPrefix),它们具有默认值,您不应更改。这些参数是用于资产复制的助手。

CloudFormation - specify stack details

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

CloudFormation - create resources

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

GeoPythonLambda CloudFormation

GeoPythonLambda 应该根据我们设置的 AWS 规则每小时运行一次,但您应该测试并确认它是否有效。要测试,请单击“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