【问题标题】:Is there any mock(or local) service of aurora serverless Data Api?aurora serverless Data Api 是否有任何模拟(或本地)服务?
【发布时间】:2019-08-25 23:27:04
【问题描述】:

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

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

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

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

这是我运行 MySQL 数据库的 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

之前该函数尝试通过以下代码连接数据库

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();
}

有人知道数据 API 模型服务吗?或者有什么idea可以用Data API写代码?

【问题讨论】:

    标签: typescript amazon-web-services aws-aurora-serverless


    【解决方案1】:

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

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

    【讨论】:

    • 有没有人碰巧知道一种在内存中运行类似东西的方法?如果不需要,我宁愿不运行整个 docker 容器。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-19
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多