Timescale Cloud:性能、扩展、企业级
自托管产品
MST
AWS Lambda 是 Amazon Web Services (AWS) 提供的一项无服务器计算服务,允许您无需预置或管理服务器即可运行代码,并根据需要自动扩展。
本页面展示了如何将 AWS Lambda 与 Timescale Cloud 服务集成,以高效处理和存储时序数据。
要遵循本页面的步骤
创建一个目标 Timescale Cloud 服务,并启用时序和分析功能。
您需要 您的连接详细信息。此过程也适用于 自托管的 TimescaleDB。
- 设置一个 AWS 账户
。
- 安装并配置 AWS CLI
。
- 安装 NodeJS v18.x 或更高版本
。
在 Timescale Cloud 服务中创建一个表来存储时序数据。
连接到您的 Timescale Cloud 服务
对于 Timescale Cloud,在 Timescale 控制台
中打开一个 SQL 编辑器。对于自托管,请使用
psql
。创建一个超表来存储传感器数据
超表 是 PostgreSQL 表,可自动按时间对您的数据进行分区。您与超表的交互方式与常规 PostgreSQL 表相同,但额外功能使管理时序数据变得更加容易。
CREATE TABLE sensor_data (time TIMESTAMPTZ NOT NULL,sensor_id TEXT NOT NULL,value DOUBLE PRECISION NOT NULL) WITH (tsdb.hypertable,tsdb.partition_column='time');如果您正在自托管 TimescaleDB v2.19.3 及更早版本,请创建一个 PostgreSQL 关系表
,然后使用 create_hypertable 转换它。然后通过调用 ALTER TABLE 启用 hypercore。
在 Node.js 项目中编写一个 AWS Lambda 函数,用于处理时序数据并将其插入 Timescale Cloud 服务。
初始化一个新的 Node.js 项目来存放您的 Lambda 函数
mkdir lambda-timescale && cd lambda-timescalenpm init -y在您的项目中安装 PostgreSQL 客户端库
npm install pg编写一个将数据插入 Timescale Cloud 服务的 Lambda 函数
创建一个名为
index.js
的文件,然后添加以下代码const {Client} = require('pg');exports.handler = async (event) => {const client = new Client({host: process.env.TIMESCALE_HOST,port: process.env.TIMESCALE_PORT,user: process.env.TIMESCALE_USER,password: process.env.TIMESCALE_PASSWORD,database: process.env.TIMESCALE_DB,});try {await client.connect();//const query = `INSERT INTO sensor_data (time, sensor_id, value)VALUES ($1, $2, $3);`;const data = JSON.parse(event.body);const values = [new Date(), data.sensor_id, data.value];await client.query(query, values);return {statusCode: 200,body: JSON.stringify({message: 'Data inserted successfully!'}),};} catch (error) {console.error('Error inserting data:', error);return {statusCode: 500,body: JSON.stringify({error: 'Failed to insert data.'}),};} finally {await client.end();}};
要创建一个将数据注入 Timescale Cloud 服务的 AWS Lambda 函数
将您的代码压缩成
.zip
文件zip -r lambda-timescale.zip .部署到 AWS Lambda
在以下示例中,将
<IAM_ROLE_ARN>
替换为您的 AWS IAM 凭证,然后使用 AWS CLI 为您的项目创建一个 Lambda 函数
aws lambda create-function \--function-name TimescaleIntegration \--runtime nodejs14.x \--role <IAM_ROLE_ARN> \--handler index.handler \--zip-file fileb://lambda-timescale.zip设置环境变量
在以下示例中,使用您的 连接详细信息 将 Timescale Cloud 服务连接设置添加到您的 Lambda 函数
aws lambda update-function-configuration \--function-name TimescaleIntegration \--environment "Variables={TIMESCALE_HOST=<host>,TIMESCALE_PORT=<port>, \TIMESCALE_USER=<Username>,TIMESCALE_PASSWORD=<Password>, \TIMESCALE_DB=<Database name>}"测试您的 AWS Lambda 函数
调用 Lambda 函数并发送一些数据到您的 Timescale Cloud 服务
aws lambda invoke \--function-name TimescaleIntegration \--payload '{"body": "{\"sensor_id\": \"sensor-123\", \"value\": 42.5}"}' \--cli-binary-format raw-in-base64-out \response.json验证数据是否已在您的服务中。
打开一个 SQL 编辑器 并检查
sensor_data
表SELECT * FROM sensor_data;您会看到类似以下内容
time sensor_id value 2025-02-10 10:58:45.134912+00 sensor-123 42.5
您现在可以无缝地将时序数据从 AWS Lambda 摄取到 Timescale Cloud。
关键词