While looking at some stuff, like I am wont to do on a lazy Sunday, I came across Azure App Configuration (AAC). Which is different than Azure Key Vault, I am sure. How, I am not sure, but surely they are. Otherwise, there wouldn't be two products, right?
Don't answer that. It's quite possible that the Azure team has gotten so large they work on competing products. Just sayin'.
I jest, of course. These products seem to do the same thing on the surface but have different roles and use cases. No need for me to walk through them. But I did find this nugget:
How is App Configuration different from Azure Key Vault?
App Configuration is complementary to Key Vault. They’re typically used side by side to store and distribute application configuration data. While Key Vault is designed for secret management and operations, App Configuration is optimized for hierarchical and/or dynamic application settings.
Phew, now we know!!
App Configuration Cost: $1.20/day + .06/10K after 200K hits.
Key Vault Cost: $.03/10K + more stuff for other stuff.
I am going to talk about AAC. Which is great. A nice solution for a "problem." Or a problem looking for a solution? The issue is different environments, secrets in source control, who has the latest connections string, did the keys chnage as part of a rotating key program, etc. How do you update 20 resources efficiently? AAC is a solution. Simple enough:
var builder = new ConfigurationBuilder();
//here is where you get your config
builder.AddAzureAppConfiguration(Environment.GetEnvironmentVariable("ConnectionString"));
var config = builder.Build();
var setting = config["TestApp:Settings:Message"]
That's easy enough. I love it. You can even have connection string (resources) for each environment and not have to worry about it in code. Sweet. But it's going to cost you $1.20*30=$36/month plus overages.
That's not cheap. That's a lot. $432/year. Every. Year. Forever.
Here goes.
It's such a good idea, which haven't I done it already? What can we use that is super fast, key/value pairs and all we need is a connection string to quickly access?
Azure Table Storage.
Part 2 of this will write up a competitor to AAC that you can run, on your own, for "free." Azure Table Storage has a related cost, but it's:
$.045/GB
$0.00036 per 10K/transactions (local redudancy - the cheapest)
200K transaction costs $.0072 + .045/GB = $.05/month for an equivalent service. We can updgrade to RA-GZRS which is uber regional, quad/reads, elf shipping and includes a copy in your bedroom (I kid, so don't look for that option). The upgrade will cost $.1265/GB. So, up that previous estimate to $.14/month (same transaction cost).
So we now know, we can have a similar feature, in transactional and storage costs to be a little cheaper. So what you're paying for every day, month and year - forever - is the dev work that someone did and is doing to provide you this product.
Austin and I have discussed value in paying third parties for something versus developing in-house. He convinced me that there is a place where this makes sense.
This isn't it.
A decent developer can bank out a working product in a day. Fix the 20% bug rate in the next month and never worry about it again. It'll be stable. After all - it's pulling down data from an uber-fast resource parsing and moving on. What's the daily rate for a dev? In the states? 100K/annualy/52/5=$382. This could be more or less. Could be done faster or slower. But it's done. the rest of the years are free.
And you can continue to use on othe rprojects.
And you can share make it OSS (a little payback for all the free stuff you've used over the years). This is what I'll do. I already share some stuff with an MIT license. I'll add this to it.
I'll share the journey and see if the value in developing this myself was worth it.
P.S.
If you already have a solution that works and is free (user secrets, config files, etc., this make it even harder to justify).