6

我已经替换了从 lambda 函数连接数据库的方式。
以前,该函数使用 MySQL 模块建立与 RDS 的连接,并通过 3306 端口进行查询。
目前,我尝试使用 Data API,并且我已经完成了所有代码的替换,无需测试。

现在我正在考虑如何保证我的代码。

我有一些测试代码可以连接在 docker 映像上运行的本地 MySQL 数据库。
但是,由于没有端点,Data API 无法与本地 MySQL 数据库连接。

所以我想知道是否有任何服务或库来模拟 Data API。

这是我运行 MySQL DB 的 docker-compose.yml。

services:
  db:
    build: ./docker/mysql
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: $DB
      MYSQL_USER: $USER
      MYSQL_PASSWORD: $PWD
      MYSQL_ROOT_PASSWORD: $ROOT_PWD
    ports:
      - "3306:3306"
    volumes:
      - ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d
      - ./docker/mysql/conf.d:/etc/mysql/conf.d
      - ./docker/log:/var/log/mysql

以前,该函数尝试通过以下代码连接到 DB

import * as mysql from 'mysql';
import * as util from 'util';

const connection: mysql.Pool = mysql.createPool({
  connectionLimit: 100,
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  port: Number(process.env.DB_PORT),
  database: process.env.DB_NAME,
  connectTimeout: 60 * 60 * 1000,
  acquireTimeout: 60 * 60 * 1000,
  timeout: 60 * 60 * 1000
});

export async function query(sql: string, param?: Array<any>): Promise<any> {
  const connQueryPromisified = util
    .promisify(connection.query)
    .bind(connection);
  return await connQueryPromisified(sql, param);
}

目前:

import * as aws from 'aws-sdk';
import {
  ExecuteStatementRequest,
  ExecuteStatementResponse,
  Field,
  SqlParametersList,
  BatchExecuteStatementRequest,
  BatchExecuteStatementResponse,
  SqlParameterSets
} from 'aws-sdk/clients/rdsdataservice';
const RDS = new aws.RDSDataService({ region: 'ap-northeast-1' });
const secretArn = process.env.SECRET_ARN;
const arn = process.env.RESOURCE_ARN;
const dbName = process.env.DATABASE_NAME;

export async function query(
  sql: string,
  param?: SqlParametersList
): Promise<any> {
  const params: ExecuteStatementRequest = {
    secretArn: secretArn,
    resourceArn: arn,
    sql: sql,
    parameters: param,
    database: dbName,
    continueAfterTimeout: true,
    includeResultMetadata: true
  };

  return RDS.executeStatement(params).promise();
}

有人知道 Data API 模型服务吗?或者有没有用 Data API 编写代码的想法?

4

2 回答 2

7

看看local-data-api,它看起来像你想要的。

它是一个托管数据 API 代理和 Postgres 或 MySQL 实例的 Docker 映像;你可以为 DockerHub 找到 pull 它,图像信息在这里:https ://hub.docker.com/r/koxudaxi/local-data-api ,包括如何运行它的说明。

于 2019-12-31T11:41:10.290 回答
0

Jackal是 AWS SDK v2 Aurora 数据客户端的精简包装器。它包括一个封装了 JDBC 数据源的模拟客户端实现。您可以将它与H2等内存数据库结合使用来执行本地集成测试。

于 2021-09-24T20:26:17.260 回答