MOre on env parsing for k8s
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import { getEnv } from './util'
|
||||
|
||||
export const env = getEnv()
|
||||
export const env = getEnv(process.env)
|
||||
|
||||
export function homePageURL(): string {
|
||||
return env.client.url
|
||||
|
||||
28
packages/api/src/gcp-utils.ts
Normal file
28
packages/api/src/gcp-utils.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import { BackendEnv, getEnv } from './util'
|
||||
import { SecretManagerServiceClient } from '@google-cloud/secret-manager'
|
||||
|
||||
// When running on GCP we want to use secrets manager instead
|
||||
// of environment variables for storing secrets. This means
|
||||
// after startup we need to query secret manager, and
|
||||
// pull in those secrets.
|
||||
// To opt into this feature you need to set the `GCP_SECRETS_NAME`
|
||||
// environment variable to the secrets name for example:
|
||||
// `omnivore-project/secrets/my-secrets/latest`
|
||||
//
|
||||
export const loadEnvFromGCPSecrets = async (): Promise<
|
||||
BackendEnv | undefined
|
||||
> => {
|
||||
if (process.env.GCP_SECRETS_NAME && process.env.GCP_PROJECT_ID) {
|
||||
const client = new SecretManagerServiceClient()
|
||||
const [version] = await client.accessSecretVersion({
|
||||
name: `projects/${process.env.GCP_PROJECT_ID}/secrets/${process.env.GCP_SECRETS_NAME}/versions/latest`,
|
||||
})
|
||||
if (!version || !version.payload || !version.payload.data) {
|
||||
throw new Error(`no data for secret: ${process.env.GCP_SECRETS_NAME}`)
|
||||
}
|
||||
let data = Buffer.from(version.payload.data.toString(), 'base64')
|
||||
const result: any = JSON.parse(data.toString())
|
||||
return getEnv(result)
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
@ -18,7 +18,7 @@ export const QUEUE_NAME = 'omnivore-backend-queue'
|
||||
const main = async () => {
|
||||
console.log('[queue-processor]: starting queue processor')
|
||||
|
||||
let env = (await loadEnvFromGCPSecrets()) ?? getEnv()
|
||||
let env = (await loadEnvFromGCPSecrets()) ?? getEnv(process.env)
|
||||
const app: Express = express()
|
||||
const port = process.env.PORT || 3002
|
||||
|
||||
|
||||
@ -205,11 +205,15 @@ const envParser =
|
||||
)
|
||||
}
|
||||
|
||||
export function getEnv(): BackendEnv {
|
||||
interface Dict<T> {
|
||||
[key: string]: T | undefined
|
||||
}
|
||||
|
||||
export function getEnv(from: Dict<string>): BackendEnv {
|
||||
// Dotenv parses env file merging into proces.env which is then read into custom struct here.
|
||||
dotenv.config()
|
||||
|
||||
const parse = envParser(process.env)
|
||||
const parse = envParser(from)
|
||||
const pg = {
|
||||
host: parse('PG_HOST'),
|
||||
port: parseInt(parse('PG_PORT'), 10),
|
||||
|
||||
Reference in New Issue
Block a user