LoginSignup
1
0

More than 3 years have passed since last update.

typescriptでaurora-serverlessからdata-apiでデータを取得する

Posted at

AuroraServerlessを使うことで、https経由でデータアクセスが可能となる。

事前準備

  • AuroraServerlessを構築する
  • DataAPIをオンにする
  • AWS Secrets Manager へ 認証情報を保存する

データの取得

  • 環境変数に接続情報をセット export DB_SECRET_ARN="arn:aws:secretsmanager:ap-northeast-1:99999999:\secret:rds-db-credentials/cluster-XXXXXXXXXXXXXXX/xxxxxxxxxxx"; export DB_ARN="arn:aws:rds:ap-northeast-1:xxxxxxxxxxxxx:cluster:xxxxxxxxxxx"; export DB_NAME=xxxxxx
find_by_sql.ts

// SQLから連想配列で取得する
const find_by_sql = async (sql: string, parameters?: SqlParameter[]) => {
  const params: ExecuteStatementRequest = {
    resourceArn: process.env.DB_ARN,
    secretArn: process.env.DB_SECRET_ARN,
    sql: sql,
    database: process.env.DB_NAME,
    includeResultMetadata: true,
    parameters: parameters
  };
  // データの取得
  let res = await new Promise<ExecuteStatementResponse>((resolve, reject) => {
    RDS.executeStatement(params, (err, data) => {
      if (err) reject(err);
      else resolve(data);
    });
  });

  // 詰め替える
  const results: any[] = [];
  res.records.forEach(record => {
    const result_row: any = {};
    res.columnMetadata.forEach((col, i) => {
      result_row[col.name] = Object.values(record[i]).filter(x => x)[0] || null;
    });
    results.push(result_row);
  });
  return results;
};

// example
const sql = 'select * from users where id = :user_id'
const datas = await find_by_sql(sql, [{ name: "user_id", value: { stringValue: 'hoge' } }]);

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0