AWS Lambda 是 Amazon Web Services (AWS) 提供的无服务器计算服务,允许您运行代码,而无需配置或管理服务器,并根据需要自动扩展。

本页面向您展示如何将 AWS Lambda 与 Timescale Cloud 服务集成,以高效地处理和存储时序数据。

集成前准备

在 Timescale Cloud 服务中创建一个表来存储时序数据。

  1. 连接到您的 Timescale Cloud 服务

    对于 Timescale Cloud,在 Timescale 控制台中打开SQL 编辑器。对于自托管,请使用 psql

  2. 创建一个表来存储传感器数据

    CREATE TABLE sensor_data (
    time TIMESTAMPTZ NOT NULL,
    sensor_id TEXT NOT NULL,
    value DOUBLE PRECISION NOT NULL
    );
  3. 为了获得更好的性能和更轻松的实时分析,请将表转换为超表

    超表是 PostgreSQL 表,可以按时间自动对数据进行分区。您与超表的交互方式与常规 PostgreSQL 表相同,但具有额外的功能,可以更轻松地管理时序数据。

    SELECT create_hypertable('sensor_data', 'time');

在 Node.js 项目中编写一个 AWS Lambda 函数,该函数处理时序数据并将其插入到 Timescale Cloud 服务中。

  1. 初始化一个新的 Node.js 项目以存放您的 Lambda 函数

    mkdir lambda-timescale && cd lambda-timescale
    npm init -y
  2. 在您的项目中安装 PostgreSQL 客户端库

    npm install pg
  3. 编写一个将数据插入到您的 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 函数,请执行以下操作

  1. 将您的代码压缩为 .zip 文件

    zip -r lambda-timescale.zip .
  2. 部署到 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
  3. 设置环境变量

    在以下示例中,使用您的连接详细信息将您的 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>}"
  4. 测试您的 AWS Lambda 函数

    1. 调用 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
    2. 验证数据是否在您的服务中。

      打开 SQL 编辑器 并检查 sensor_data

      SELECT * FROM sensor_data;

      您会看到类似以下内容

      时间传感器 ID
      2025-02-10 10:58:45.134912+00sensor-12342.5

您现在可以无缝地将时序数据从 AWS Lambda 摄取到 Timescale Cloud 中。

关键词

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页