serverless framework + typeorm + data-apiでaurora-serverlessへアクセスする。


v0.2.19 - 2019/09/14で対応された

yarn add typeorm
yarn add typeorm-aurora-data-api-driver

 const connection = await createConnection({
      type: 'aurora-data-api',
      database: 'test-db',
      secretArn: 'arn:aws:secretsmanager:eu-west-1:xxxxxxxxxxxxxx:secret:xxxxxx/xxxxxx/xxxxxx',
      resourceArn: 'arn:aws:rds:eu-west-1:xxxxx:xxxxxx:xxxxxx',
      region: 'eu-west-1',
    })

webpack / serverless-frameworkから使う

v0.2.19の時点だと、webpackだと動かない。
MODULE_NOT_FOUNDが出るので、typeormをちょっと修正する。

typeorm/platform/PlatformTools.js
  PlatformTools.load = function(name) {
    // if name is not absolute or relative, then try to load package from the node_modules of the directory we are currently in
    // this is useful when we are using typeorm package globally installed and it accesses drivers
    // that are not installed globally
    try {
      // switch case to explicit require statements for webpack compatibility.
      switch (name) {
        /**
         * mongodb
         */
        case "mongodb":
          return require("mongodb");

        ........


        // type ormへのアクセスを追加 !!!!!!!!!!!!!!!!
        case "typeorm-aurora-data-api-driver":
          return require("typeorm-aurora-data-api-driver");
        /**
         * default
         */
        default:
          return require(name);
src/driver/aurora-data-api/AuroraDataApiDriver.ts

# this.DataApiDriver = PlatformTools.load("typeorm-aurora-data-api-driver");
const driver = PlatformTools.load("typeorm-aurora-data-api-driver");
this.DataApiDriver = driver.default || driver;

文字コード

クライアント側で指定できないので、RDSのパラメータグループで正しく指定してあげる
character_set_client / character_set_connection / character_set_database / character_set_results / character_set_server

skip-character-set-client-handshake も1にセットしたけど、不要そうな気もする。

これで接続成功しますた。(゚д゚)
次のバージョンで対応されそうな気がするので、ちゃんと待った方が良さげ。

課題点とか

data-apiで

  • datetimeに0が入るとだめっぽい。