У меня есть простое приложение 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