11 ms·
Terraform 0.9
- AtheistOfFail 10y agoSomeone just brought this up to me, but I don't see the use if you're already using Flynn to deploy Rails apps. Anyone actually know where this product would fall in the development pipeline? It sounds amazing. Edit: Okay, got it, it's a configuration management application which only applies if you're manually handling your AWS containers.
- rememberlenny 10y agoTerraform allows you to store your configuration changes in version control. Instead of manually clicking buttons in AWS or any kind of IAAS, you can set up Terraform configurations to set up IAM users or spin up EC2 instances. This provides infrastructure configuration that is clearly documented.
- shorsher 10y agoIn my internship this past summer, I used terraform to easily describe the infrastructure and deploy my application on AWS. I.e, what type of EC2 instance I wanted. I really enjoyed my time using it.
- suraj 10y agoI haven't used Flynn, however I am using terraform. Main purpose is to completely automate AWS configuration so we can bring up entire site in CI. This makes it really easy to have staging and production deployed from CI.
- user5994461 10y agoIt's not for development, it's for infrastructure. Terraform allows you to manage VPC, network, routing table , firewalls and gateways in the cloud. There is no other software to do that (only manual click in the AWS website). It can also create AMI, instances and auto scaling groups but there are many tools in that field that do it better.
- sethvargo 10y agoHi there, Terraform is a tool that captures Infrastructure as Code. Flynn appears to be a PaaS, akin to something like Heroku with scheduling capabilities on top. Under the hood, there is some sort of infrastructure that Flynn is deploying to; it's providing an API on top of it to easily manage deployments and scaling. Terraform is the tool that defines the layout and composition of underlying infrastructure resources. Another one of Terraform's strengths is that it supports multiple providers. Most of this thread mentions AWS, but Terraform also supports GCP, Azure, and DigitalOcean. But Terraform can manage anything with an API, so you can codify things like GitHub teams and permissions, DNS configuration, PagerDuty escalation policies, and so much more (https://www.terraform.io/docs/providers/index.html https://www.terraform.io/docs/providers/index.html). All of these definitions are captured in code. You can bring that code under management of source control to get peer review, pull requests, or permission models (signoffs) too. If you are an individual developer happy with Heroku or Flynn, Terraform probably isn't the best choice for you, especially if you do not have a background in operations or you do not want to manage servers. However, most medium->large scale production applications cannot be supported by such technologies and demand a tool like Terraform to manage the complexity. I hope that clears up the differences a bit. Disclaimer: I work for HashiCorp, the company that makes Terraform.
- hubert123 10y agoSo why isn't it also a replacement for ansible? I dont understand this artificially limited scope. You set machines up, why not also set up their software and repos?
- bschwindHN 10y agoAnsible can be used in conjunction with TerraForm and Packer to create AMIs which get fed into a TerraForm script. That's one way, anyway
- HeyImAlex 10y agoI don't know a lot about terraform, but it sounds like they are very different things? Terraform talks mostly to cloud provider apis, ansible usually deals with running code on the servers themselves.
- nodesocket 10y agoHuge Terraform fan. The first time it creates VM's, disks, IPs, firewall rules it is like magic. Infrastructure definition should be code, it just makes sense. If your looking to dive in, I wrote a short introduction blog post on getting started with Google Compute Engine. https://blog.elasticbyte.net/getting-started-with-terraform-and-google-compute-engine/ https://blog.elasticbyte.net/getting-started-with-terraform-...
- oskarpearson 10y agoThis is great, and solves two ongoing problems we have with TF: - The new 'State environment' feature should resolve the issues discussed here: https://charity.wtf/2016/03/30/terraform-vpc-and-why-you-want-a-tfstate-file-per-env/ https://charity.wtf/2016/03/30/terraform-vpc-and-why-you-wan... - The new locking feature means we don't need to use https://github.com/gruntwork-io/terragrunt https://github.com/gruntwork-io/terragrunt
- akurilin 10y agoHow do folks feel about Terraform vs Cloudformation for AWS-only deployments these days? Do we have a clear winner? I remember even a year back there were certain features of AWS that were being made available through Terraform first before you could configured them in CF, so the choice was somewhat non-obvious.
- typicalrunt 10y agoYou're only going to get anecdotes and opinions. Given the inputs you stated, I am full CF because I don't want to manage state files, and I want some more advanced things like Deletion policies and automatic tagging of resources with the stack info. We use these tags in a lot of lookup scripts when operating on the infrastructure.
- truetuna 10y agoTerraform is great but there are certain things that I still use Cloudformation for (simply because you can't do it right now using Terraform). One example is rolling updates on your ASGs. Last time I checked you can't do it via the aws_autoscaling_group resource.
- webo 10y agoFor this we have been creating the CloudFormation in Terraform itself. CF is a giant mess to work with.
- truetuna 10y agoYeah, agreed. Unfortunately when you inevitably make changes to your CF config, `terraform plan` doesn't help because it's likely you changed something inside the `template_body` and Terraform just knows the string has changed and doesn't tell you what part of the config changed. Parameterising as much as you can helps.
- devonkim 10y agoA lot of people including myself have used tools to generate CF or Heat templates in the absence of a need for cross-cloud compatibility that Terraform offers. You can use Troposphere, Stacker, or anything else that can intelligently generate and manage component information as a JSON or Yaml file and get much of the power of Terraform - perhaps more given the option of a full language rather than an external, declarative DSL. I still haven't found an idiomatic, elegant API that can manage all those template references. The primary advantage Cloudformation has for myself is a lack of need to manage the state that Terraform spends so much effort upon. In fact, Cloudformation does this fairly opaquely but was much more obvious when I tried to deploy a CF stack when S3 was down a while ago - being able to use an alternate state file location would have been handy then.
- blaisio 10y agoI love terraform! It is one of the few tools I've found that was easy to understand and easy to integrate with legacy stuff, and it very quickly saved me a huge amount of time. It only took me about 30 minutes to setup a terraform file that could bring up and teardown an entire web stack with a single command. I was so shocked by how straightforward it was that I brought the stack up and down a few times just to make sure it was actually repeatable.
- ex3ndr 10y agoI hope they will fix their VMWare + Docker compatibility. I love terraform, but right now i need to delete manually my VMs to avoid terraform apply crash on trying to capture IP addresses from VSphere.
- webo 10y agoGreat stuff. We have been doing "state environments" using different var files and different state files for a while now, while keeping the same terraform files.
- mrmondo 10y agoWell done guys/gals, any product that helps abstract or attempts to prevent vendor lock-in has my vote. Great work as always HC.
- dkarapetyan 10y agoI was initially a huge fan but now I hate it. It re-invents so many unnecessary wheels that it is downright obnoxious. There are no loops, if statements, variables. Things that have been in programming languages since day 1. It re-invents modules, badly. Has weird hacks like null resources and external data providers to get around shortcomings in their "declarative" model. And a few other things I'm forgetting. Oh, now they're adding "environments". That's just dandy because they got everything else so right. Every place I've seen Terraform used invariably runs into these shortcomings and the workarounds range from using Erb and Jinja templates to generate Terraform templates to just ditching it entirely and using home-grown solutions. Terraform should have been a library in an actual programming language instead of a gimped external DSL that re-invents the wheel.
- harlowja 10y agoIt also seems pretty much the same as ansible (which suffers the same problems as you mentioned). I pretty much agree with you, they should of provided 2 entrypoints IMHO, they can make there DSL and all that and make it (eventually) turing complete and at the same time they should just provide composeable objects in <some> language as well. I've never quite figured out who the target audience is for these kind of DSL(s), is it people that can't program, or people that can't program well/at all (without adult supervision)?
- dkarapetyan 10y agoI don't know either. Puppet, ansible, salt, and friends are in the same boat. The best part is that the special syntax doesn't buy them anything. They just end up being gimped languages for expressing some kind of dependency graph.
- bostik 10y agoAll configuration management systems suck. They all suck in equal measure, but each in a different fashion. You can only try to pick the one tool that sucks the least for your particular use-case and hope that two years down the line you made the right choice.
- skMed 10y agoGreat changes! State environments is the feature that stands out the most for me. Currently, this is done by managing different sets of TF VARs. That's not going away, but this should allow for more nuanced modules.
- meddlepal 10y agoFuck no! No offense but you sound like a developer trying to do Ops. Stop. Go back to what you're good at. If you want loops and control structures use the various providers APIs. The point of Terraform is to be deterministic as possible.
- simplehuman 10y agoStop being so condescending.
- nunez 10y agodamn did a dev spit in your coffee? you sound so salty
- dang 10y agoI'm sure you've got a substantive point here but (a) you haven't explained it and (b) you added incivility instead. To make it a good comment, you could (a) remove the incivility and (b) add explanation. We detached this subthread from https://news.ycombinator.com/item?id=13899581 https://news.ycombinator.com/item?id=13899581 and marked it off-topic.
- plainOldText 10y agoI'm not yet ready to jump into docker and the likes, and I've used terraform for setting up the infrastructure for a 3-tiered project and I was extremely pleased with this tool.
- slap_shot 10y agoCan anyone compare Fugue[0] with Terraform/Terraform Enterprise. I'm launching a venture that requires deploying and maintaining cloud infrastructure across the three major cloud providers (AWS, GCP, Azure) and am considering options. Most of our infrastructure is kubernetes but Fugue caught my eye for their AWS deployments. Curious if anyone has used both. [0] https://fugue.co/ https://fugue.co/
- Vinnl 10y agoFor anyone else annoyed that there's no RSS feed: http://feed43.com/0475703031862353.xml http://feed43.com/0475703031862353.xml
- whatnotests 10y ago[Serious] if I'm already happy using CloudFormation for AWS, and I don't plan on supporting AWS + another cloud, is Terraform for me? Or is it for other use-cases?
- mitchellh 10y agoHey there, I'm one of the creators of Terraform. Honestly, if you're happy using CloudFormation and you're sticking with AWS, just stick with CloudFormation. Terraform will be around when/if circumstances change and it'll be better than ever by that time. No rush if things are working for you. The best time to look into something like Terraform is if you begin managing more than just AWS resources. Even so, you can choose to use CF for AWS and TF for non-AWS. Or, if you want to start taking advantage of the higher-level features Terraform is beginning to support. At the end of the day though, I'm a big fan of working with what you're most expert with until circumstances require otherwise.
- whatnotests 10y agoHey thanks for the swift response -- you have plenty other stuff to get to, I'm sure.
- jdubie 10y agoWe were AWS only and switched from CloudFormation to Terraform and have been a lot more productive.
- nunez 10y agoI think TF is better at post-setup execution. I haven't used CF in a while, but I remember having it run commands post-setup (outside of user data) being kind of kludgey. I also really really dig its module system; it lets you get incredibly creative. I also heavily prefer HCL over Amazon's DSL (at least what I remember of it when I used it heavily last year. Self referencing security groups were a huge pain in CF but pretty easy in TF) the biggest win for TF (IMO) is that it doesn't lock you into any provider. It is a lot easier to design TF configs to work in cross-cloud scenarios (well, "easy") than it is to port CF over to something else (which is AWS only.
- zwischenzug 10y agoWrote this recently: https://medium.com/@zwischenzugs/dynamic-terraform-environments-eabaf01f85df#.2b9djqu48 https://medium.com/@zwischenzugs/dynamic-terraform-environme... is there a 'proper' way to create dynamic environments?
- jdoss 10y agoI cannot recommend Terraform enough for teams that are looking to gut their old infrastructure deployment methods. We used Terraform ~0.7 to build out our EU VPC on AWS. After a bit of pain understanding how to build modules we were finally able to say we have our infrastructure truly in code. We were even able to reproduce our exact infrastructure deployment, with a bit of tweaking, for partner that had strict data privacy requirements. Terraform allowed us to provision a smaller scale deployment of our production deployment on their AWS account in about a days worth of work. We plan on redoing our US deployment Terraform and we we are going to POC their Pro/Enterprise version very soon If you want a great starting point for learning how to do things the right way https://github.com/hashicorp/best-practices/tree/master/terraform https://github.com/hashicorp/best-practices/tree/master/terr... helped us out a lot.
- golovast 10y agoAt lot of the debate here centers on DSLs vs programming languages and I don't want to get into the weeds of that. I did use terraform extensively at a few places and generally if you want to do something simple it does a fine job. When things start getting complex and the team & infrastructure is larger...well, let's just say some warts start coming up. You more or less end up with some type of a wrapper around it. But in another place we decided to use troposphere[0] and I liked it more (at least for AWS-only shops). A lot more flexibility and you're relying on Cloudformation to do some of the heavy lifting around states. We basically ended up with a tool based on that library which would generate deployable CF stacks (and some other things). [0] https://github.com/cloudtools/troposphere https://github.com/cloudtools/troposphere
- erikrothoff 10y agoThis is so cool. I literally found Terraform yesterday and I guess I found 0.9 just before the announcement. I spent the entire evening reading and trying to get it running with Linode. I've got to say, I always end up falling in love with products with cool names, nice logos, great design and easy interfaces. Terraform and most of the Hashicorps products I've seen tick all of those boxes. I'm amazed at the quality of the tools. However a question: The documentation makes it really clear that Terraform is not a configuration management tool. Do I understand this correctly that it means you need another tool like Chef to run all base setup code, like install firewalls, set timezone, install other packages? I've been using Ansible to install a baseline of packages for my servers.
- mylons 10y agoyes you need a configuration management tool to go with terraform. terraform is for infrastructure.
- arjie 10y agoWhat's the general pattern for making sharded applications where each machine needs to be distinguishable on that count? For instance, say you're sharding across three machines. And now you want to up that to four. Each instance of the application is smart enough to do it provided it knows which shard it's in. We deploy fully baked AMIs containing an application. Do you make separate AMIs per shard? Or do you supply configuration afterwards? Or do you template and generate your plan file each time? I haven't found anything on this so I'm hoping someone can tell me.
- jbkkd 10y agoI'm guessing there is a finite number machine types, and they are well defined and do not change often? What you could do is generate a different packer configuration for each of those types (guessing you use packer since you mentioned AMIs), which will create a different image for each machine type. You can scale each type individually. Happy to help if you need specific advice.
- arjie 10y agoAh, I wasn't terribly clear. Each node is actually the same machine type. It's something like Voldemort with partition-aware routing at the client[0]. Essentially, there's a small amount of configuration to determine which partitions a specific node should serve. Do people usually just build k AMIs if they have k partition groups that they want to serve? For a sort of simplistic version of the problem, imagine the data was splittable into 6 partitions and you hashmod the partitions across 3 groups. So instances in group 1 will serve partitions 0,4; instances in group 2 will server partitions 1,5; and so on. Does one build an AMI for group 1, one for group 2, and one for group 3? Does one provide configuration informing which group a specific node should serve through other means? Or does one stick that in a Terraform definition? 0: https://www.project-voldemort.com/voldemort/design.html https://www.project-voldemort.com/voldemort/design.html
- jon-wood 10y agoPersonally I'd build a single AMI with a startup script that extracts any configuration for things like which partition group the instance is in from user data (http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-insta...)
- cultavix 10y agoAmazing platform. We've recently taken about 6 months to define our entire infrastructure in Terraform. We've been using it since version 0.6 and with version 0.9, the biggest feature to come for us is definitely the remote back-end and the remote locking mechanism (which we use Terragrunt for atm). The remote back-ends mean that the state will not longer be stored on the local machine which is obviously a big plus for security as the state actually contains all of your infrastructure information and even secrets. Anyway, huge project and huge potential, so much so, I've made it the headline in my CV! Thank you Hashicorp, keep it coming! It's allowed us to do the following for our developers: Full integration with the CI/CD process. Open a branch, commit it to GitHub, add a special label and you will get a completely new setup, just to test your branch. New application name in the service discovery tool (Consul/Eureka), new RDS instances, new network, etc, etc. Once happy, the developers can merge into dev and the branched version of the infrastructure is destroyed.
- Kiro 10y agoI'm running a small game on Heroku (Node.js + WebSocket) but I want to migrate it to my own DO/Linode server. However, I know nothing about servers and I'm terrified I will make all kind of security errors. Is this something I should use to mitigate it? OT but what I really want is a service where I just click a button and they configure the server for me with automated security updates.
- thibaut_barrere 10y agoPreliminary note: I use AWS, Heroku, dedicated or baremetal servers, for different purposes. I'd first ask what makes you want to move out of Heroku, especially if you have no sysadmin experience at all. Re OT: you should really check out https://www.engineyard.com/ https://www.engineyard.com/, which provides a layer of services on top of AWS. You can handle a Rails or Node application with little experience and have security updates (Disclaimer: I'm a happy customer, but again I use many different providers so I don't think I'm too biased).
- Kiro 10y agoThank you for the suggestion! See my other comment for reasons why I want to move away from Heroku. I can expand on the cycling bit though: I keep my game's state in memory all the time and really just want to write to the database once in a while. The random cycling prevents this since it just terminates the app without any warning so any state is lost.
- OJFord 10y ago> I know nothing about servers and I'm terrified I will make all kind of security errors. Is this something I should use to mitigate it? Not really. What Terraform does is to allow you to put all your configuration in (versioned) code. So you can have all your existing configuration, and then change the relevant definitions to Digital Ocean or Linode and make the commit 'Move to DO/Linode'. Exactly how its configured - security or otherwise - is still up to you though. > OT but what I really want is a service where I just click a button and they configure the server for me with automated security updates. Why are you moving from Heroku to Digital Ocean then? Heroku is much closer to, if not exactly that.
- codecurve 10y agoWe had a tough time with Terraform on AWS. The syntax is undeniably better than Cloudformation and having the concept of modularity built in is a big win. However, when things went wrong we ended up with cryptic error messages and often when `terraform up` failed, then `terraform destroy` would fail too, leaving us using AWS console to jump in and start clearing up the resources. Particularly painful because AWS has no awareness that your stack came from a Terraform config, so you have to navigate through the subresource menus destroying things one-by-one. We ended up switching over to Cloudformation. The extra verbosity does suck, but the tooling for running/updating stacks feels far safer. We can review the changeset when we update the stack, view a realtime event log as resources are created, deleted or updated, and best of all we can always tear the stack down from a single point.
- davidgerard 10y agoWe're getting into using this on AWS. Plus points: it's awesomely powerful and actually useful. Minus point: the version number is not a lie, this is buggy betaware that deprecates functionality fast without looking back, and if you use it for real work at this stage you are live beta testing both the software and its functionality and will tear out your remaining hair. Even given that, we're sticking with it.
- tvaughan 10y agohttps://gitlab.com/tvaughan/terraform-aws-starterkit https://gitlab.com/tvaughan/terraform-aws-starterkit