9. Build and operate infra as code
■Faster Release
■Consistent Environments
■Security
■Structure
■….
9
10. 10
10
Infrastructure as code is techniques,
practices, and tools from software
development applied to creating
reusable, maintainable, extensible, and
testable infrastructure.
Definition
13. This is how easy it should be to define an environment
machines:
db:
mysql_5.0.27
www:
ruby19
passenger
nginx
network:
domain: qa1.example.com
13
man readable
&
asy to define
14. This is how easy it should be to define an environment
machines:
db:
mysql_5.0.28
www:
ruby19
passenger
nginx
network:
domain: qa1.example.com
14
man readable
&
asy to define
15. 15
Mitigating the risks by providing
15
Consistent Environments
throughout the software dev. process from Dev’s laptop up to
Production
Phoenix Environments
Providing resilient, fault tolerant Environments which can bring up
your infrastructure in one click
15
16. Infrastructure as code – IMMUTABLE!
• Extend the advantages of version
controlfrom your app to Infrastructure.
•Auto deployment will cut the repetitive and
manual process of configuring all infrastructure resources.
• Get a unified view simplifying the monitoring and
management of all resources.
16
“Welcome to the
age of Software
Defined
Economy.”
18. Summary
App Infra
Source code YAML/JSON
InterpreterInterpreter
AWS/OpenStack
Service API
AWS/OpenStack
Service API
Desired App
State
Desired App
State
Desired infra
State
Desired infra
State
19. THANK YOU
For questions or
suggestions:
vm@thoughtworks.com
For questions or
suggestions:
vm@thoughtworks.com
Editor's Notes
In this jargon heavy industry, we have to deal with just too many jargons on a day to day basis
What this simply means that you can define your virtual resources like your instances, routers, switches, storage in simple human readable text file and give it to an orchestrator.
In a while we will see how Infra as code can provide the smart infrastructure which is designed for failure
The sys admin could have put in the configuration or dependencies that only he or she is aware of to get the app working.
Due to which every server becomes “works of art” and as unique as snowflaks
====
Inconsistent environments make it very difficult to determine why an application breaks when it's promoted from one env. to next.
Is it because there's a fault in source code itself? Or is it env configs?
Over the course there are some unique configurations set by the sys admin in desperation to just get the app working on prod and s/he alone is aware of these changes.
You will be able to release updates to your software faster, migration is just lift and shift.
Health is maintained due to immutable infrastructure pattern, you create new servers periodically to avoid any config drift
Since everything is defined you are aware of what goes into the system from ground up.
Several teams can collaborate on the code and since changes to the environment goes through code, its easier to know what changes were made.
https://youtu.be/ALJnfgwJcPg?t=100
Environments is not just virtual machines but also the software defined storage, virtual routers, switches, firewalls, load balancers and several
We will demo the automated deployment of CRUD app on an environment …
First we create two servers
Install an operating system on them
In a while Configure the servers, we can use ansible, chef and puppet to do this
And fetch the repo from github, automate the build, run unit and functional tests and deploy it and also smoke test.
This is how easy it would ideally be for someone to get an env. With the new version of a dependency
This is how easy it would ideally be for someone to get an env. With the new version of a dependency