如何使用 CloudFormation 模板扩展 InfluxDB 的数据收集
作者:Nate Isley / 产品, 用例, 开发者
2020年6月23日
导航至
在之前的文章中,我演示了如何从 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 的情况
导航到 CloudFormation 后,单击“创建堆栈”按钮。选择“模板已准备就绪”和“Amazon S3 URL”选项,然后将以下 URL 复制并粘贴到“Amazon S3 URL 字段”中
https://influxdata-lambda.s3.amazonaws.com/GeoLambda.yml
单击“下一步”,然后命名您的堆栈。提供以下 InfluxDB 详细信息
- 您的组织 ID
- Lambda 写入的存储桶的存储桶 ID
- 具有写入存储桶权限的令牌
- 您的 InfluxDB URL
还有另外两个参数(QSS3BucketName、QSS3KeyPrefix),它们具有默认值,您不应更改。这些参数是用于资产复制的助手。
在“指定堆栈详细信息”页面上,将字段留空,然后单击“下一步”。选择“我确认创建此堆栈将创建资源”,然后单击“创建堆栈”。
几分钟后,堆栈将部署到您的区域。要导航到您的新 Lambda,请单击“服务”->“Lambda”。在 Lambda 函数页面上,您应该看到您的新 Lambda 在那里列出。“CopyZipsFunction”是助手复制函数,“GeoPythonLambda”执行数据收集和写入工作
GeoPythonLambda 应该根据我们设置的 AWS 规则每小时运行一次,但您应该测试并确认它是否有效。要测试,请单击“GeoPythonLambda”,然后单击“测试”。测试需要输入定义,但此 Lambda 没有输入要求,因此请单击并保存默认数据集。
这是您在成功测试后应该看到的 — 绿色的“执行结果:成功”。
在写入数据点后,当您登录到 InfluxDB UI 时,您将能够浏览地理位置地震数据。
还有什么?
顺便说一句,既然带有 Python 客户端库的层资产在您的环境/区域中,您可以轻松创建新的 Lambda 并使用客户端进行实验。创建一个新的 Python 3.8 Lambda,然后选择“层”和“添加层”。
在“向函数添加层”中,“my-layers”是运行时兼容层列表下的一个选项
添加后,在您的任何 Lambda 代码中导入并使用客户端库。
下一步是什么?
这篇博客介绍了如何通过 CloudFormation 在 AWS 上分发数据收集器。如果您有数据收集需求和在 AWS 上运行的工作负载,此模板可以快速启动您的 AWS 堆栈创建工作。
除了数据收集讨论外,此 Lambda 还直接支持深入审查 Flux 的新地理时空查询功能。现在您已经有了 USGS 地震数据报告,您可以探索使用 Flux 来分析您在时间和空间上的数据。
与往常一样,如果您有任何问题或反馈,请在我们的社区论坛中与我联系或加入我们的 Slack!