Использование хранилища параметров AWS SSM для конфигурации TypeORM в NestJS

У меня есть простое приложение NestJS, работающее на AWS Lambda. Я использую хранилище параметров AWS SSM для хранения информации о подключении к базе данных и учетных данных. Когда я импортирую TypeORM, я использую параметры, уже полученные из магазина.

Прямо сейчас я просто получаю параметры прямо в своем AppModule, куда импортируется TypeORM. Я уверен, что есть способ сделать это лучше, но я не уверен, каким бы он был. Пользовательский провайдер? Какой-то Сервис настроек? Я не думаю, что мое текущее решение является очень надежным и в нем нет хорошей обработки ошибок.

Единственное требование - я получаю параметры SSM во время выполнения, а не во время сборки или развертывания. Любой совет

Вот чем я сейчас занимаюсь:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ThingyModule } from 'thingy/thingy.module';
import * as awsParamStore from 'aws-param-store';

const ssmParams = awsParamStore.getParametersByPathSync('/myapp/prod', {region: (process.env['AWS_DEFAULT_REGION'] ? process.env['AWS_DEFAULT_REGION'] : 'us-east-2')}); 
const ssmMap = ssmParams.reduce(function(map, obj) {
  map[obj.Name] = obj.Value;
  return map;
}, {});

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: ssmMap['/myapp/prod/db/host'],
      port: 5432,
      username: ssmMap['/myapp/prod/db/username'],
      password: ssmMap['/myapp/prod/db/password'],
      database: 'postgres',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true,
    }),
    ThingyModule
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Параметры были созданы ранее с помощью интерфейса командной строки AWS:

// aws ssm put-parameter --type String --name /myapp/prod/db/username --value postgres --region us-east-2
// aws ssm put-parameter --type String --name /myapp/prod/db/password --value supRCkrit --region us-east-2
// aws ssm put-parameter --type String --name /myapp/prod/db/host --value localhost --region us-east-2

person nfdavenport    schedule 10.12.2018    source источник
comment
Привет, вы когда-нибудь придумали, как заставить это работать? У меня такая же проблема :-) Спасибо! Я задал аналогичный вопрос здесь - ›stackoverflow.com/questions/55911569/   -  person Dominik    schedule 30.04.2019
comment
Нет, не лучше, чем указано выше. Я очистил его и инкапсулировал в отдельную «службу», но в основном делаю это в том же месте и таким же образом. В лучшем случае я мог бы переместить это в функцию основного обработчика в index.ts, где создается приложение Nest. Тогда я сразу знаю, что все готово. Я бы также, вероятно, кэшировал данные. Но я не видел, чтобы там можно было напрямую «передать» это процессу создания модуля.   -  person nfdavenport    schedule 30.04.2019