通过 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
本文以 Node.js 开发语言的函数为例,介绍如何通过 Serverless Framework 组件编写创建函数,并访问 PostgreSQL 数据库。配置流程如下:
test-postgreSQL
为例。 test-postgreSQL
下创建 .env
文件,并按照以下格式在文件中配置您的腾讯云 SecretId、SecretKey、地域和可用区信息。# .env
TENCENT_SECRET_ID=xxx # 您账号的 SecretId
TENCENT_SECRET_KEY=xxx # 您账号的 SecretKey
# 地域可用区配置
REGION=ap-guangzhou #资源部署区,该项目中指云函数与静态页面部署区
ZONE=ap-guangzhou-2 #资源部署可用区 ,该项目中指 DB 部署所在的可用区
说明:
test-postgreSQL
下创建文件夹 VPC
。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
test-postgreSQL
下创建文件夹 DB
。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
test-postgreSQL
下创建文件夹 api
,用于存放业务逻辑代码和相关依赖项。api
下创建文件夹 src
,并在命令行中进入 src
目录,执行以下命令,安装 PostgreSQL 依赖包。npm install pg
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)
}
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}
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
您还可通过 Serverless Dashboard,轻松实现已部署项目的实时监控。
在 test-postgreSQL
目录下,执行以下命令可移除项目。
sls remove --all
返回结果如下,即为成功移除。
serverless ⚡ framework
38s › tencent-fullstack › Success
本页内容是否解决了您的问题?