tencent cloud

文档反馈

连接 PostgreSQL

最后更新时间:2024-11-28 17:42:45

    操作场景

    通过 Serverless Framework 组件,您可轻松完成 Serverless DB 的创建部署管理,并通过 SDK 在云函数中轻松完成数据库的连接访问,基于云上 Serverless 服务,实现“0”配置,极速部署,便捷开发,助力业务实现。
    Serverless Framework 目前支持 PostgreSQLNoSQL 两个类型数据库的部署连接,本文介绍如何使用云函数连接 PostgreSQL。

    前提条件

    已安装 Serverless Framework,且不低于以下版本。如未安装,请参考 安装 Serverless Framework 完成安装。
    Framework Core: 1.67.3
    Plugin: 3.6.6
    SDK: 2.3.0
    Components: 2.30.1
    请确保当前使用账号已配置 QcloudPostgreSQLFullAccess 策略。配置方法请参见 授权管理

    操作步骤

    本文以 Node.js 开发语言的函数为例,介绍如何通过 Serverless Framework 组件编写创建函数,并访问 PostgreSQL 数据库。配置流程如下:
    1. 配置身份信息:在本地配置腾讯云账户信息。
    2. 配置私有网络:通过 Serverless Framework VPC 组件 创建 VPC子网,支持云函数和数据库的网络打通和使用。
    3. 配置 Serverless DB:通过 Serverless Framework PostgreSQL 组件创建 PostgreSQL 实例,为云函数项目提供数据库服务。
    4. 编写业务代码:通过 Serverless DB SDK 调用数据库,云函数支持直接调用 Serverless DB SDK,连接 PostgreSQL 数据库进行管理操作。
    5. 部署与调试:通过 Serverless Framework 部署项目至云端,并通过云函数控制台进行测试。
    6. 移除项目:可通过 Serverless Framework 移除项目。

    配置身份信息

    1. 在本地建立目录,用于存放代码及依赖模块。本文以 test-postgreSQL 为例。
    2. test-postgreSQL 下创建 .env 文件,并按照以下格式在文件中配置您的腾讯云 SecretId、SecretKey、地域和可用区信息。
    # .env
    TENCENT_SECRET_ID=xxx # 您账号的 SecretId
    TENCENT_SECRET_KEY=xxx # 您账号的 SecretKey
    # 地域可用区配置
    REGION=ap-guangzhou #资源部署区,该项目中指云函数与静态页面部署区
    ZONE=ap-guangzhou-2 #资源部署可用区 ,该项目中指 DB 部署所在的可用区
    说明:
    如果没有腾讯云账号,请 注册新账号
    如果已有腾讯云账号,请确保您的账号已经授权了 AdministratorAccess 权限。 同时,您可在 API 密钥管理 中获取 SecretId 和 SecretKey。

    配置私有网络

    1. test-postgreSQL 下创建文件夹 VPC
    2. VPC 中新建 serverless.yml 文件,输入以下内容完成私有网络和子网的配置。
    org: fullstack
    app: fullstack-serverless-db
    stage: dev
    component: vpc # (required) name of the component. In that case, it's vpc.
    name: serverlessVpc # (required) name of your vpc component instance.
    inputs:
    region: ${env:REGION}
    zone: ${env:ZONE}
    vpcName: serverless
    subnetName: serverless

    配置 Serverless DB

    1. test-postgreSQL 下创建文件夹 DB
    2. DB 中新建 serverless.yml 文件,输入以下内容完成 PostgreSQL 数据库创建配置。
    org: fullstack
    app: fullstack-serverless-db
    stage: dev
    component: postgresql
    name: fullstackDB
    inputs:
    region: ${env:REGION}
    zone: ${env:ZONE}
    dBInstanceName: ${name}
    vpcConfig:
    vpcId: ${output:${stage}:${app}:serverlessVpc.vpcId}
    subnetId: ${output:${stage}:${app}:serverlessVpc.subnetId}
    extranetAccess: false

    编写业务代码

    1. test-postgreSQL 下创建文件夹 api,用于存放业务逻辑代码和相关依赖项。
    2. 在文件夹 api 下创建文件夹 src,并在命令行中进入 src 目录,执行以下命令,安装 PostgreSQL 依赖包
    npm install pg
    3. src 文件夹下,创建 index.js 文件,并输入如下示例代码。在函数中通过 PostgreSQLSDK 创建连接池,并调用数据库。
    'use strict';
    const { Pool } = require('pg');
    exports.main_handler = async (event, context, callback) => {
    let pgPool = new Pool({
    connectionString: process.env.PG_CONNECT_STRING,
    });
    await pgPool.query(`CREATE TABLE IF NOT EXISTS users (
    ID serial NOT NULL,
    NAME TEXT NOT NULL,
    EMAIL CHAR(50) NOT NULL,
    SITE CHAR(50) NOT NULL
    );`);
    const client = await pgPool.connect();
    const { rows } = await client.query({
    text: 'select * from users',
    });
    await client.release();
    // 此处要求 postgresql 版本为 8.0 及以上,请检查您的 pg 依赖项版本,如果您使用的版本为 8.0 以下,请通过 client.end()来释放链接
    console.log('pgsql query result:',rows)
    }
    4. api 下创建 serverless.yml 文件,并输入以下内容,在环境变量中配置 Serverless DB 的 Connection String。
    org: fullstack
    app: fullstack-serverless-db
    stage: dev
    component: scf
    name: fullstack-serverless-db
    inputs:
    name: ${app}
    src:
    src: ./src
    exclude:
    - .env
    region: ${env:REGION}
    runtime: Nodejs10.15
    handler: index.main_handler
    timeout: 30
    vpcConfig:
    vpcId: ${output:${stage}:${app}:serverlessVpc.vpcId}
    subnetId: ${output:${stage}:${app}:serverlessVpc.subnetId}
    environment:
    variables:
    PG_CONNECT_STRING: ${output:${stage}:${app}:fullstackDB.private.connectionString}

    部署与调试

    1. 通过命令行,在 test-postgreSQL 目录下,执行以下命令进行部署。
    sls deploy --all
    返回结果如下,即为部署成功。
    serverless ⚡ framework
    serverlessVpc:
    region: ap-guangzhou
    zone: ap-guangzhou-2
    vpcId: vpc-0ncak84t
    vpcName: serverless
    subnetId: subnet-gi085his
    subnetName: serverless
    fullstackDB:
    region: ap-guangzhou
    zone: ap-guangzhou-2
    vpcConfig:
    subnetId: subnet-gi085his
    vpcId: vpc-0ncak84t
    dBInstanceName: fullstackDB
    dBInstanceId: postgres-0y2x3fd3
    private:
    connectionString: postgresql://tencentdb_0y2x3fd3:GD0U1(q~g7%3D6ySI@10.0.0.10:5432/tencentdb_0y2x3fd3
    host: 10.0.0.10
    port: 5432
    user: tencentdb_0y2x3fd3
    password: GD0U1(q~g7=6ySI
    dbname: tencentdb_0y2x3fd3
    fullstack-serverless-db:
    FunctionName: fullstack-serverless-db
    Description:
    Namespace: default
    Runtime: Nodejs10.15
    Handler: index.main_handler
    MemorySize: 128
    25s › fullstack-serverless-db › Success
    2. 部署成功后,您可登录 云函数控制台 查看函数并进行调试。测试步骤请参见 云端测试,测试成功如下图所示:
    
    
    说明:
    您还可通过 Serverless Dashboard,轻松实现已部署项目的实时监控。

    移除项目

    test-postgreSQL 目录下,执行以下命令可移除项目。
    sls remove --all
    返回结果如下,即为成功移除。
    serverless ⚡ framework
    38s › tencent-fullstack › Success
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持