Hello,
My name is Alexander Popov and I currently work for Barclaycard US - the lesser known of the US credit card companies, although we are growing and gaining a momentum.
In the past decade we’ve moved from a mere blimp on a radar to the top 10 credit card companies in the US and are accelerating towards being in the top 3…
We are *obviously* hiring like crazy.
If you have experience in developing distributed applications, big/fast data, advanced Java or DevOpsy background - we want to talk to you to convince you to come work for us.
We are in the money-making business, so funding is never an issue… as long as you can convince the business that whatever you do, will generate more money for the business, that is.
PM me if you want to talk to me or one of my colleagues about what we do at Barclaycard in more detail.
So, what the is Terraform?
Certainly not this…
Terraform is a tool [from Hashicorp] for building, changing, and versioning infrastructure safely and efficiently.
Terraform is not a configuration management tool, which are typically used to install and configure software on servers that already exist.
but it allows existing tooling to focus on their strengths: bootstrapping and initializing resources.
Using provisioners, Terraform enables any configuration management tool to be used to setup a resource once it has been created. Terraform focuses on the higher-level abstraction of the datacenter and associated services, without sacrificing the ability to use configuration management tools to do what they do best.
Similarly to CF and Heat Terraform uses configuration files to detail infrastructure setup but it goes further by being cloud agnostic.
A single tf file can orchestrate an AWS and OpenStack clusters while enabling 3rd-party providers like CloudFlare and DNSimple to be integrated to provide CDN and DNS services.
This enables Terraform to represent and manage the entire infrastructure with its supporting services, instead of only the subset that exists within a single provider.
It provides a unified syntax, instead of requiring operators to use non-interoperable tools for each platform and service.
Terraform also separates the planning phase from the execution phase, by using the concept of an execution plan. By running terraform plan, the current state is refreshed and the configuration is consulted to generate an action plan. The plan includes all actions to be taken: which resources will be created, destroyed or modified. It can be inspected by operators to ensure it is exactly what is expected. Using terraform graph, the plan can be visualized to show dependent ordering. Once the plan is captured, the execution phase can be limited to only the actions in the plan. Other tools combine the planning and execution phases, meaning operators are forced to mentally reason about the effects of a change, which quickly becomes intractable in large infrastructures. Terraform lets operators apply changes with confidence, as they know exactly what will happen beforehand.
The "local-exec" provisioner executes a command locally on the machine running Terraform. We're using this provisioner versus the others so we don't have to worry about specifying any connection info right now.
Provisioners are run only when a resource is created. They are not a replacement for configuration management and changing the software of an already-running server, and are instead just meant as a way to bootstrap a server.