12 月 20 日的 Techo 大會上,騰訊雲重磅發布了自研雲原生數據庫 TDSQL-C Serverless(原 CynosDB Serverless),這是國內首款計算和存儲全 Serverless 架構的雲原生 MySQL, TDSQL-C Serverless能夠讓企業用戶像使用水、電、煤一樣使用雲數據庫,用戶不需為數據庫的閑時進行付費,而是按照數據庫資源響應單元實際使用量進行計費,將騰訊雲雲原生技術普惠用戶。
作為 Serverless 生態中的重要一環,TDSQL-C Serverless 的發布也補齊了 Serverless 架構里 MySQL 數據庫的空缺。因此,Serverless Framework 同步發布了 TDSQL-C Serverless 組件。這樣,騰訊雲就擁有了一套Serverless 全棧的核心解決方案,包括 Serverless API網關、騰訊雲的 Serverless 函數計算服務、Serverless 對象存儲和數據庫。在數據存儲層可以通過 TDSQL-C Serverless 直接對數據庫連接並進行 SQL 操作。
TDSQL-C Serverless(MySQL 數據庫),具備完全自動化的擴容能力,能夠隨着用戶業務的請求數的增加和減少,智能化“膨脹”和“縮小”,實現資源的自動“吞吐”。從此以后,開發者可以真正的完成 Serverless 應用的開發,專注於業務本身,免除運維,按需付費,享受 Serverless 架構帶來的眾多優勢。
另外,TDSQL-C Serverless 數據庫在試用期間完全免費。
服務特性
- 自動駕駛(Autopilot):
數據庫根據業務負載自動啟動停止,無感擴縮容,擴縮容過程不會斷開連接。
- 按使用計費(Utility Pricing):
按實際使用的計算和存儲量計費,不用不付費,按秒計量,按小時結算。
適用場景
- 開發、測試環境等低頻數據庫使用場景。
- 物聯網(IoT)、邊緣計算等不確定負載場景。
- 中小企業建站等 SaaS 應用場景。
下面的教程將以 Node.js 開發語言的函數,指導您如何快速創建 TDSQL-C Serverless MySQL 實例,並在雲函數中進行調用:
操作步驟
- 配置環境變量
- 配置私有網絡: 通過 Serverless Framework VPC 組件 創建 VPC 和 子網,支持雲函數和數據庫的網絡打通和使用。
- 配置 Serverless DB: 通過 Serverless Framework Cynosdb 組件 創建 MySQL 實例,為雲函數項目提供數據庫服務。
- 編寫業務代碼: 通過 Serverless DB SDK 調用數據庫,雲函數支持直接調用 Serverless DB SDK,連接 PostgreSQL 數據庫進行管理操作。
- 部署應用: 通過 Serverless Framework 部署項目至雲端,並通過雲函數控制台進行測試。
- 移除項目: 可通過 Serverless Framework 移除項目。
1. 配置環境變量
在本地建立目錄,用於存放代碼及依賴模塊。本文以 test-MySQL
文件夾為例。
mkdir test-MySQL && cd test-MySQL
由於目前 TDSQL-C Serverless 只支持 ap-beijing-3
,ap-guangzhou-4
,ap-shanghai-2
和 ap-nanjing-1
四個區域,所以這里還需要配置下,只需要在項目根目錄下創建 .env
文件,然后配置 REGION
和 ZONE
兩個環境變量:
# .env
REGION=xxx
ZONE=xxx
2. 配置私有網絡
在 test-MySQL
目錄下創建文件夾 VPC
。
mkdir VPC && cd VPC
同時在 VPC
中新建 serverless.yml 文件,使用 VPC 組件完成私有網絡和子網的創建。
serverless.yml
示例內容如下,全量配置參考產品文檔
#serverless.yml
org: mysql-app
app: mysql-app
stage: dev
component: vpc # (required) name of the component. In that case, it's vpc.
name: mysql-app-vpc # (required) name of your vpc component instance.
inputs:
region: ${env:REGION}
zone: ${env:ZONE}
vpcName: serverless-mysql
subnetName: serverless-mysql
3. 配置 Serverless DB
在 test-MySQL
下創建文件夾 DB
,並在 DB
文件夾下新建 serverless.yml
文件,並輸入以下內容,通過 Serverless Framework 組件完成雲開發環境配置。
serverless.yml
示例內容如下,全量配置參考產品文檔
# serverless.yml
org: mysql-app
app: mysql-app
stage: dev
component: cynosdb
name: mysql-app-db
inputs:
region: ${env:REGION}
zone: ${env:ZONE}
vpcConfig:
vpcId: ${output:${stage}:${app}:mysql-app-vpc.vpcId}
subnetId: ${output:${stage}:${app}:mysql-app-vpc.subnetId}
4. 編寫業務代碼與配置文件
在 test-MySQL
下創建文件夾 src
,用於存放業務邏輯代碼和相關依賴項。並在 src
文件夾下創建文件 index.js
,輸入如下示例代碼。在函數中通過 SDK 連接數據庫,並在其中完成 MySQL 數據庫的調用。
exports.main_handler = async (event, context, callback) => {
var mysql = require('mysql2');
var connection = mysql.createConnection({
host : process.env.HOST,
user : 'root',
password : process.env.PASSWORD
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
connection.end();
}
安裝所需依賴模塊:
npm install mysql2
完成業務代碼編寫和依賴安裝后,創建 serverless.yml
文件,示例文件如下:
org: mysql-app
app: mysql-app
stage: dev
component: scf
name: mysql-app-scf
inputs:
src: ./
functionName: ${name}
region: ${env:REGION}
runtime: Nodejs10.15
timeout: 30
vpcConfig:
vpcId: ${output:${stage}:${app}:mysql-app-vpc.vpcId}
subnetId: ${output:${stage}:${app}:mysql-app-vpc.subnetId}
environment:
variables:
HOST: ${output:${stage}:${app}:mysql-app-db.connection.ip}
PASSWORD: ${output:${stage}:${app}:mysql-app-db.adminPassword}
5. 快速部署
完成創建后,項目目錄結構如下:
./test-MySQL
├── vpc
│ └── serverless.yml # vpc 配置文件
├── db
│ └── serverless.yml # db 配置文件
├── src
│ ├── serverless.yml # scf 組件配置文件
│ ├── node_modules # 項目依賴文件
│ └── index.js # 入口函數
└── .env # 環境變量文件
使用命令行在 test-MySQL
下,執行以下命令進行部署。
sls deploy
返回結果如下所示,即為部署成功。
mysql-app-vpc:
region: xxx
zone: xxx
vpcId: xxxx-xxx
...
mysql-app-db:
dbMode: xxxx
region: xxxx
zone: xxxx
...
mysql-app-scf:
functionName: xxxx
description: xxx
...
59s › test-MySQL › "deploy" ran for 3 apps successfully.
部署成功后,您可通過 雲函數控制台,查看並進行函數調試,測試成功如下圖所示:
移除項目
在 test-MySQL
目錄下,執行以下命令可移除項目。
sls remove
返回如下結果,即為成功移除。
serverless ⚡ framework
4s › test-MySQL › Success
除了通過組件一鍵創建所有資源外,您也可以通過控制台完成 Serverless 版本 MySQL 數據庫的創建,並在雲函數中正常使用 SDK 的方式完成調用。
- 詳情參考:https://cloud.tencent.com/document/product/583/38012
- TDSQL-C Serverless 產品文檔:https://cloud.tencent.com/document/product/1003/50853
One More Thing
立即體驗騰訊雲 Serverless Demo,領取 Serverless 新用戶禮包 👉 serverless/start
歡迎訪問:Serverless 中文網!