Modern applications rely more and more on configuration. While projects like Vault are a great way to store and organize application secrets like passwords and keys, not many good solutions are available for pure configurations.
We needed a configuration store we can use for ourselves. Our criteria were simple:
In a multi-service, multi-cloud and polyglot system, configuration should be sharable and accessible between services
If your application has more than 1 service and uses a shared resource like a database, chances are you need to provide its address or port in more than 1 place. You can store these values in a shared yaml
file for example, but then the question becomes: where should I store this file? Also, you might want to avoid shipping this file to multiple servers every time you modify it.
Many configuration values are shared between different environments and many are not
When you think about it, many configuration values are shared between different environments. You might have only 1 Mailchimp account in the company but different mailing lists for different environments like staging and production (I hope you do!). We are the same and wanted to avoid duplicating those shared values every time while allowing variations between environments.
Adding configuration items is easy, removing them is difficult
How many times have you tried to figure out where a configuration value is used? We sometimes find ourselves not being to delete an obsolete configuration key, because we can't be sure if it's still in use or not. Having a "Last used" timestamp would be really useful!
Metadata
No matter how diciplined you are in naming your configuration items, you can benefit from at least 2 extra pieces of information about each item: a simple description of what it is and a "type" (integer, string, date, time, etc). You can think of many other very useful metadata that can be added to each configuration item like valid format or range ("was it in seconds or minutes?") or if they can be left empty (null), default values or where they are used. Metadata for configuration items can be a very useful thing!
Hello ConfigStore!
ConfigStore is a hosted service by Cloud 66 and is available to all of our customers for free. You can use it to store configuration items for your Applications or Clusters at an account level or application level. It supports all of the above and more!
Centrally Hosted
ConfigStore is hosted in a central place with high availability and strong security. You don't need to worry about running or configuring anything. It has a simple and understandable API which can be used with any programming language or even bash script.
Support for wildcards
If you want to share a configuration value between different environments like between staging and QA or different environments for your different clients, you can use wildcards in ConfigStore keys. For example, your Mailchip account ID can be stored as "mailchimp.account.*"=FOO
. Now if your production environment need a different value for this item, you can store it with something like "mailchimp.account.production=BAR"
.
Now asking ConfigStore for mailchimp.account.staging
will return FOO
, while mailchimp.account.production
returns BAR
Timestamps
All records in ConfigStore have creation, last edit and last used timestamps so you can delete them if they are not being used.
Metadata
Every configuration item in ConfigStore can have muliple key / value metadata items associated with it. Plenty of room for type, user, description, notes,...
Easy to user UI
Like all other Cloud 66 features, ConfigStore comes with an integrated, intuitive and easy to use UI. Soon we will release a command line for it too!
Integration with Skycap and your environment variables
You can use ConfigStore values in your environment variables of your applications. Simply use _configstore("mailchip.account.production")
as the value of your environment variable. Any change in your ConfigStore value will change all of your environment variables as well.
If you use Skycap to generate configuration files for Kubernetes, you can use it in your Stencils with ${configstore("mailchimp.account.staging")}
.
Start using ConfigStore today
To use ConfigStore, login to your Cloud 66 account. You will find ConfigStore under the Configurations item in the menu for each application and under your Account menu (for account level configurations).
ConfigStore is available today to all of our customers free of charge!