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
。创建一个表来存储传感器数据
CREATE TABLE sensor_data (time TIMESTAMPTZ NOT NULL,sensor_id TEXT NOT NULL,value DOUBLE PRECISION NOT NULL);为了获得更好的性能和更轻松的实时分析,请将表转换为超表
超表是 PostgreSQL 表,可以按时间自动对数据进行分区。您与超表的交互方式与常规 PostgreSQL 表相同,但具有额外的功能,可以更轻松地管理时序数据。
SELECT create_hypertable('sensor_data', 'time');
在 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;您会看到类似以下内容
时间 传感器 ID 值 2025-02-10 10:58:45.134912+00 sensor-123 42.5
您现在可以无缝地将时序数据从 AWS Lambda 摄取到 Timescale Cloud 中。
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页。