Atlas by Hashicorp
atlas.hashicorp.com
atlas.hashicorp.com
The only real weakness I see in the stack is Terraform. The elephant in the room is CloudFormation, and being built in Golang, Terraform is bounded by the functionality of Hashicorp's own AWS client lib (https://github.com/mitchellh/goamz), which hugely (and inevitably, given it's not a blessed 3rd-party library like boto) lags the official AWS clients (compare to e.g. https://github.com/aws/aws-sdk-java). It's going to take something radical for Terraform to be relevant to sophisticated AWS users.
IMO the best of the AWS libs is github.com/bmizerany/aws4. It only wraps the auth, the API and results are up to you. This requires more work but means you never have to worry about the lib keeping up with the API. With something that moves as fast as AWS this is great.
But you're right, maintaining even a blessed third-party library like boto is a massive undertaking: 437 contributors, 431 open issues, 192 open PRs. Competing against CloudFormation using anything other than the Java client library is crazy IMO.
But anyway, goamz is "Hashicorp's" AWS Go SDK in that Hashicorp forked it and refused to work with the larger community because it's "critical" to their business. This has, at least until super recently, stranded certain functionality into the different forks and severely fractured the AWS Go offerings. True story.
Ultimately, what the Go community probably needs most is Amazon to step up and support a Go SDK officially. The Java, Ruby, .Net, and even Python SDK's are very robust at this point. I can't speak to the others.
1. Announce something in a blog post (sometimes get everyone really excited)
2. Add access to that feature/setting in the AWS Web UI
3. Add access to that in the official API
4. Add access to that in aws-cli
5. Add access to that in cloud formation stack creation
It seems sometimes weeks and months lag between steps (e.g. steps 2 to 3).I just opened up this repo yesterday: https://github.com/stripe/aws-go.
It's really raw, but it uses the JSON API descriptions from botocore to generate Go clients for all 40 public AWS services.
We're probably going to build a way to group related stories more explicitly, but manually posted comments will have to do for now.
That said, their work is always good, it's just not complete yet, but it's branded as if it is.
- Packer is for syncing VirtualBox, AWS AMIs, and what not for quick and stable starting points, also wonderful.
- Consul is great for monitoring and running a services oriented architecture, haven't pushed it to its full potential though.
- Serf: n/a, haven't tried yet.
- Terraform: n/a.
We are still using Ansible as the provisioner.
Overall, good ecosystem, would recommend.
It's really useful, but on my MBP I've found using it abysmally slow (VirtualBox backend, website code shared using NFS, DB and everything else stored in VirtualBox VM and not shared folders) - page load times taking upwards of 20s (sometimes even a minute) when running direct on my MBP would be under 0.3s.
Never figured out the issue, in spite of extensive research and tweaking. Replace VirtualBox with VMWare Fusion? But without a trial available of the Vagrant addon, bit of an expensive gamble.
https://www.vagrantup.com/blog/feature-preview-vagrant-1-5-r... http://www.midwesternmac.com/blogs/jeff-geerling/nfs-rsync-a...
Exciting to see the shift from clunky, heavy-weight versioned Chef cookbooks/Puppet modules that attempt to prevent 'server drift' by walking the directed graph for all dependencies with server convergence to true service registries like Consul and build images.
Amazon CloudFormation is pretty clunky when it comes to updating user data in the CF stack template that is passed to the resources. Sometimes it even thinks you didn't update anything. Having the file-based template update itself via consul-template seems like a more sane approach.
I am curious how the 'Maintain' part of the autoscaling works given that Amazon AWS has pretty crude autoscaling mechanisms available if you use only what CloudWatch offers. Hoping that 'Maintain' can be given a set of inputs on server health/application responsiveness and decide whether to scale up or scale down.
Also, integration with some kind of historical/real-time cost engine would be a great feature to figure out future/past billing for cloud services.
What I particularly like about their products and their sites is that they take time to properly explain (and explain clearly) how their products fit into your stack, and what their intended use case is. Rather than random "we're working on something that will change devops forever" or similar marketing speak, the Atlas site lays out exactly what their vision for dev and ops is. The "how atlas works" section is brilliant.
I know I'm just repeating what others have said, but as usual, great work.
I think a lot of the work that Amazon has released this past few weeks is trying to get into precisely this space. To be the only company behind your code from development to deployment. I might be wrong, but I think hashicorp is in that space right with them.
Kinda/sorta feels like a stranglehold to have this remaining piece of the Hashicorp puzzle be free and then to start charging for it. :(
To put it another way, we use an analogy internally here at HashiCorp: our open source are our "nuts and bolts" that you can grab off the shelf and be very successful with in building robust systems, but Atlas is the complete car or house (built up from these nuts and bolts) that you can purchase.
In short:
- `vagrant up` to bring up a development enviornment and make application changes
- `vagrant push` to send application code
- `packer push` to package software requirements to produce an artifact (AMI, Docker container, VMware image, many more)
- `terraform apply` to deploy artifacts
Important to note that each of these commands can be executed by different people in different sequences, and all changes are tracked in the Atlas Dashboard/UI.
The current form of Atlas requires usage of our open source and is a tech preview showing what is coming and the direction we're heading. It is very much functional but we're going to make it a very slick system that does all of this for you without a CLI. For example, Atlas currently already runs Packer for you on our servers. We're going to extend that to everything.
I have built a few projects with vagrant and it's annoying when working on the puppet files that I'm constantly installing php and httpd in the vagrant file just to try a new wordpress config.
Should I be using packer to publish a mostly configured vagrant box. My vagrant steps just configure my app specifically for wordpress. Then use that box again in packer to publish it further?
You can checkout the dev version ( https://github.com/Pheromone/jeto-dev ) which prepackage everything.
Proper documentation/tests and a real Getting Started guide is coming.
My VMWare machines have been problem free for many months (as well as my manual VBox ones for years) and the only way I'd even consider using it daily again by choice again is to try out their VMWare support ... which is unfortunately paid so I doubt that will happen. On the other hand, using vagrant did point out some severe weaknesses in VirtualBox itself, especially the file syncing support, and made me realize VMWare is worth the money for that alone. I still use vagrant once in awhile if I only need to test a project out for an hour or two.
As far as deployment, I could see the potential time savings when dealing with multiple VMs but those would only be realized if they're not offset by a longer time spent dealing with bugs. Still, I may give it another shot in that context when the need arises next.