Take a fundamentally different approach to building distributed systems whether in the data center or in the cloud.
(techno music) - In the system administration world automation isn't new, but DevOps talks about a profoundly different level of automation. We refer to this as infrastructure as code. - It's a completely programmatic approach to infrastructure that allows us to leverage development practices for our systems. - One effect of splitting the Dev and Ops drives apart has been that the best practices of one tribe really didn't carry across to the other. - Yeah, a simple example is the use of source control.
A development shop that doesn't keep their code in source control would widely be considered insane. - Insane in the membrane? - Insane in the brain, but a large number of operations teams don't use source control at all. Even for their scripts or other code. - Yeah, and that's just wrong, but what if we could treat our systems like code? - [Man With Glasses] Yeah, we'd develop them in an IDE, run their unit and integration tests as part of a continuous integration pipeline, deploy them. - [Instructor] Yeah, and even have them make decisions at run time based on their state.
- [Man With Glasses] That's what infrastructure as code is about. Tools exist to configure servers from the bare metal up completely automatically, and with virtual servers, cloud servers or containers, everything can be created, changed and destroyed programmatically. - [Instructor] Yeah, let's give an example of infrastructure as code. Let's take a look at Amazon Web Services. You can completely describe your systems using a JSON format called CloudFormation. - [Man With Glasses] You then have an asset in source control that everyone can look at that's a guaranteed accurate reflection of your systems.
- It brings confidence that your Dev, staging and production environments are identical because they were created from the same specification. - [Man With Glasses] Get away from setting anything up manually. Even UIs are your enemy. Define your infrastructure in a model or drive it via code that exercises a rest API. - [Instructor] Now we can put it in source control, run it through a CI pipeline to test it and then deploy it. - Only the most cowboy of environments would ever have a developer log in and change code in production. - Yeah, we really just don't do that any more.
- It's an anti-pattern, so why do it with your systems? - The biggest challenge in infrastructure as code is changing mindsets. It's a new field, so people can't just rely on the old habits or published best practices on respected sites like infrastructures.org. - I was project managing a major network upgrade in an enterprise IT shop involving a dozen teams. The technical plan, as it was presented to me, was we'll take down the apps, then the databases, then the servers, then the SAN, then the network, change out the network gear and then bring everything back up in reverse order.
Then the developers will test their apps to see if everything's fine, so I asked them, "A lot can go wrong that's going to be very hard "to diagnose at the application level. "How do each of you plan to test your level "before passing it on to the next team?" I got a lot of blank looks. It wasn't their fault. The idea of testing your infrastructure was so rare that they just didn't even think of it, so I told them, "Think about it. "We're not going to go forward until each level "can tell me how they're going to test." After they thought about it, they had great ideas.
The UNIX administrator said, "What if we roll out a script "to all our servers that'll do a ping sweep and see all "what each server can connect to, and then after the upgrade "we'll do the same thing and dif it." Brilliant. - Yeah you know, changing your infrastructure engineer's way of thinking is the key to treating infrastructure as code. Tools themselves just won't do it. - We're all having to deal with greater challenges than the single rack in a closet of days past. - Distributed systems, web scale systems, microservice architectures, virtualization, cloud, now containers, they're all increasing in complexity.
- Trying to keep up with that complexity manually is somewhere between inefficient and impossible. Even traditional automation has trouble keeping up, so switching to an approach that assumes systems are ephemeral is important. - You'll hear the phrase cattle not pets applied to servers in the infrastructure as code world. - That's right. Servers are not something to be hand crafted and named and manually kept up anymore. They're a herd to be processed en masse. - [Instructor] Just a couple final points regarding designing infrastructure as code solutions.
Ops people are used to solving problems with obstacles, and developers are used to solving problems by writing code. As you bring both of these disciplines together, you have the opportunity to bring the best solution to the table. - Next, let's talk about one of the most widespread infrastructure as code practices, configuration management.
In this course, well-known DevOps practitioners Ernest Mueller and James Wickett provide an overview of the DevOps movement, focusing on the core value of CAMS (culture, automation, measurement, and sharing). They cover the various methodologies and tools an organization can adopt to transition into DevOps, looking at both agile and lean project management principles and how old-school principles like ITIL, ITSM, and SDLC fit within DevOps.
The course concludes with a discussion of the three main tenants of DevOps—infrastructure automation, continuous delivery, and reliability engineering—as well as some additional resources and a brief look into what the future holds as organizations transition from the cloud to serverless architectures.
- What is DevOps?
- Understanding DevOps core values and principles
- Choosing DevOps tools
- Creating a positive DevOps culture
- Understanding agile and lean
- Building a continuous delivery pipeline
- Building reliable systems
- Looking into the future of DevOps