gcf-runtime-config helps you get environment variables within Google Cloud Functions (GCF) through Runtime Config .

Usage

Install it:

$ npm install --save gcf-runtime-config

Enable Google Cloud's Runtime Config API:

$ gcloud services enable runtimeconfig.googleapis.com

Create a new config:

$ gcloud beta runtime-config configs create EXAMPLE_ENVIRONMENT $ gcloud beta runtime-config configs variables \ set PAYPAL_SECRET_KEY "NOTREAL1234!@#$" \ --config-name EXAMPLE_ENVIRONMENT \ --is-text $ gcloud beta runtime-config configs variables \ set STRIPE_SECRET_KEY "YESREAL1234!@#$" \ --config-name EXAMPLE_ENVIRONMENT \ --is-text

Sample function code:

const gcfRuntimeConfig = require ( ' gcf-runtime-config ' ) ; exports . testRuntimeConfig = ( req , res ) => { gcfRuntimeConfig . getVariables ( ' EXAMPLE_ENVIRONMENT ' ) . then ( variablesObj => res . send ( variablesObj ) ) . catch ( err => res . send ( err ) ) ; } ;

The example directory is a ready-to-deploy sample function that uses gcf-runtime-config and extracts a runtime config (environment).

$ gcloud beta functions deploy testExpressApp --trigger-http

$ curl https://<YOUR_PROJECT>.cloudfunctions.net/testRuntimeConfig {"PAYPAL_SECRET_KEY":"NOTREAL1234!@#$","STRIPE_SECRET_KEY":"YESREAL1234!@#$"}

$ gcloud beta functions delete testExpressApp

API

Arguments:

config is a the name of the config, in our example its EXAMPLE_ENVIRONMENT .

is a the name of the config, in our example its . objectify defaults to true , it means the function resolves to an object where its keys and values are the variable names and values. objectify=true in our example results in: {"PAYPAL_SECRET_KEY":"NOTREAL1234!@#$","STRIPE_SECRET_KEY":"YESREAL1234!@#$"} objectify=false in our example results in: [{"name":"STRIPE_SECRET_KEY","updateTime":"2018-05-20T09:53:11.383980095Z","text":"YESREAL1234!@#$"},{"name":"PAYPAL_SECRET_KEY","updateTime":"2018-05-20T09:53:09.683262561Z","text":"NOTREAL1234!@#$"}]

defaults to , it means the function resolves to an object where its keys and values are the variable names and values.

Returns: A Promise that depending on objectify resolves to either an object where its keys and values are the config's parameters and values or to an array of parameter objects.

Why

We needed a way to inject secret keys to a Google Cloud Function. Storing keys in code base is wrong.

License

MIT