我有一个在AWS Lambda上运行的简单NestJS应用程序 . 我正在使用AWS SSM参数存储来保存数据库连接信息和凭据 . 当我导入TypeORM时,我使用已从商店检索的参数 .

现在我只是在导入TypeORM的AppModule中检索params . 我确信有更好的方法可以做到这一点,但我不确定它会是什么 . 自定义提供商?某种设置服务?我不认为我目前的解决方案非常强大,并且没有很好的错误处理 .

唯一的要求是我在运行时检索SSM参数,而不是在构建或部署时检索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 CLI创建了参数:

// 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