【NestJS】ヘルスチェック(v6版) を NestJS 7 へのバージョンアップに伴い、変更した内容になります。
環境
NestJS 6 時代は、godaddy/terminus
が必要でしたが、7 から依存が排除されています。
インストール
yarn add @nestjs/terminus --no-optional
// or
npm install --save @nestjs/terminus --no-optional
実装
- ほとんど、↓のページに書いている通りです。
-
const dbConfig = config.get('database')
とそれに関連する箇所は、各環境に応じて変更してください。 -
src/health/health.module.ts
に置いていますが、場所は任意です。
src/health/health.module.ts
import config from '@config'
import { Controller, Get, Module } from '@nestjs/common'
import {
HealthCheck,
HealthCheckResult,
HealthCheckService,
HealthIndicatorResult,
TerminusModule,
TypeOrmHealthIndicator,
} from '@nestjs/terminus'
import { TypeOrmModule } from '@nestjs/typeorm'
@Controller('healthz')
export class HealthController {
constructor(
private readonly health: HealthCheckService,
private readonly db: TypeOrmHealthIndicator
) {}
@Get()
@HealthCheck()
healthCheck(): Promise<HealthCheckResult> {
return this.health.check([
// Set the timeout for a response to 300ms
(): Promise<HealthIndicatorResult> =>
this.db.pingCheck('database', { timeout: 300 }),
])
}
}
const dbConfig = config.get('database')
@Module({
imports: [TerminusModule, TypeOrmModule.forRoot(dbConfig)],
controllers: [HealthController],
})
export class HealthRestModule {}
src/health/health.module.ts
// https://github.com/nestjs/config を使って TypeORM の設定をしている時の @Module 部分の例
@Module({
imports: [TerminusModule, TypeOrmModule.forRootAsync(typeOrmModuleConfig)],
controllers: [HealthController],
})
src/app.module.ts
@Module({
imports: [
ConfigModule.forRoot(configModuleConfig),
TypeOrmModule.forRootAsync(typeOrmModuleConfig),
// REST modules
HealthRestModule, // この行を追加
],
controllers: [],
providers: [],
})
export class AppModule {}
正常動作を curl で確認。
$ curl -X GET "http://localhost:3000/healthz"
{"status":"ok","info":{"database":{"status":"up"}},"error":{},"details":{"database":{"status":"up"}}}%
上記以外の設定
【NestJS】ヘルスチェック(v6版) を参考にしてください。