System Intiative is generally available
systeminit.com
systeminit.com
Suppose that for one reason or another, I want to migrate off of the SI platform. Am I able to get any reusable IAC out in some form? Does SI provide any ways to migrate out of the platform? Or do I just have to rebuild all my infrastructure from scratch outside of SI?
But if you move off of System Initiative, we don't impact your resources at all. You can just stop using it.
We don't make a free distribution of System Initiative - but we expect that someone will eventually, and you could use that.
We have lots of planned work coming here - but we have a very rich dataset to do it from, and we're stoked to get there.
One thing I'm personally wondering about is whether I can import my Terraform state file - because that'd be a pretty good starting point for many orgs.
Regardless, I'm curious how this pans out. Though we've had a few different iterations of IaC in the past decade or so, the infra crowd has been known for being sceptical when it comes to adopting new things than your usual software engineer, especially something that is more like a step change than a gradual evolution.
Very happy someone's taking on this task with a very fresh approach.
But we're 100% open to importing it from the state file if that's what folks need.
Doing this with resources is going to be the easy path. Translating the state representation of re-usable modules I expect is going to be more difficult but necessary for the migration path to be useful. A lot of power in Terraform is being able to stack re-usable components, say an internal module representing a service on top of a public module that provides sensible defaults like the terraform-aws-modules collection which then sits on top of resources.
If you can get this to a place where an existing deployment of Terraform modules can be imported into SI as a collection of re-usable templates and then users can easily deploy n+1 of those templates the same way they would do with Terraform I think you will have an easy migration path.
If not importing from the state at least some way of automatically importing those re-usable components and allowing the deployment of n+1 of a reusable component would be helpful to migration from existing patterns.
Today the obvious drawbacks:
* Terraform has tons of coverage in their provider ecosystem, and we're not close to that yet.
* We have some enterprise features still to add.
* There is some work to be done around huge infrastructures, both in how to provide easy ways to visualize them and how we scale the underlying graphs.
https://docs.systeminit.com/roadmap/
We have plans for all these things, but it's early days. My advice (not just for SI) - you should always build representative prototypes if you want to understand what a technology might do for you. Your circumstances matter, and your problems are likely unique.
I think it's fair to say most people will be interested in potentially replacing Terraform with this. Do you have a comparison against Terraform? Is there a guide on how to import resources into SI?
> When you turn infrastructure into data rather than code, you obviously don't want to stick it in Git
Why not? I still do.
Does it have a way to add support for underlying infrastructure that isn't natively supported, similar to terraform provider plugins?
How do you plan on keeping these "simulations" up to date, and consistent with real infrastructure, especially as you add support for more cloud providers?
You add support directly in System Initiative, by writing the schema and functions in TypeScript. You can see how in the docs.
The resources can be periodically refeshed, and the data flows through all your open change sets automatically - kind of like an automatic rebase. This is also an area where we’re doing work - both to figure out the right intervals and to show drift more clearly.
My only hope is that we learned and we don't end up managing things like GH repositories or Pagerduty schedules.
First, we turned everything into data - a rich system of digital twins that enable safe, easy simluation of changes, and map 1:1 to the upstream resource.
Second, we made it all programmable and reactive by modeling it on top of a hypergraph of functions. When one property on a model changes, anything dependent on that property automatically re-calculates.
Third, we built a multiplayer user interface that makes working with the model fast, safe, and fun.
Seems cool, though I'm far from needing it. AFAIU: it's an attempt to build a reactive infrastructure system from the ground up using a cute Functional Programming paradigm, not just building off of code-like YAML files like we do today.Personally the GUI gives me flashbacks to the dark days where "programming" in my mind was "using Eclipse", but that's a biased take! I can see why WYSIWYG-style functionality was considered too fundamental to make optional.
Or is it just a blob in the database for SI?
What I took away is: it’s a collaborative IDE for infrastructure? with some nifty simulators to catch issues earlier, and “somehow” changes are managed outside the popular git+pipelines workflows?
There are elements of this that I like (faster validations that CDK deployments ). Those aspects are bundled with confusing, either unnecessary or poorly communicated, other elements. “Replacement for IaC” - is there a new paradigm? Or is IaC just now a graph in this local application? Because you tout being able to program new service models, so the code isn’t gone…
It looks like it is in the same space as terraform, but uses a gui instead of defining your infrastructure as code, but allows you to "simulate" and review changes before actually applying them.
That being said, I find the rationale a little bit confusing. I rather love IaC, and consider a GUI or no-code/low-code tool to be more of a dead end (not for any fundamental reason, but for more practical reasons) than plain text. I do really appreciate the problems solved by the simulation approach, but to me these two things are orthogonal. I feel like you could have a product that functionally does what your product does, but with a plain text interface. I appreciate that you're really going for something different here, but I am sure I am not the only person who feels this way.
But you're not alone in thinking this, and I completely understand why you would. The history of things that look like this in this space is.. not great. :)
I'm really not sure that this is a bad thing.
> there isn't a good way to "see" what the real world is like
If the IaC system had the same under-the-hood functionality as System Initiative, what's to stop someone from also building a GUI visualization of the IaC-code?
So what we do instead is have a reactive data model, and shift the code part to a reactive graph of functions.
The same way you update any other code from multiple places. A version control system (eg.: git and github), with CI/CD.
> How do you visualize drift?
Why do you have drift in the first place? Gitops is an obvious solution to drift.
> It’s easy enough to imagine how you would update a single declaration, but thinking about how to make the code reactive will break your brain.
I’m sorry, I don’t follow at all here. I’m not sure what the problem is with IaC. If your IaC is declarative, it’s no more complicated than data.
(I don't have a better one sentence tagline as such, mind, but honestly if I'd only read that I'd never have bothered to look - see my sibling comment for an attempt at an actual high level description ... especially since I probably got something wrong you'll need to correct ;)
However, thank -you- very much for the response and you're absolutely welcome.
Please consider the comment to be licensed under the union of all OSI approved licenses [1] if you want to steal and/or improve any of the wording.
[1] The debian ftpmasters once complained about my having released something to CPAN with two licenses inside. I asked if they wanted the next release to be explicitly under said union so they'd have to tag the upload with all of them. They decided their complaint wasn't actually that important after all.
(and if that makes you think I'm a monster ... ask Adam to explain just how right you are about that ;)
[1] To me at least.
1. Is that a good summary? 2. Why would I pick this?
I know you LOVE it, it's your baby. But why should I love it? :-)
You should love it because it's a more intuitive and more powerful way to build this kind of infrastructure automation. What's happening under the hood isn't just infrastructure as code with a UI - it's a full reactive model of how things work. That's what makes the UI possible, but it's also what brings about so much power - the code that drives those models is also fully exposed and versioned.
So when you have something like a policy to write, you think about what resources you need, use them as inputs to the function, and then store the results. Check out what an early user had to say about it: https://matthewsanabria.dev/posts/take-the-system-initiative...
We'll find out if you love it or not. :)
The example component code reminds me a lot of mobx-state-tree (you have no idea how much cog. diss. I get reading the docs for that thing given they acronym the name everywhere ;) though I find myself much preferring the API shape of mobx-keystone at this point.
(I've been experimenting a lot with reactive graphs of late though while it seemed an obvious thing to try at some point I haven't attempted to wire it up to systems automation yet; shall have to do my usual cover-to-cover documentation read on your site and then hopefully I'll be in touch with a baseline to actually chat about that part ;)
But yeah, you're not wrong that it's got a lot of inspiration from things like mobx and rxjs.
> But yeah, you're not wrong that it's got a lot of inspiration from things like mobx and rxjs.
Please figure out how to deploy a subset of the reactive graph into a k8s operator. It'll be a really cool feature and also it'll probably save me a bunch of time when I want one of those if I can crib from your work :D
I ... bah. I am really looking forwards to getting into another of our involved coversations about this stuff but I'm too tired today and besides I definitely do need to mainline your docs first. I'll probably see you on twitter first with the assumption you'll end up chasing me onto Discord sooner or later ;)
[1] please interpret that in terms of how you remember me (ab)using version numbers ;)
> When modeling AWS IAM policy in System Initiative, we realized that AWS provides a sophisticated Policy Simulator. So we modeled it, connected our IAM Policies and resources to it, and had a new, real time interface to test the validity of IAM policy. It took less than an hour from start to finish.
Clicking the link takes you to the docs on policy simulator, which seems to show it’s quite limited and isn’t representative of actual, deployed IAM rules:
> Important:
> The policy simulator results can differ from your live AWS environment. We recommend that you check your policies against your live AWS environment after testing using the policy simulator to confirm that you have the desired results.
https://docs.aws.amazon.com/IAM/latest/UserGuide/access_poli...
But if I was AWS, I would also say you should check your IAM against the real world, because if you don't, it's pretty easy to wreck you environment. ;)
``` async function main(component: Input): Promise < Output > { const authCheck = await siExec.waitUntilEnd("aws", [ "sts", "get-caller-identity", "--region", "us-east-1" ]);
if (authCheck.exitCode === 0) {
return {
result: "success",
message: 'Credentials are Valid'
};
}
return {
result: "failure",
message: 'Credentials are invalid. Please check the credentials set on the secret/credentials prop!'
};
}
```There is no digital twin I’m aware of that is capable of simulating the real behavior of an EC2 instance. There are just too many variables to consider. To test instance launch and runtime behavior to a meaningful degree of certainty, you have to launch one first. And that means accepting the costs of doing that.
(I notice, too, that you appear to be executing the AWS CLI to do this. I’m not sure if that’s bad or not, but it smells a little fishy.)
Not sure if this is just pseudocode though.
With Infrasturcture, it turns out that what you need to know is "did I make a valid configuration", or "does this set of things work together". It's less about making a mock of the results, and more about simulating that the results would have the effect you think they will. So we can't tell you "will your application work on this size of instance" (although if you know that, you could encode that!) - but we can tell you if the options your setting are correct, if the AMI exists in the region, etc etc.
2. How is a "multiplayer" experience superior to code review-based collaboration flows, in general and for infrastructure work in particular? (I'm someone who values peer review highly and thinks that an independent reviewer improves both the credibility of the process and the quality of the outcome, but who doesn't think a pairing session counts as an objective review.)
2. There is how it is better today, and there is how it can be better in the future. Focusing on just today - frequently the kind of review that needs to be done is by an external subject matter expert. Being able to bring those people in to a change set, show them what the change you are proposing is, and have them inspect and alter it with you in real time is great. An example here is one of our early users wanted to use ECS, but had never used the service before. So they put things together in SI, asked someone who had that expertise to look it over - they could see the architecture, they could change properties, add a few missing things. It was much more straightforward than a back and forth in a PR.
But that's not to say that, in the future, there isn't more to do. We need to have more functionality around who needs to review things, build more specialized views for the review (there's no reason you should be stuck doing a review only in a single view of the architecture), use the snapshots we have of the entire graph to build more insightful ways of communicating what's changed (and what actions will happen when you apply.)
Think multiplayer and powerful review and approval semantics.
I recall trying to convince you to experiment with that when you were building Chef but you'd just come out of working with finance stuff so understandably felt that an uncontrolled change should always be dealt with via emitting a resume generating event.
I continue to believe that for small non-bank organisations, when somebody gets paged in the middle of the night "whatever gets production to stop being on fire the fastest" is completely legitimate and systems automation tooling should support handling the config reconciliation -after- it's back up.
... but enjoy your launch day, having waited this long to argue my case again I can leave it a while longer :D
Charge per user or a percentage of cloud spend under management.
(Off-topic to the post, but since the discussion seems to be dying down anyway, this seemed worth commenting before the post disappears to the back rooms of HN.)
The simulator, if it works as described, is huge. Would be worth 5 figures/year/engineer in time saved alone. If I can deploy to a simulator and it's close enough to the real thing that passing means g2g to prod the you have a gold mine. Oh lord, if you could write tests against the simulator and bring first-class unit testing to devops I might cry.
We're here if you have any questions.
Is there any tldr somewhere?