操作场景
通过 Serverless Framework 组件,您可轻松完成 Serverless DB 的创建部署管理,并通过 SDK 在云函数中轻松完成数据库的连接访问,基于云上 Serverless 服务,实现“0”配置,极速部署,便捷开发,助力业务实现。 Serverless Framework 目前支持 PostgreSQL 与 NoSQL 两个类型数据库的部署连接,本文介绍如何使用云函数连接 PostgreSQL。
前提条件
Framework Core: 1.67.3
Plugin: 3.6.6
SDK: 2.3.0
Components: 2.30.1
请确保当前使用账号已配置 QcloudPostgreSQLFullAccess 策略。配置方法请参见 授权管理。 操作步骤
本文以 Node.js 开发语言的函数为例,介绍如何通过 Serverless Framework 组件编写创建函数,并访问 PostgreSQL 数据库。配置流程如下:
1. 配置身份信息:在本地配置腾讯云账户信息。
4. 编写业务代码:通过 Serverless DB SDK 调用数据库,云函数支持直接调用 Serverless DB SDK,连接 PostgreSQL 数据库进行管理操作。
5. 部署与调试:通过 Serverless Framework 部署项目至云端,并通过云函数控制台进行测试。
6. 移除项目:可通过 Serverless Framework 移除项目。
配置身份信息
1. 在本地建立目录,用于存放代码及依赖模块。本文以 test-postgreSQL
为例。
2. 在 test-postgreSQL
下创建 .env
文件,并按照以下格式在文件中配置您的腾讯云 SecretId、SecretKey、地域和可用区信息。
TENCENT_SECRET_ID=xxx
TENCENT_SECRET_KEY=xxx
REGION=ap-guangzhou
ZONE=ap-guangzhou-2
说明:
如果已有腾讯云账号,请确保您的账号已经授权了 AdministratorAccess
权限。 同时,您可在 API 密钥管理 中获取 SecretId 和 SecretKey。 配置私有网络
1. 在 test-postgreSQL
下创建文件夹 VPC
。
2. 在 VPC
中新建 serverless.yml
文件,输入以下内容完成私有网络和子网的配置。
org: fullstack
app: fullstack-serverless-db
stage: dev
component: vpc
name: serverlessVpc
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
,用于存放业务逻辑代码和相关依赖项。
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();
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
目录下,执行以下命令进行部署。
返回结果如下,即为部署成功。
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. 部署成功后,您可登录 云函数控制台 查看函数并进行调试。测试步骤请参见 云端测试,测试成功如下图所示:
移除项目
在 test-postgreSQL
目录下,执行以下命令可移除项目。
返回结果如下,即为成功移除。
serverless ⚡ framework
38s › tencent-fullstack › Success
本页内容是否解决了您的问题?