From 5e31ec47a29f473bab1575e0b3d2ad119f75050d Mon Sep 17 00:00:00 2001 From: Yevgeniy Brikman Date: Thu, 20 Jun 2024 18:39:50 +0100 Subject: [PATCH] Delete docs directory --- docs/02.html | 5112 --------- docs/03.html | 6252 ----------- docs/04.html | 9620 ----------------- docs/05.html | 7872 -------------- docs/06.html | 7530 ------------- docs/07.html | 986 -- docs/08.html | 986 -- docs/09.html | 986 -- docs/10.html | 986 -- docs/11.html | 986 -- docs/12.html | 988 -- docs/13-footnotes.html | 1147 -- docs/images/ch1/architecture-evolution-1.png | Bin 9736 -> 0 bytes docs/images/ch1/architecture-evolution-2.png | Bin 39387 -> 0 bytes docs/images/ch1/architecture-evolution-3.png | Bin 68848 -> 0 bytes docs/images/ch1/architecture-evolution-4.png | Bin 81139 -> 0 bytes docs/images/ch1/architecture-evolution-5.png | Bin 98617 -> 0 bytes docs/images/ch1/architecture-evolution-6.png | Bin 152811 -> 0 bytes docs/images/ch1/architecture-evolution-7.png | Bin 172292 -> 0 bytes docs/images/ch1/architecture-evolution-8.png | Bin 212365 -> 0 bytes docs/images/ch1/architecture-evolution-9.png | Bin 400512 -> 0 bytes .../ch1/architecture-evolution-full.drawio | 2000 ---- .../ch1/architecture-evolution-stage-1.png | Bin 78007 -> 0 bytes .../ch1/architecture-evolution-stage-2.png | Bin 229808 -> 0 bytes .../ch1/architecture-evolution-stage-3.png | Bin 546093 -> 0 bytes docs/images/ch1/architecture-evolution.drawio | 1272 --- docs/images/ch1/attach-iam-user-policies.png | Bin 1056371 -> 0 bytes docs/images/ch1/aws-creds.png | Bin 784230 -> 0 bytes docs/images/ch1/create-iam-user.png | Bin 796699 -> 0 bytes docs/images/ch1/ec2-instance-ip.png | Bin 481620 -> 0 bytes .../images/ch1/ec2-instance-type-key-pair.png | Bin 256978 -> 0 bytes docs/images/ch1/ec2-name-ami.png | Bin 567591 -> 0 bytes docs/images/ch1/ec2-network-settings.png | Bin 268057 -> 0 bytes .../images/ch1/ec2-terminate-instance-raw.png | Bin 705301 -> 0 bytes docs/images/ch1/ec2-terminate-instance.png | Bin 409883 -> 0 bytes docs/images/ch1/ec2-user-data.png | Bin 155586 -> 0 bytes docs/images/ch1/fly-io-app-settings.png | Bin 1141036 -> 0 bytes docs/images/ch1/security-group-name.png | Bin 118993 -> 0 bytes docs/images/ch1/security-group-rule.png | Bin 82512 -> 0 bytes docs/images/ch2/.DS_Store | Bin 6148 -> 0 bytes docs/images/ch2/ad-hoc-script.png | Bin 20521 -> 0 bytes docs/images/ch2/ansible-role.png | Bin 33771 -> 0 bytes docs/images/ch2/chef.png | Bin 69911 -> 0 bytes docs/images/ch2/iam-user-access-keys-save.png | Bin 844679 -> 0 bytes .../ch2/iam-user-access-keys-use-case.png | Bin 867229 -> 0 bytes docs/images/ch2/iam-user-access-keys.png | Bin 589523 -> 0 bytes docs/images/ch2/server-templating.png | Bin 29978 -> 0 bytes docs/images/ch2/tofu-and-ansible.png | Bin 19138 -> 0 bytes docs/images/ch2/tofu-and-packer.png | Bin 20615 -> 0 bytes docs/images/ch2/tofu-packer-docker-k8s.png | Bin 35836 -> 0 bytes docs/images/ch2/tofu.png | Bin 57298 -> 0 bytes docs/images/ch2/vms-docker.png | Bin 42520 -> 0 bytes docs/images/ch3/alb.png | Bin 32245 -> 0 bytes .../ch3/asg-instance-refresh-health-check.png | Bin 1130101 -> 0 bytes .../ch3/asg-instance-refresh-instances.png | Bin 878356 -> 0 bytes docs/images/ch3/asg-instance-refresh.png | Bin 497792 -> 0 bytes docs/images/ch3/docker-desktop-k8s.png | Bin 577240 -> 0 bytes docs/images/ch3/kubernetes_architecture.png | Bin 64895 -> 0 bytes docs/images/ch3/lambda-console-test-event.png | Bin 106365 -> 0 bytes docs/images/ch3/lambda-console.png | Bin 314959 -> 0 bytes .../images/ch3/orchestration-evolution.drawio | 118 - docs/images/ch3/progress-bar-1-of-4.png | Bin 997 -> 0 bytes docs/images/ch3/progress-bar-2-of-4.png | Bin 1000 -> 0 bytes docs/images/ch3/progress-bar-3-of-4.png | Bin 1008 -> 0 bytes docs/images/ch3/progress-bar-4-of-4.png | Bin 992 -> 0 bytes docs/images/ch3/server-names.png | Bin 730216 -> 0 bytes docs/images/ch4/.DS_Store | Bin 6148 -> 0 bytes docs/images/ch4/code-coverage-file.png | Bin 206767 -> 0 bytes docs/images/ch4/code-coverage.png | Bin 292937 -> 0 bytes docs/images/ch4/create-new-gh-repo.png | Bin 339940 -> 0 bytes docs/images/ch4/gh-pr-open.png | Bin 471837 -> 0 bytes docs/images/ch4/gh-pr.png | Bin 292933 -> 0 bytes docs/images/ch4/gh-repo-create-readme.png | Bin 60818 -> 0 bytes docs/images/ch4/gh-repo-with-code.png | Bin 495947 -> 0 bytes docs/images/ch4/gh-repo-with-readme.png | Bin 590038 -> 0 bytes docs/images/ch4/new-empty-gh-repo.png | Bin 969085 -> 0 bytes docs/images/ch4/test-pyramid.drawio | 55 - docs/images/ch4/test-pyramid.png | Bin 32180 -> 0 bytes docs/images/ch4/vcs-word.drawio | 81 - docs/images/ch4/vcs-word.png | Bin 43033 -> 0 bytes docs/images/ch5/.DS_Store | Bin 6148 -> 0 bytes .../images/ch5/branch-by-abstraction-1.drawio | 31 - docs/images/ch5/branch-by-abstraction-1.png | Bin 14296 -> 0 bytes .../images/ch5/branch-by-abstraction-2.drawio | 49 - docs/images/ch5/branch-by-abstraction-2.png | Bin 26219 -> 0 bytes .../images/ch5/branch-by-abstraction-3.drawio | 60 - docs/images/ch5/branch-by-abstraction-3.png | Bin 27568 -> 0 bytes .../images/ch5/branch-by-abstraction-4.drawio | 60 - docs/images/ch5/branch-by-abstraction-4.png | Bin 28433 -> 0 bytes docs/images/ch5/data-driven-development-1.png | Bin 28572 -> 0 bytes docs/images/ch5/data-driven-development-2.png | Bin 27358 -> 0 bytes docs/images/ch5/data-driven-development-3.png | Bin 35485 -> 0 bytes docs/images/ch5/deployment-pipeline.drawio | 169 - docs/images/ch5/deployment-pipeline.png | Bin 104769 -> 0 bytes ...eployment-strategies-blue-green-middle.png | Bin 736080 -> 0 bytes .../deployment-strategies-canary-middle.png | Bin 609683 -> 0 bytes .../ch5/deployment-strategies-downtime.png | Bin 450344 -> 0 bytes .../deployment-strategies-ending-point.png | Bin 433280 -> 0 bytes ...ment-strategies-promotion-workflow-dev.png | Bin 626380 -> 0 bytes ...ent-strategies-promotion-workflow-prod.png | Bin 627481 -> 0 bytes ...nt-strategies-promotion-workflow-stage.png | Bin 626905 -> 0 bytes ...nt-strategies-promotion-workflow-start.png | Bin 625818 -> 0 bytes .../ch5/deployment-strategies-rolling-end.png | Bin 734623 -> 0 bytes .../deployment-strategies-rolling-middle.png | Bin 740118 -> 0 bytes ...loyment-strategies-rolling-replace-end.png | Bin 832732 -> 0 bytes ...ment-strategies-rolling-replace-middle.png | Bin 815870 -> 0 bytes ...yment-strategies-rolling-replace-start.png | Bin 487779 -> 0 bytes .../deployment-strategies-rolling-start.png | Bin 732671 -> 0 bytes .../deployment-strategies-starting-point.png | Bin 432800 -> 0 bytes .../ch5/deployment-strategy-blue-green.drawio | 180 - .../ch5/deployment-strategy-blue-green.png | Bin 107915 -> 0 bytes .../ch5/deployment-strategy-canary.drawio | 175 - .../images/ch5/deployment-strategy-canary.png | Bin 100954 -> 0 bytes .../ch5/deployment-strategy-downtime.drawio | 172 - .../ch5/deployment-strategy-downtime.png | Bin 88908 -> 0 bytes .../deployment-strategy-feature-toggle.drawio | 291 - .../deployment-strategy-feature-toggle.png | Bin 133057 -> 0 bytes .../ch5/deployment-strategy-promotion.drawio | 400 - .../ch5/deployment-strategy-promotion.png | Bin 127443 -> 0 bytes ...eployment-strategy-rolling-downtime.drawio | 197 - ...t-strategy-rolling-with-replacement.drawio | 238 - ...ment-strategy-rolling-with-replacement.png | Bin 127887 -> 0 bytes ...trategy-rolling-without-replacement.drawio | 197 - ...t-strategy-rolling-without-replacement.png | Bin 105595 -> 0 bytes docs/images/ch5/gh-actions-test-failure.png | Bin 994928 -> 0 bytes docs/images/ch5/gh-actions-tests-pass.png | Bin 476141 -> 0 bytes .../gh-deployment-pipeline-apply-output.png | Bin 1224773 -> 0 bytes .../gh-deployment-pipeline-plan-output.png | Bin 1204209 -> 0 bytes .../ch5/gh-deployment-pipeline-running.png | Bin 672468 -> 0 bytes docs/images/ch5/github-pr-tofu-tests.png | Bin 677942 -> 0 bytes docs/images/ch5/iss.png | Bin 328823 -> 0 bytes docs/images/ch5/late-integration.drawio | 400 - docs/images/ch5/late-integration.png | Bin 123418 -> 0 bytes docs/images/ch5/oidc-github-diagram.drawio | 158 - docs/images/ch5/oidc-github-diagram.png | Bin 144033 -> 0 bytes docs/images/ch5/pull-request-tests.png | Bin 487872 -> 0 bytes docs/index.html | 2596 ----- 137 files changed, 52350 deletions(-) delete mode 100644 docs/02.html delete mode 100644 docs/03.html delete mode 100644 docs/04.html delete mode 100644 docs/05.html delete mode 100644 docs/06.html delete mode 100644 docs/07.html delete mode 100644 docs/08.html delete mode 100644 docs/09.html delete mode 100644 docs/10.html delete mode 100644 docs/11.html delete mode 100644 docs/12.html delete mode 100644 docs/13-footnotes.html delete mode 100644 docs/images/ch1/architecture-evolution-1.png delete mode 100644 docs/images/ch1/architecture-evolution-2.png delete mode 100644 docs/images/ch1/architecture-evolution-3.png delete mode 100644 docs/images/ch1/architecture-evolution-4.png delete mode 100644 docs/images/ch1/architecture-evolution-5.png delete mode 100644 docs/images/ch1/architecture-evolution-6.png delete mode 100644 docs/images/ch1/architecture-evolution-7.png delete mode 100644 docs/images/ch1/architecture-evolution-8.png delete mode 100644 docs/images/ch1/architecture-evolution-9.png delete mode 100644 docs/images/ch1/architecture-evolution-full.drawio delete mode 100644 docs/images/ch1/architecture-evolution-stage-1.png delete mode 100644 docs/images/ch1/architecture-evolution-stage-2.png delete mode 100644 docs/images/ch1/architecture-evolution-stage-3.png delete mode 100644 docs/images/ch1/architecture-evolution.drawio delete mode 100644 docs/images/ch1/attach-iam-user-policies.png delete mode 100644 docs/images/ch1/aws-creds.png delete mode 100644 docs/images/ch1/create-iam-user.png delete mode 100644 docs/images/ch1/ec2-instance-ip.png delete mode 100644 docs/images/ch1/ec2-instance-type-key-pair.png delete mode 100644 docs/images/ch1/ec2-name-ami.png delete mode 100644 docs/images/ch1/ec2-network-settings.png delete mode 100644 docs/images/ch1/ec2-terminate-instance-raw.png delete mode 100644 docs/images/ch1/ec2-terminate-instance.png delete mode 100644 docs/images/ch1/ec2-user-data.png delete mode 100644 docs/images/ch1/fly-io-app-settings.png delete mode 100644 docs/images/ch1/security-group-name.png delete mode 100644 docs/images/ch1/security-group-rule.png delete mode 100644 docs/images/ch2/.DS_Store delete mode 100644 docs/images/ch2/ad-hoc-script.png delete mode 100644 docs/images/ch2/ansible-role.png delete mode 100755 docs/images/ch2/chef.png delete mode 100644 docs/images/ch2/iam-user-access-keys-save.png delete mode 100644 docs/images/ch2/iam-user-access-keys-use-case.png delete mode 100644 docs/images/ch2/iam-user-access-keys.png delete mode 100755 docs/images/ch2/server-templating.png delete mode 100755 docs/images/ch2/tofu-and-ansible.png delete mode 100755 docs/images/ch2/tofu-and-packer.png delete mode 100755 docs/images/ch2/tofu-packer-docker-k8s.png delete mode 100644 docs/images/ch2/tofu.png delete mode 100755 docs/images/ch2/vms-docker.png delete mode 100755 docs/images/ch3/alb.png delete mode 100644 docs/images/ch3/asg-instance-refresh-health-check.png delete mode 100644 docs/images/ch3/asg-instance-refresh-instances.png delete mode 100644 docs/images/ch3/asg-instance-refresh.png delete mode 100644 docs/images/ch3/docker-desktop-k8s.png delete mode 100644 docs/images/ch3/kubernetes_architecture.png delete mode 100644 docs/images/ch3/lambda-console-test-event.png delete mode 100644 docs/images/ch3/lambda-console.png delete mode 100644 docs/images/ch3/orchestration-evolution.drawio delete mode 100644 docs/images/ch3/progress-bar-1-of-4.png delete mode 100644 docs/images/ch3/progress-bar-2-of-4.png delete mode 100644 docs/images/ch3/progress-bar-3-of-4.png delete mode 100644 docs/images/ch3/progress-bar-4-of-4.png delete mode 100644 docs/images/ch3/server-names.png delete mode 100644 docs/images/ch4/.DS_Store delete mode 100644 docs/images/ch4/code-coverage-file.png delete mode 100644 docs/images/ch4/code-coverage.png delete mode 100644 docs/images/ch4/create-new-gh-repo.png delete mode 100644 docs/images/ch4/gh-pr-open.png delete mode 100644 docs/images/ch4/gh-pr.png delete mode 100644 docs/images/ch4/gh-repo-create-readme.png delete mode 100644 docs/images/ch4/gh-repo-with-code.png delete mode 100644 docs/images/ch4/gh-repo-with-readme.png delete mode 100644 docs/images/ch4/new-empty-gh-repo.png delete mode 100644 docs/images/ch4/test-pyramid.drawio delete mode 100644 docs/images/ch4/test-pyramid.png delete mode 100644 docs/images/ch4/vcs-word.drawio delete mode 100644 docs/images/ch4/vcs-word.png delete mode 100644 docs/images/ch5/.DS_Store delete mode 100644 docs/images/ch5/branch-by-abstraction-1.drawio delete mode 100644 docs/images/ch5/branch-by-abstraction-1.png delete mode 100644 docs/images/ch5/branch-by-abstraction-2.drawio delete mode 100644 docs/images/ch5/branch-by-abstraction-2.png delete mode 100644 docs/images/ch5/branch-by-abstraction-3.drawio delete mode 100644 docs/images/ch5/branch-by-abstraction-3.png delete mode 100644 docs/images/ch5/branch-by-abstraction-4.drawio delete mode 100644 docs/images/ch5/branch-by-abstraction-4.png delete mode 100755 docs/images/ch5/data-driven-development-1.png delete mode 100755 docs/images/ch5/data-driven-development-2.png delete mode 100755 docs/images/ch5/data-driven-development-3.png delete mode 100644 docs/images/ch5/deployment-pipeline.drawio delete mode 100644 docs/images/ch5/deployment-pipeline.png delete mode 100644 docs/images/ch5/deployment-strategies-blue-green-middle.png delete mode 100644 docs/images/ch5/deployment-strategies-canary-middle.png delete mode 100644 docs/images/ch5/deployment-strategies-downtime.png delete mode 100644 docs/images/ch5/deployment-strategies-ending-point.png delete mode 100644 docs/images/ch5/deployment-strategies-promotion-workflow-dev.png delete mode 100644 docs/images/ch5/deployment-strategies-promotion-workflow-prod.png delete mode 100644 docs/images/ch5/deployment-strategies-promotion-workflow-stage.png delete mode 100644 docs/images/ch5/deployment-strategies-promotion-workflow-start.png delete mode 100644 docs/images/ch5/deployment-strategies-rolling-end.png delete mode 100644 docs/images/ch5/deployment-strategies-rolling-middle.png delete mode 100644 docs/images/ch5/deployment-strategies-rolling-replace-end.png delete mode 100644 docs/images/ch5/deployment-strategies-rolling-replace-middle.png delete mode 100644 docs/images/ch5/deployment-strategies-rolling-replace-start.png delete mode 100644 docs/images/ch5/deployment-strategies-rolling-start.png delete mode 100644 docs/images/ch5/deployment-strategies-starting-point.png delete mode 100644 docs/images/ch5/deployment-strategy-blue-green.drawio delete mode 100644 docs/images/ch5/deployment-strategy-blue-green.png delete mode 100644 docs/images/ch5/deployment-strategy-canary.drawio delete mode 100644 docs/images/ch5/deployment-strategy-canary.png delete mode 100644 docs/images/ch5/deployment-strategy-downtime.drawio delete mode 100644 docs/images/ch5/deployment-strategy-downtime.png delete mode 100644 docs/images/ch5/deployment-strategy-feature-toggle.drawio delete mode 100644 docs/images/ch5/deployment-strategy-feature-toggle.png delete mode 100644 docs/images/ch5/deployment-strategy-promotion.drawio delete mode 100644 docs/images/ch5/deployment-strategy-promotion.png delete mode 100644 docs/images/ch5/deployment-strategy-rolling-downtime.drawio delete mode 100644 docs/images/ch5/deployment-strategy-rolling-with-replacement.drawio delete mode 100644 docs/images/ch5/deployment-strategy-rolling-with-replacement.png delete mode 100644 docs/images/ch5/deployment-strategy-rolling-without-replacement.drawio delete mode 100644 docs/images/ch5/deployment-strategy-rolling-without-replacement.png delete mode 100644 docs/images/ch5/gh-actions-test-failure.png delete mode 100644 docs/images/ch5/gh-actions-tests-pass.png delete mode 100644 docs/images/ch5/gh-deployment-pipeline-apply-output.png delete mode 100644 docs/images/ch5/gh-deployment-pipeline-plan-output.png delete mode 100644 docs/images/ch5/gh-deployment-pipeline-running.png delete mode 100644 docs/images/ch5/github-pr-tofu-tests.png delete mode 100644 docs/images/ch5/iss.png delete mode 100644 docs/images/ch5/late-integration.drawio delete mode 100644 docs/images/ch5/late-integration.png delete mode 100644 docs/images/ch5/oidc-github-diagram.drawio delete mode 100644 docs/images/ch5/oidc-github-diagram.png delete mode 100644 docs/images/ch5/pull-request-tests.png delete mode 100644 docs/index.html diff --git a/docs/02.html b/docs/02.html deleted file mode 100644 index e9c78ca..0000000 --- a/docs/02.html +++ /dev/null @@ -1,5112 +0,0 @@ - - - - - - - - - - - - - - -Part 1. An Introduction to DevOps and Software Delivery - - - - - - - - - - - - - -
-
- -
- -
-
- -

Part 1. An Introduction to DevOps and Software Delivery

- -
- -
- -

In the introduction to the blog post series, you heard about how DevOps consists of dozens of different - -concepts, but it almost always starts with just one question:

- -
- -
- -
- -
- -

I wrote an app. Now what?

- -
- -
- -
- -
- -

You and your team have spent months putting together an app. You picked a programming language and a framework, you - -designed the UI, you implemented the backend, and finally, things seem to be working just the way you want. It’s time - -to expose the app to real users.

- -
- -
- -

How, exactly, do you do that?

- -
- -
- -

There are so many questions to figure out here. Should you use AWS or Azure or Google Cloud? (And what about Heroku, - -Vercel, and Netlify?) Do you need one server or multiple servers? (And what the hell is serverless?) Do you need to use - -Docker? (And what the hell is Kubernetes?) What is a VPC and why do you need one? (And what about VPN and SSH?) How do - -you get a custom domain name working? (And what’s with these scary TLS errors?) What’s the right way to set up your - -database? (And are the backups even working)? Why did that app crash? (And how the hell do you debug it)? What do all - -these errors mean? Why does nothing seem to be working? Why is this so hard???

- -
- -
- -

OK, easy now. Take a deep breath. If you’re new to software delivery—you’ve worked as app developer your whole - -career, or you’re just starting out in operations—it can be overwhelming, and you can get stuck in analysis paralysis - -right out of the gate. This blog post series is here to help. I will walk you through each of these questions—and many - -others you didn’t even think to ask—and help you figure out the answers, step-by-step.

- -
- -
- -

The first part of the blog post is a short primer on DevOps. Don’t worry, this isn’t another - -high-level document about culture and values: that stuff matters, but you’ve probably ready it a million times on - -Wikipedia already. Instead, what you’ll find here are the startling real-world numbers on why DevOps matters and a - -step-by-step walkthrough of the concrete architectures and software delivery processes used in modern DevOps, and how - -they evolve through the various stages of a company.

- -
- -
- -

The second part of the blog post will have you diving into these architectures and processes, starting - -with the very first step: deploying an app. There are quite a few different options for deploying apps, so this - -post will walk you through the most common ones. Along the way, you’ll work through examples - -where you deploy the same app multiple different ways: on your own computer, on fly.io (a popular Platform as a - -Service provider), and on AWS (a popular Infrastructure as a Service provider). This will allow you to see how the - -different options compare across a variety of dimensions (e.g., ease-of-use, security, control, debugging, etc.), so - -that you can pick the right tool for your use cases.

- -
- -
- -

Let’s get started!

- -
- -
- -

A Primer on DevOps

- -
- -

The vast majority of developers have never had the opportunity to see what world-class software delivery looks like - -first hand. If you’re one of them, you’ll be astonished by the gap between companies with world-class software delivery - -processes and everyone else. It’s not a 1.1x or 1.5x improvement: it’s 10x or 100x—or more.

- -
- -
- -

Table 2 shows the four key DevOps Research and - -Assessment (DORA) metrics, which are a quick way to assess the performance of a software development team, and the - -difference between elite performers and low performers at these metrics, based on data from the - -2023 State of DevOps Report:

- -
- - - - - -- -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 2. Comparing performance on DORA metrics for elite vs low performers based on the 2023 State of DevOps Report
MetricDescriptionElite vs low performers[1]

Deployment frequency

How often you deploy to production

~10-200x more often

Lead time

How long it takes a change to go from committed to deployed

~10-200x faster

Change failure rate

How often deployments cause failures that need immediate remediation

~13x lower

Recovery time

How long it takes to recover from a failed deployment

~700-4000x faster

- -
- -

These are staggering differences. To put that into perspective, we’re talking the difference between:

- -
- -
- -
    - -
  • - -

    Deploying once per month vs many times per day.

    - -
  • - -
  • - -

    Deployment processes that take 36 hours vs 5 minutes.

    - -
  • - -
  • - -

    Two out of three deployments causing problems vs one out of twenty.

    - -
  • - -
  • - -

    Outages that last 24 hours vs 2 minutes.

    - -
  • - -
- -
- -
- -

It’s almost a meme that developers who leave companies with world-class software delivery processes, such - -as Google, Facebook, or Amazon, complain bitterly about how much they miss the infrastructure and tooling. That’s - -because they are used to a world where:

- -
- -
- -
    - -
  • - -

    They can deploy any time they want, and it’s common to deploy thousands of times per day.

    - -
  • - -
  • - -

    Deployments can happen in minutes, and they are 100% automated.

    - -
  • - -
  • - -

    Problems can be detected in seconds, often before there is any user-visible impact.

    - -
  • - -
  • - -

    Outages can be resolved in minutes, sometimes automatically, without having to page anyone.

    - -
  • - -
- -
- -
- -

What do the equivalent numbers look like at your organization?

- -
- -
- -

If you’re not even in the ballpark, don’t fret. The first thing you need to know is that it’s possible to achieve these - -results. In fact, there are many ways to achieve these sorts of results, and each of those world-class companies does it - -a bit differently. That said, they also have a lot in common, and the DevOps movement is an attempt to capture some of - -these best practices.

- -
- -
- -

Where DevOps Came From

- -
- -

In the not-so-distant past, if you wanted to build a software company, you also needed to manage a lot of hardware. You - -would set up cabinets and racks, load them up with servers, hook up wiring, install cooling, build redundant power - -systems, and so on. It made sense to have one team, typically called Developers (“Devs”), dedicated to writing the - -software, and a separate team, typically called Operations (“Ops”), dedicated to managing this hardware.

- -
- -
- -

The typical Dev team would build an application and "toss it over the wall" to the Ops team. It was then up to Ops to - -figure out the rest of software delivery: that is, to figure out how to deploy, run, and maintain that application. - -Most of this was done manually. In part, that was unavoidable, because much of the work had to do with physically - -hooking up hardware (e.g., racking servers, hooking up network cables). But even the work Ops did in software, such as - -installing the application and its dependencies, was often done by manually executing commands on a server.

- -
- -
- -

This works well for a while, but as the company grows, you eventually run into problems: releases are manual, slow, and - -error-prone; this leads to frequent outages and downtime; the Ops team, tired from their pagers going off at 3 a.m. - -after every release, reduce the release cadence even further; but now each release is even bigger, and that only leads - -to more problems; teams begin blaming one another; silos form; the company grinds to a halt.

- -
- -
- -

Nowadays, a profound shift is taking place. Instead of managing their own datacenters, many companies are moving to - -the cloud, taking advantage of services such as Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform - -(GCP). Instead of investing heavily in hardware, many Ops teams are spending all their time working on software, using - -tools such as OpenTofu, Ansible, Docker, and Kubernetes. Instead of racking servers and plugging in network - -cables, many sysadmins are writing code.

- -
- -
- -

As a result, both Dev and Ops teams spend most of their time working on software, and the distinction between the two - -teams is blurring. It might still make sense to have a separate Dev team responsible for the application code and an Ops - -team responsible for the operational code, but it’s clear that Dev and Ops need to work more closely together. This is - -where the DevOps movement comes from.

- -
- -
- -

DevOps isn’t the name of a team or a job title or a particular technology (though you’ll see it used for all three). - -Instead, it’s a set of processes, ideas, and techniques. Everyone has a slightly different definition of DevOps, but - -for this blog post series, I’m going to define DevOps as a methodology with the following goal:

- -
- -
- -
- -
- -

The goal of DevOps is to make software delivery vastly more efficient.

- -
- -
- -
- -
- -

The move to the cloud and the DevOps mindset represent a profound shift across all aspects of software delivery, as - -shown in Table 3:

- -
- - - - - -- -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 3. The shift in mindset with the cloud and DevOps
BeforeAfter

Teams

Devs write code, "toss it over the wall" to Ops

Devs & Ops work together on cross-functional teams

Servers

Dedicated physical servers

Elastic virtual servers

Connectivity

Static IPs

Dynamic IPs, service discovery

Security

Physical, strong perimeter, high trust interior

Virtual, end-to-end, zero trust

Infrastructure provisioning

Manual

Infrastructure as Code (IaC) tools

Server configuration

Manual

Configuration management tools

Testing

Manual

Automated testing

Deployments

Manual

Automated

Change process

Change request tickets

Self-service

Deployment cadence

Weeks or months

Many times per day

Change cadence

Weeks or months

Minutes

- -
- -

You heard in the Preface how LinkedIn’s DevOps transformation saved the company, but they are not the only ones. - -Nordstrom found that after applying DevOps practices to its organization, it was able to increase the number of - -features it delivered per month by 100%, reduce defects by 50%, reduce lead times (the time from coming up with an - -idea to running code in production) by 60%, and reduce the number of production incidents by 60% to 90%. After HP’s - -LaserJet Firmware division began using DevOps practices, the amount of time its developers spent on developing new - -features went from 5% to 40%, and overall development costs were reduced by 40%. Etsy used DevOps practices to go from - -stressful, infrequent deployments that caused numerous outages to deploying 25 to 50 times per day, with far fewer - -outages.[2]

- -
- -
- -

So how does DevOps produce these sorts of results? As mentioned in the Preface, DevOps isn’t any one thing, but - -rather, it consists of dozens of different tools and techniques, all of which have to be adapted to your company’s - -particular needs. So if you want to understand DevOps at a high level, you need to understand how the architecture and - -processes evolve at a typical company.

- -
- -
- -
- -

The Evolution of DevOps

- -
- -

While writing my first book, Hello, Startup, I interviewed early employees from some - -of the most successful companies of the last 20 years, including Google, Facebook, LinkedIn, Twitter, GitHub, Stripe, - -Instagram, Pinterest, and many others. One thing that struck me is that the architecture and software delivery - -processes at just about every software company evolve along very similar lines. There are of course individual - -differences here and there, but there are far more similarities than differences, and the broad shape of the evolution - -tends to repeat again and again.

- -
- -
- -

In this section, I’m going to share this evolutionary process. I’ve broken it down into three high-level stages, each - -of which consists of three steps. This is, of course, a vast simplification: in reality, this is more of a continuum - -than discrete steps, and the steps don’t always happen in the exact order listed here. Nevertheless, I hope this is - -a helpful mental model of how DevOps typically evolves within a company.

- -
- -
- - - - - - - - - - - -
- -
Note
- -
- -
Lossy compression
- -
- -

Think of these stages as a compressed guide to the typical way architecture and software delivery processes evolve in a - -company, but be aware that, in the effort to compress this information, some of the variation inevitably gets lost.

- -
- -
- -
- -
- -

If you’re new to DevOps and software delivery, you may be unfamiliar with some of the terms used here. Don’t panic. The - -idea here is to start with a top-down overview—a bit like a high level map—to help you understand what the various - -ingredients are and how they fit together. As you go through this blog post series, you’ll zoom in on each of these - -ingredients, study it in detail, and get to try most of them out with real examples. You can then zoom back out and - -revisit this high-level map at any time to see the big picture, and get your bearings again.

- -
- -
- -

Let’s get started with stage 1.

- -
- -
- -

Stage 1

- -
- -

As shown Figure 1, stage 1 is where most software projects start, including new startups, new - -initiatives at existing companies, and most side projects:

- -
- -
- -
- -Step 1 - -
- -
Figure 1. Step 1
- -
- -
- -
- -
Single server
- -
- -

Everything runs on a single server (you’ll see an example of this later in this blog post).

- -
- -
ClickOps
- -
- -

You manage all of your infrastructure and deployments manually.

- -
- -
- -
- -
- -

As traffic grows, you move on to step 2, shown in Figure 2:

- -
- -
- -
- -Step 2 - -
- -
Figure 2. Step 2
- -
- -
- -
- -
Standalone database
- -
- -

As your database increasingly becomes the bottleneck, you break it out onto a separate server - -(Part 9).

- -
- -
Version control
- -
- -

As your team grows, you use a version control system to collaborate on your code and track all changes - -(Part 4).

- -
- -
Continuous integration
- -
- -

To reduce bugs and outages, you set up automated tests (Part 4) and - -continuous integration (Part 5).

- -
- -
- -
- -
- -

As traffic continues to grow, you move on to step 3, shown in Figure 3:

- -
- -
- -
- -Step 3 - -
- -
Figure 3. Step 3
- -
- -
- -
- -
Multiple servers
- -
- -

As traffic increases further, a single server is no longer enough, so you run your app across multiple servers - -(Part 3).

- -
- -
Load balancing
- -
- -

You distribute traffic across the servers using a load balancer (Part 3).

- -
- -
Networking
- -
- -

To protect your servers, you put them into private networks (Part 7).

- -
- -
Data management
- -
- -

You set up scheduled backups and schema migrations for your data stores (Part 9).

- -
- -
Monitoring
- -
- -

To get better visibility into your systems, you set up basic monitoring (Part 10).

- -
- -
- -
- -
- -

Most software projects never need to make it past stage 1. If you’re one of them, don’t fret: this is actually a good - -thing. Stage 1 is simple. It’s fast to learn and easy to set up. It’s fun to work with. If you’re forced into the - -subsequent stages, it’s because you’re facing new problems that require more complex architectures and processes to - -solve, and this additional complexity has a considerable cost. If you aren’t facing those problems, then you can, and - -should, avoid that cost.

- -
- -
- -

That said, if your company or user base keeps growing, you may have to move on to stage 2.

- -
- -
- -
- -

Stage 2

- -
- -

The second stage of evolution typically applies to larger, more established companies and software that has larger user - -bases and more complexities. It starts with step 4, shown in Figure 4:

- -
- -
- -
- -Step 4 - -
- -
Figure 4. Step 4
- -
- -
- -
- -
Caching for data stores
- -
- -

Your database continues to be a bottleneck, so you add read replicas and caches (Part 9).

- -
- -
Caching for static content
- -
- -

As traffic continues to grow, you add content distribution network (CDN) to cache content that doesn’t change often - -(Part 7).

- -
- -
- -
- -
- -

At this point, your team size is often the real problem, so you have to move onto step 5, shown in - -Figure 5:

- -
- -
- -
- -Step 5 - -
- -
Figure 5. Step 5
- -
- -
- -
- -
Multiple environments
- -
- -

To help teams do better testing, you set up multiple environments (e.g., dev, stage, prod), each of which has a - -full copy of your infrastructure (Part 6).

- -
- -
Continuous delivery
- -
- -

To make deployments faster and more reliable, you set up continuous delivery (Part 5).

- -
- -
Authentication and secrets
- -
- -

To keep all the new environments secure, you lock down authentication, authorization, and secrets management - -(Part 8).

- -
- -
- -
- -
- -

As your teams keep growing, to be able to keep moving quickly, you will need to update your architecture and processes - -to step 6, as shown in Figure 6:

- -
- -
- -
- -Step 6 - -
- -
Figure 6. Step 6
- -
- -
- -
- -
Microservices
- -
- -

To allow teams to work more independently, you break up your monolith into multiple microservices, usually each - -with its own data stores and caches (Part 6).

- -
- -
Infrastructure as code
- -
- -

It’s hard to maintain so many environments manually, so you start to manage your infrastructure as code

- -
- -
- -
- -
- -

Stage 2 represents a significant step up in terms of complexity: your architecture has more moving parts, your - -processes are more complicated, and you most likely need a dedicated infrastructure team to manage all of this. For a - -small percentage of companies, even this isn’t enough, and you are forced to move on to stage 3.

- -
- -
- -
- -

Stage 3

- -
- -

The third stage of evolution only applies to large enterprises with massive user bases. It starts with step 7, shown - -in Figure 7:

- -
- -
- -
- -Step 7 - -
- -
Figure 7. Step 7
- -
- -
- -
- -
Observability
- -
- -

To get even more visibility into your systems, you set up tracing and observability tools (Part 10).

- -
- -
Service discovery
- -
- -

As the number of microservices increases, you set up a service discovery system to help them dynamically and - -automatically communicate with each other (Part 7).

- -
- -
Hardening
- -
- -

To meet various compliance standards (e.g., NIST, CIS, PCI), you work on server and network hardening - -(Part 7, Part 8).

- -
- -
Microservice mesh
- -
- -

To help manage a large number of microservices, you start using service mesh tools, which give you a unified - -solution for the items above (observability, service, discovery, hardening), as well as load balancing, traffic - -control, and error handling (Part 7).

- -
- -
- -
- -
- -

Large companies produce a lot of data, and the need to analyze and leverage this data leads to step 8, shown in - -Figure 8:

- -
- -
- -
- -Step 8 - -
- -
Figure 8. Step 8
- -
- -
- -
- -
Analytics tools
- -
- -

To be able to process and analyze your company’s data, you set up data warehouses, data lakes, machine learning - -platforms, etc. (Part 9).

- -
- -
Event bus
- -
- -

With even more microservice communication and more data to move around, you set up an event bus and move to an - -event-driven architecture (Part 9).

- -
- -
Feature toggles
- -
- -

To make deployments even faster and more reliable, you set up advanced employment strategies such feature toggles and - -canary deployments (Part 5).

- -
- -
- -
- -
- -

Finally, as your user base and employee base keeps growing, you move on to step 9, shown in Figure 9:

- -
- -
- -
- -Step 9 - -
- -
Figure 9. Step 9
- -
- -
- -
- -
Multiple data centers
- -
- -

To handle a global user base, you set up multiple data centers around the world (Part 6).

- -
- -
Multiple accounts
- -
- -

To handle a larger employee base, you isolate different teams and products in separate accounts - -(Part 6).

- -
- -
Advanced networking
- -
- -

You set up advanced networking to connect all your data centers and accounts together (Part 7).

- -
- -
Internal developer platform
- -
- -

To help boost developer productivity, while ensuring all the new accounts are secure, you set up an internal developer - -platform, account baselines, and an account factory (Part 6).

- -
- -
- -
- -
- -

The companies in stage 3 face the toughest problems and have to deal with the most complexity: global deployments, - -thousands of developers, millions of customers. Even the architecture you see in stage 3 is still a simplification - -compared to what the top 0.1% of companies face, but if that’s where you’re at, you’ll need more than this introductory - -blog post series!

- -
- -
- -

So now that you’ve seen the three stages, let’s talk about how to adopt these DevOps practices.

- -
- -
- -
- -
- -

Adopting DevOps Practices

- -
- -

As you read through the three stages, the idea is to match your company to one of the stages, and to pursue the - -architecture and processes in that stage. What you don’t want to do is to immediately jump to the end, and use the - -architecture and processes of the largest and most elite companies. Let’s be honest here: your company isn’t Google - -(unless it is, in which case, congrats, you are an exceptionally rare outlier); you don’t have the same scale, you - -don’t have the same problems to solve, and therefore, the same solutions won’t be a good fit. In fact, adopting, the - -solutions for a different stage of company may be actively harmful. Every time I see a 3-person startup running an - -architecture with 12 microservices, a service mesh, and an event bus, I just shake my head: you’re paying a massive - -cost to solve problems you don’t have.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #1
- -
- -

Adopt the architecture and software delivery processes that are appropriate for your stage of company.

- -
- -
- -
- -
- -

Even if you are a massive company, you still shouldn’t try to adopt every DevOps practice all at once. - -One of the most important lessons I’ve learned in my career is that most large software projects fail. Whereas roughly - -3 out of 4 small IT projects (less than $1 million) are completed successfully, only 1 out of 10 large - -projects (greater than $10 million) are completed on time and on budget, and more than one-third of large projects are - -never completed at all.[3]

- -
- -
- -

This is why I get worried when I see the CEO or CTO of a large company give marching orders that everything - -must be migrated to the cloud, the old datacenters must be shut down, and that everyone will "do DevOps" (whatever that - -means), all within six months. I’m not exaggerating when I say that I’ve seen this pattern several dozen times, and - -without exception, every single one of these initiatives has failed. Inevitably, two to three years later, every one - -of these companies is still working on the migration, the old datacenter is still running, and no one can tell whether - -they are really doing DevOps or not.

- -
- -
- -

If you want to successfully adopt DevOps, or if you want to succeed at any other type of migration project, the only - -sane way to do it is incrementally. The key to incrementalism is not just splitting up the work into a series of small - -steps but splitting up the work in such a way that every step brings its own value—even if the later steps never - -happen.

- -
- -
- -

To understand why this is so important, consider the opposite, false incrementalism.[4] - -Suppose that you do a huge migration project, broken up into the following steps:

- -
- -
- -
    - -
  1. - -

    Redesign the user interface.

    - -
  2. - -
  3. - -

    Rewrite the backend.

    - -
  4. - -
  5. - -

    Migrate the data.

    - -
  6. - -
- -
- -
- -

You complete the first step, but you can’t launch it, because it relies on the new backend in the second step. So, - -next, you rewrite the backend, but you can’t launch that either, until you migrate the data in the third step. It’s - -only when you complete all three steps that you get any value from this work. This is false incrementalism: you’ve - -split the work into smaller steps, but you only get value when all the steps are completed, which is a huge risk. - -Why? Because conditions change all the time, and there’s always a chance the project gets paused or cancelled or - -modified part way through, before you’ve completed all the steps, and if that happens, you get the worst possible - -outcome: you’ve had to invest a bunch of time and money, but you will get nothing in return.

- -
- -
- -

What you want instead is for each part of the project to deliver some value so that even if the entire project doesn’t - -finish, no matter what step you got to, it was still worth doing. The best way to accomplish this is - -to focus on solving one, small, concrete problem at a time. For example, instead of trying to do a "big bang" - -migration to the cloud, try to identify one, small, specific app or team that is struggling, and work to migrate just - -them. Or instead of trying to do a "big bang" move to "DevOps," try to identify a single, small, concrete - -problem (e.g., outages during deployment) and put in place a solution for that specific problem (e.g., automate the - -deployment steps).

- -
- -
- -

If you can get a quick win by fixing one real, concrete problem right away, and making one team successful, you’ll - -begin to build momentum. This will allow you to go for another quick win, and another one after that. And if you can - -keep repeating this process—delivering value early and often—you’ll be far more likely to succeed at the larger - -migration effort. But even if the larger migration doesn’t work out, at least one team is more successful now and one - -deployment process works better, so it’s still worth the investment.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #2
- -
- -

Adopt DevOps incrementally, as a series of small steps, where each step is valuable by itself.

- -
- -
- -
- -
- -

Now that you have a basic background on DevOps, and you’ve seen how DevOps evolves, let’s head back to the very - -first step, and learn how to deploy a single app.

- -
- -
- -
- -
- -

An Introduction to Deploying Apps

- -
- -

As you saw in the previous section, the first step is to run your app on a single server. How do you run - -an app? What’s a server? What type of server should you use? These are the questions we’ll address in this section.

- -
- -
- -

The first place you should be able to deploy your app is locally, on your own computer. This is typically how you’d - -build the app in the first place, writing and running your code locally until you have something working.

- -
- -
- -

How you run an app locally depends on the technology. Throughout this blog post series, you’re going to be using a - -simple Node.js sample app, as described in the next section.

- -
- -
- -

Example: Run the Sample App Locally

- -
- - - - - - - - - - - -
- -
Note
- -
- -
Example Code
- -
- -

As a reminder, you can find all the code examples in the blog post series’s sample - -code repo in GitHub.

- -
- -
- -
- -
- -

Create a new folder on your computer, perhaps called something like fundamentals-of-devops, which you can use to store - -code for various examples you’ll be running throughout the blog post series. You can run the following commands in a - -terminal to create the folder and go into it:

- -
- -
- -
- -
$ mkdir fundamentals-of-devops
-
-$ cd fundamentals-of-devops
- -
- -
- -
- -

In that folder, create a new subfolder for the part 1 examples, and a subfolder within that for the sample - -app:

- -
- -
- -
- -
$ mkdir -p ch1/sample-app
-
-$ cd ch1/sample-app
- -
- -
- -
- -

The sample app you’ll be using is a minimal "Hello, World" Node.js app, written in JavaScript. You don’t - -need to understand much JavaScript to make sense of the app. In fact, one of the nice things about getting started with - -Node.js is that all the code for a simple web app fits in a single file that’s ~10 lines long. Within the - -sample-app folder, create a file called app.js, as shown in Example 1:

- -
- -
- -
Example 1. A Node.js "Hello, World" sample app (ch1/sample-app/app.js)
- -
- -
- -
- -
const http = require('http');
-
-
-
-const server = http.createServer((req, res) => {
-
-  res.writeHead(200, { 'Content-Type': 'text/plain' });
-
-  res.end('Hello, World!\n'); // (1)
-
-});
-
-
-
-const port = 8080; // (2)
-
-server.listen(port,() => {
-
-  console.log(`Listening on port ${port}`);
-
-});
- -
- -
- -
- -
- -
- -

This is a "Hello, World" app that does the following:

- -
- -
- -
    - -
  1. - -

    Respond to all requests with a 200 status code and the text "Hello, World!"

    - -
  2. - -
  3. - -

    Listen on port 8080 for requests.

    - -
  4. - -
- -
- -
- -

To run it locally, you must first install Node.js. Once that’s done, you can start - -the app with node app.js:

- -
- -
- -
- -
$ node app.js
-
-Listening on port 8080
- -
- -
- -
- -

You can then open http://localhost:8080 in your browser, and you should see:

- -
- -
- -
- -
Hello, World!
- -
- -
- -
- -

Congrats, you’re running the app locally!

- -
- -
- -

That’s a great start, but if you want to expose your app to users, you’ll need to run it on a server, as discussed in - -the next section.

- -
- -
- -
- -

Deploying an App on a Server

- -
- -

By default, when you run an app on your computer, it is only available on localhost. This is a hostname that is - -configured on every computer to point back to the loopback network interface,[5] which means it bypasses any real network interface. In other words, when you’re running an app on - -your computer locally, it typically can only be accessed from your own computer, and not from the outside world. This - -is by design, and for the most part, a good thing, as the way you run apps on a personal computer for development and - -testing is not the way you should run them when you want to expose them to outsiders.[6]

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #3
- -
- -

You should never expose apps running on a personal computer to the outside world.

- -
- -
- -
- -
- -

Instead, if you’re going to expose your app to the outside world, you should run it on a server. A server is a - -computer specifically designed for running apps and exposing those apps to the outside world. There are many - -differences between a server and a personal computer, including the following:

- -
- -
- -
- -
Security
- -
- -

When you run your app on a server, you typically use a stripped down operating system (OS) that has nothing else - -installed on it that is not absolutely necessary for running the app. You also use a variety of server hardening - -techniques to protect that server, including OS permissions, firewalls, intrusion prevention tools, - -file integrity monitoring, sandboxing tools, and so on. On the other hand, your personal computer is likely not nearly - -as hardened, has all sorts of other apps installed (the more apps that you run, the more likely it is that one of - -them has a vulnerability somewhere that an attacker could exploit if you expose your computer on the public Internet), - -and also may have your personal data on it (e.g., documents, photos, videos, passwords) which you really - -wouldn’t want to leak to the world.

- -
- -
Availability
- -
- -

You may shut off your personal computer at any time, or the battery might die, or the power might go out. Most - -servers are designed to be on all the time, in data centers with redundant power. Moreover, production apps are - -typically deployed across multiple servers, and sometimes across multiple data centers, in case one of them goes down.

- -
- -
Performance
- -
- -

If you’re using your personal computer for personal tasks (e.g., writing code, browsing the Internet, playing games), - -that will take away system resources (CPU, memory, bandwidth, etc.) from your app, possibly causing performance - -issues for your users. Servers are typically dedicated solely to running the app installed on them.

- -
- -
Collaboration
- -
- -

Most apps that you build are worked on by a team of developers and not just one person. Those other developers will - -want access to that app, either to update it or to debug an issue, but they typically don’t have any way to access - -your personal computer—and nor should they. On the other hand, servers are usually configured in such a way that your - -entire team has a way to push updates to them, connect to the server to debug issues, and so on.

- -
- -
- -
- -
- -

Despite all the drawbacks of running apps on personal computers, it’s astonishing just how many businesses have - -critical apps running on single computer sitting under someone’s desk. This typically happens for one of three reasons:

- -
- -
- -
    - -
  1. - -

    Your company is resource constrained (e.g., a tiny startup), and you can’t afford to buy proper servers.

    - -
  2. - -
  3. - -

    The person running the app doesn’t know any better.

    - -
  4. - -
  5. - -

    The company’s software delivery process is so slow and cumbersome that the only way to get something running quickly - -is to sneak it onto an office computer.

    - -
  6. - -
- -
- -
- -

As you’ll see later in this blog post, these days, there are far better options for dealing with reason - -(1). And hopefully, after reading this blog post series, reasons (2) and (3) will no longer apply, as you now know - -better, and will learn how to create a software delivery process that allows your team to quickly & easily run their - -apps the right way: on a server.

- -
- -
- -

Broadly speaking, there are two ways to get access to servers:

- -
- -
- -
    - -
  • - -

    You can buy and set up your own servers ("on prem").

    - -
  • - -
  • - -

    You rent servers from others ("the cloud").

    - -
  • - -
- -
- -
- -

We’ll discuss each of these in the next section.

- -
- -
- -
- -

Deploying On Prem Versus in the Cloud

- -
- -

The traditional way to run software is to buy your own servers and to set them up on-premises (on-prem for short), - -in a physical location you own. When you are just starting out, the location could be as simple as a closet in your - -office with a handful of servers crammed into it—barely one step up from using a personal computer. But as a company’s - -user base grows, so do the computing demands, and you eventually have to move to a dedicated data center, with all - -the requisite equipment (e.g., cabinets, racks, servers, hard drives, wiring, cooling, power, and so on) and staff - -(e.g., data center technicians, electricians, engineers, network administrators, security guards, and so on). So for - -decades, if you wanted to build a software company, you also had to invest quite a bit into hardware.

- -
- -
- -

This all started to change in the early 2000s. At that time, Amazon was already a huge web retailer, and like all other - -software companies, they had built massive data centers to run their products. The company was growing quickly, but - -despite hiring many new software engineers, they found they weren’t building their software any faster. When they dug - -into the problem, they found a common complaint: for each new project, every team in Amazon was spending a huge amount - -of time not writing the software, but building out hardware (e.g., servers, databases, etc.) to run that software. The - -types of hardware the teams needed were often similar, so all these teams were spinning their wheels on the same type of - -"undifferentiated heavy lifting."

- -
- -
- -

To solve this problem, Amazon started to build an internal platform that could abstract away and automate a lot of this - -undifferentiated heavy lifting, giving developers access to the hardware they needed through a software interface. At - -some point along the way, they realized that this platform could help not only their own internal dev teams, but dev - -teams from outside Amazon as well. The result was the launch of Amazon Web Services (AWS) in 2006, the first cloud - -computing platform (cloud for short), which allowed you to rent servers from Amazon using a software - -interface.[7]

- -
- -
- -

This is a profound shift. Instead of having to invest lots of time and money up front to set up servers yourself, in a - -few clicks, you can rent servers from the cloud. You can be up and running in seconds instead of weeks or months, at - -the cost of a few cents (or even free) instead of thousands of dollars. These days, while AWS is still the dominant - -player in cloud computing, there are dozens of other companies that offer cloud services as well, and these services - -have expanded beyond simply renting servers: you can now rent higher level services, such as databases, file - -stores, machine learning systems, natural language processing, edge computing, and more.

- -
- -
- -

So which should you use? Should you go with on-prem or make the jump to the cloud?

- -
- -
- -

When to Go with the Cloud

- -
- -

If you’re starting something new, in the majority of cases, you should go with the cloud. Here are just a few of the - -advantages:

- -
- -
- -
- -
Pay-as-you-go
- -
- -

With on-prem, you have to buy all the hardware (servers, racks, wiring, cooling, etc) up front, which can be a huge - -expense. With the cloud, you only pay for what you use, which is typically extremely cheap or even free in the early - -days (most cloud providers have free tiers or free credits when you’re starting out), when you have no users, and - -only grows if your business and usage grows too.

- -
- -
Maintenance and expertise
- -
- -

Deploying your own servers requires hiring experts in hardware, data centers, cooling, power, etc. Moreover, data - -centers need to be maintained constantly, and the hardware you buy needs to be replaced over time, either because it - -breaks or goes obsolete. The cloud gives you all this expertise and maintenance out-of-the-box, at a scale most - -individual companies can’t come close to matching.

- -
- -
Speed
- -
- -

With on-prem, every time you need new hardware, you have to find it, order it, pay for it, wait for it to ship, - -assemble it, rack it, test, it, etc. This typically takes weeks or months, and the more you need to buy, the longer - -it takes. With the cloud, virtual servers launch in seconds or minutes, whether you need to launch one or thousands.

- -
- -
Elasticity
- -
- -

With on-prem, you have to buy all the hardware up front, which means you have to plan long in advance. If you - -suddenly need an extra 5,000 CPUs, you have no easy way to scale up to meet that capacity; and if you do buy that - -hardware, but you only need those 5,000 CPUs for a short period of time, you still pay the full cost. With the - -cloud, you can scale up and down elastically, at will. If you suddenly need 5,000 CPUs, you can get that in minutes. - -And once you’re done with them, you can scale back to 0, and pay nothing more.

- -
- -
Managed services
- -
- -

With on-prem, you buy servers, and everything else is up to you. With the cloud, you not only get access to - -servers, but also dozens of other powerful managed services, such as managed databases, load balancers, file stores, - -data analytics, networking, machine learning, and much more. Building these in-house would take years and cost lots - -of money, whereas with the cloud, you get access to it with the same pay-as-you go model, often starting for free or - -extremely low cost.

- -
- -
Security
- -
- -

With on-prem, all security is up to you, and most companies don’t have the time or expertise to do it well. With the - -cloud, the cloud providers can afford to invest huge amounts of time, money, and expertise in security. AWS, for - -example, has gone through a huge range of security audits and pen testing, is compliant with a variety of compliance - -standards (PCI, HIPAA, CIS, etc.), has passed security requirements for even the most highly regulated industries - -(government, military, financial, health care), is recognized as a leader in data center physical security, and so on. - -There is a persistent rumor that on-prem is more secure than the cloud, because only you have access to it, and you - -have all the incentives to keep it secure, but in practice, unless you work at a company that’s at the scale of one - -of the major cloud providers (Amazon, Microsoft, Google), you simply won’t have the resources to secure your data - -centers the way those companies can.

- -
- -
Global reach
- -
- -

With on-prem, you have to have a team physically located at your data center to build and maintain it. And if you - -need to span the globe and have multiple data centers, then you need to build up and maintain a physical presence in - -multiple locations around the world. With the cloud, your team can be anywhere in the world (as long as you have an - -Internet connection) and get instant access to dozens of data centers around the world.

- -
- -
Scale
- -
- -

The cloud industry is massive and growing at an incredible rate. For example, as of the end of - -2023, AWS alone (not including the rest of Amazon’s businesses) is a - -$100 - -billion per year run-rate business. Yup, $100 billion per year. That’s billion with a "B." That’s not a typo. And - -they are still growing fast. The amount of money that major cloud providers can invest in their offerings utterly - -dwarfs what almost any other company could ever hope to invest into an on-prem deployment. So the cloud is not only - -already way ahead of where you could get to today with on-prem, but that lead will only widen over time.

- -
- -
- -
- -
- -

The cloud is more or less the de facto option for all new startups that launch today. The vast majority of existing - -companies are establishing a presence in the cloud as well, often preferring it for all new development.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #4
- -
- -

Using the cloud should be your default choice for most new deployments these days.

- -
- -
- -
- -
- -

So with all these advantages of using the cloud, does it ever make sense to go with on-prem?

- -
- -
- -
- -

When to Go with On-Prem

- -
- -

There are a number of cases where running servers yourself on-prem still makes sense:

- -
- -
- -
- -
You already have an on-prem presence
- -
- -

If it ain’t broke, don’t fix it. If your company has been around a while and already has its own data centers—you’ve - -already made all the up-front investments, and things are working well for you—then sticking with on-prem may make - -sense. Even if your on-prem deployment isn’t working especially well, and you can see the benefits of using the cloud - -(e.g., increased agility for your company), bear in mind that migrating from on-prem to the cloud can be hugely - -expensive and time-consuming, and those costs can outweigh any potential benefits.

- -
- -
You have load patterns that are a better fit for on-prem
- -
- -

Certain load patterns may be a better fit for on-prem than the cloud. For example, some cloud providers charge a lot - -of money for bandwidth and disk space usage, so if your apps are sending or storing huge amounts of data, you may - -find it cheaper to run servers on-prem (even when factoring in all the up-front and on-going costs). Another example - -is if your company is large enough that you can afford to buy and manage your own servers, and you have apps that - -handle a lot of traffic, but that traffic is fairly steady and predictable. In that case, you aren’t benefiting as - -much from the elasticity of the cloud, and may find it cheaper to run things on prem.[8] One final example is if you need access to very specific hardware (e.g., - -certain types of CPUs, GPUs, or hard-drives), you can’t always get that in the cloud, and may have to buy it yourself. - -But a word of warning: it’s easy to get the cost comparison wrong. You have to factor in not only what you pay - -for servers, bandwidth, and disk space, but also costs such as power, cooling, redundancy, data center employees, - -the need to replace your own hardware over time, and so on.

- -
- -
Compliance
- -
- -

Certain types of compliance standards, regulations, laws, auditors, and even customers, have not yet adapted to the - -world of the cloud yet, so depending on the industry you’re in, and the types of products you’re building, you may - -find that on-prem is a better fit.

- -
- -
- -
- -
- -

It’s worth mentioning that it doesn’t have to be cloud vs on-prem; it can also be cloud and on-prem, as discussed - -next.

- -
- -
- -
- -

When to Go with Hybrid

- -
- -

A hybrid deployment is when you use a mixture of cloud and on-prem. The most common use cases for this are:

- -
- -
- -
- -
Partial cloud migration
- -
- -

Many companies that have on-prem deployments are adopting the cloud, but not always 100%. They might migrate some of - -their apps to the cloud, and develop most new apps in the cloud, but they keep some apps on-prem, either temporarily - -(as the migration happens, which can take years) or permanently (some apps are not worth the cost to migrate).

- -
- -
Right tool for the job
- -
- -

The cloud can be a better fit for certain types of software than others. For example, if you have an app with - -traffic patterns that can spike wildly up and down (e.g., an ecommerce app with spikes on certain holidays), you - -might choose to run that app in the cloud to take advantage of the cloud’s elasticity; and if you have another app - -with steady traffic patterns that uses lots of disk space and bandwidth, you may choose to run that app on-prem to - -save on costs. In short, pick the right tool for the job!

- -
- -
- -
- -
- -

My goal with this blog post series is to allow as many readers as possible to try out the examples, and to do so as - -quickly and cheaply as possible, so the cloud—especially cloud services with free tiers—is the right tool for this job. - -So while most of the underlying concepts will apply to both on-prem and the cloud, most of the examples in this - -series will use the cloud.

- -
- -
- -

Broadly speaking, there are two types of cloud computing offerings:

- -
- -
- -
    - -
  • - -

    Platform as a Service (PaaS)

    - -
  • - -
  • - -

    Infrastructure as a Service (IaaS)

    - -
  • - -
- -
- -
- -

We’ll discuss each of these in the next section.

- -
- -
- -
- -
- -

Deploying An App Using PaaS

- -
- -

One of the first cloud computing offerings from AWS was Elastic Compute Cloud (EC2), which came out in 2006, and - -allowed you to rent servers from AWS. This was the first Infrastructure as a Service (IaaS) offering, which gives you - -access directly to computing resources, such as servers. This dramatically reduced the time it took to do the hardware - -aspects of operations (e.g., buying and racking servers), but it didn’t help as much with the software aspects of - -operations, such as installing the app and its dependencies, setting up databases, configuring networking, and so on.

- -
- -
- -

About a year later, in 2007, a company called Heroku came out with one of the first Platform as a Service (PaaS) - -offerings.[9] The - -key difference with PaaS is that the focus is on higher level primitives: not just the underlying infrastructure (i.e., - -servers), but also application packaging, deployment pipelines, database management, and so on.

- -
- -
- -

The difference between IaaS and PaaS isn’t so black and white; it’s really more of a continuum. Some PaaS offerings are - -higher level than Heroku; some are lower level; many IaaS providers have PaaS offerings too (e.g., AWS offers Elastic - -Beanstalk, GCP offers App Engine); and so on. The difference really comes down to this: PaaS gives you a full, - -opinionated software delivery process; IaaS gives you low-level primitives to create your own software delivery - -process.

- -
- -
- -

The best way to get a feel for the difference is to try it out. You’ll try out a PaaS in this section and an IaaS - -in the next section.

- -
- -
- -

There are many PaaS offerings out there, including Heroku, Fly.io, - -Vercel, Firebase, Render, - -Railway, Platform.sh, and Netlify. For the - -examples in this blog post series, I wanted a PaaS that met the following requirements:

- -
- -
- -
    - -
  • - -

    There is a free tier or free credits so that readers can try it out at no cost.

    - -
  • - -
  • - -

    You can deploy application code, without having to set up a build system, framework, Docker image, etc. - -(these are topics you’ll learn about later in the series).

    - -
  • - -
  • - -

    You can deploy directly from a folder, without having to mess with version control (also a topic you’ll see later in - -the series).

    - -
  • - -
- -
- -
- -

Fly.io is the best fit for these criteria: it offers - -free usage allowances on all their plans, and new - -customers get $5 in free credits to cover any - -initial usage costs beyond the free allowances, so running the examples in this blog post series shouldn’t cost you - -anything; they support Buildpacks for automatically packaging code for deployment (no need to - -worry about how this works now, we’ll come back to packaging in Part 2); and they provide - -a command-line tool called flyctl that lets you deploy code straight from your computer.

- -
- -
- -

Example: deploying an app using Fly.io

- -
- -

Here’s what you need to do to use Fly.io to deploy the sample app:

- -
- -
- -

Step 1: Install flyctl. This will give you the fly - -CLI tool, which you can use to manage and deploy your apps.

- -
- -
- -

Step 2: Sign up for a Fly.io account. Run the fly auth command:

- -
- -
- -
- -
$ fly auth signup
- -
- -
- -
- -

This will pop open your web browser to a sign-up form. Note that you will need to enter a credit card, but as mentioned - -before, the examples in this blog post series shouldn’t cost you anything.

- -
- -
- -

If you already have a Fly.io account, login by running:

- -
- -
- -
- -
$ fly auth login
- -
- -
- -
- -

Step 3: Configure the build. Create a file called fly.toml in the same sample-app folder as your - -app.js file with the contents shown in Example 2:

- -
- -
- -
Example 2. Fly.io config file (ch1/sample-app/fly.toml)
- -
- -
- -
- -
[build]
-
-  builder = "paketobuildpacks/builder:base" # (1)
-
-  buildpacks = ["gcr.io/paketo-buildpacks/nodejs"] # (2)
-
-
-
-[http_service]
-
-  internal_port = 8080 # (3)
-
-  force_https = true
-
-  auto_stop_machines = true
-
-  auto_start_machines = true
-
-  min_machines_running = 0
- -
- -
- -
- -
- -
- -

Normally, with real-world applications, you wouldn’t need this config file, as Fly.io can recognize many popular app - -frameworks automatically, but to keep this first blog post as simple as possible, I’ve intentionally - -omitted a lot of code from the sample app that you’d have in a real app, so you need to help Fly.io with a few hints:

- -
- -
- -
    - -
  1. - -

    Use Buildpacks to package the app.

    - -
  2. - -
  3. - -

    Use the Node.js Buildpack specifically.

    - -
  4. - -
  5. - -

    Send requests to the app on port 8080.

    - -
  6. - -
- -
- -
- -

Step 4: Launch the app. Run fly launch:

- -
- -
- -
- -
$ fly launch --generate-name --copy-config --yes
- -
- -
- -
- -

This will kick off a process that builds and deploys your app. It should take about five minutes the very first time. - -When it’s done, you should see log output that contains the URL for your deployed app:

- -
- -
- -
- -
Visit your newly deployed app at https://<NAME>.fly.dev/
- -
- -
- -
- -

Where <NAME> is a randomly generated name for your app deployment. Open that URL up in your web browser, and you - -should see:

- -
- -
- -
- -
Hello, World!
- -
- -
- -
- -

And there you go! In handful of commands, you now have your app running on a server.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for what you get out-of-the-box with a PaaS such as - -Fly.io:

- -
- -
- -
    - -
  • - -

    fly status: See the status of your app.

    - -
  • - -
  • - -

    fly logs: See the logs for your app. You can also try https://fly-metrics.net/ to see metrics.

    - -
  • - -
  • - -

    fly scale: Scale the number of servers up and down.

    - -
  • - -
  • - -

    fly deploy: Deploy a new version of your app. For example, make a small change to app.js, such as responding with - -the text "Fundamentals of DevOps!" instead of "Hello, World!", and then run fly deploy to deploy this change. - -After a couple minutes, the deployment should be done, and if you refresh your URL (<NAME>.fly.dev) in the browser, - -you should see "Fundamentals of DevOps!"

    - -
  • - -
- -
- -
- -
- -
- -

When you’re done experimenting with Fly.io, you should undeploy your app using the following command:

- -
- -
- -
- -
$ fly apps destroy <NAME>
- -
- -
- -
- -

Where <NAME> is the auto-generated name for your app (which shows up in all the log output and the URL of your app). - -Running destroy ensures that your account doesn’t start accumulating any unwanted charges.

- -
- -
- -
- -

How PaaS stacks up

- -
- -

Using a PaaS typically means you get not just a server, but a lot of powerful functionality out-of-the-box, such as the - -following:

- -
- -
- -
- -
Multiple servers
- -
- -

Fly.io can easily scale your app across multiple servers, which can help with scalability and high availability. - -You’ll learn more about this topic in Part 3.

- -
- -
Domain names
- -
- -

Fly.io automatically creates a custom subdomain for your app (e.g., <NAME>.fly.dev); it also supports custom - -top-level domain names (e.g., your-domain.com). You’ll learn more about this topic in Part 7.

- -
- -
TLS certificates and termination
- -
- -

Note how the Fly.io URL is https, not http. This means Fly.io also takes care of TLS certificates and TLS - -termination, a topic you’ll learn more about in Part 8.

- -
- -
Monitoring
- -
- -

Fly.io automatically aggregates logs and metrics in a single place, which is helpful in troubleshooting and - -understanding the status of your app. You’ll learn more about this topic in Part 10.

- -
- -
Automated deployment
- -
- -

Fly.io can automatically roll out updates to your app with zero downtime. You’ll learn more about this topic in - -Part 5.

- -
- -
- -
- -
- -

This is the power of PaaS: in a matter of minutes, a good PaaS can take care of so many software delivery concerns for - -you. It’s like magic. And that’s the greatest strength of PaaS: it just works!

- -
- -
- -

Except when it doesn’t. When that happens, this very same magic becomes the greatest weakness of PaaS. By design, with - -a PaaS, just about everything is happening behind the scenes, so if something doesn’t work, it can be very hard to - -debug it or fix it. Moreover, to make the magic possible, most PaaS offerings have a number of limitations: e.g., - -limitations on what you can deploy, what types of apps you can run, what sort of access you can have to the underlying - -hardware, what sort of hardware is available, and so on. If the PaaS doesn’t support it—if the CLI or UI the PaaS - -provides doesn’t expose the ability to do something you need—you typically can’t do it at all.

- -
- -
- -

As a result, while many projects start on PaaS, if they grow big enough and require more control, they end up migrating - -to IaaS, which is the topic of the next section.

- -
- -
- -
- -
- -

Deploying an App Using IaaS

- -
- -

Broadly speaking, the IaaS space falls into three buckets:

- -
- -
- -
- -
Virtual private server (VPS)
- -
- -

There are a number of companies who primarily focus on giving you access to a virtual private server (VPS) for - -as cheap as possible. These companies might offer a few other features (e.g., networking, storage) as well, but - -the main reason you’d go with one of these providers is that you just want a replacement for having to rack your own - -servers, and prefer to have someone else do it for you, and give you access. Some of the big players in this space - -include Hetzner, DigitalOcean, Vultr, - -Linode (now known as Akamai Connected Cloud after the acquisition), - -BuyVM, First Root, and OneProvider

- -
- -
Content delivery networks (CDNs)
- -
- -

There are also a number of companies who primarily focus on content delivery networks (CDNs), which are servers - -that are distributed all over the world, typically for the purpose of serving and caching content (especially static - -assets, such as images, JavaScript, and CSS) close to your users (you’ll learn more about CDNs in - -Part 7). Again, these companies might offer a few other features (e.g., protection against - -attacks), but the main reason you’d go with one of these providers is that your user base is geographically - -distributed, and you need a fast and reliable way to serve them content with low latency. Some of the big players in - -this space include CloudFlare, Akamai, - -Fastly, and Imperva.

- -
- -
Cloud providers
- -
- -

There are also a small number of very large companies trying to provide all-purpose cloud solutions that offer - -everything: VPS, CDN, containers, serverless, data storage, file storage, machine learning, natural language - -processing, edge computing, and more. The big players in this space include Amazon Web - -Services (AWS), Microsoft Azure, Google Cloud Platform - -(GCP), Alibaba Cloud, IBM Cloud, and - -Oracle Cloud Infrastructure (OCI).

- -
- -
- -
- -
- -

In general, the VPS and CDN providers are specialists in their respective areas, so they will typically beat a general - -cloud provider in terms of features and pricing in those areas: for example, a VPS from Hetzner is usually much faster - -and cheaper than one from AWS. So if you only need those specific items, you’re better off going with a specialist. - -However, if you’re building the infrastructure for an entire company, especially one that is in the later stages of its - -DevOps evolution, your architecture usually needs many types of infrastructure, and the general-purpose cloud providers - -will typically be a better fit, as they can give you a one-stop-shop to meet all your needs.

- -
- -
- -

For the examples in this blog post series, I wanted an IaaS provider that met the following requirements:

- -
- -
- -
    - -
  • - -

    There is a free tier or free credits so that readers can try it out at no cost.

    - -
  • - -
  • - -

    It should be one of the more popular cloud providers, so you’re learning something you’re more likely to use at work.

    - -
  • - -
  • - -

    It should provide a wide range of cloud services that support the many DevOps and software delivery examples in the - -rest of this blog post series.

    - -
  • - -
- -
- -
- -

AWS is the best fit for these criteria: it offers - -a generous free tier, so running the examples in this blog post series shouldn’t cost you - -anything; it’s the most popular cloud provider, with a 31% - -share of the market; and it provides a huge range of reliable and scalable cloud-hosting services, including servers, - -serverless, containers, databases, machine learning, and much more.

- -
- -
- -

Example: deploying an app using AWS

- -
- -

Here’s what you need to do to use AWS to deploy the sample app:

- -
- -
- -

Step 1: Sign up for AWS. If you don’t already have an AWS account, head over to https://aws.amazon.com - -and sign up. When you first register for AWS, you initially sign in as the root user. This user account has access - -permissions to do absolutely anything in the account, so from a security perspective, it’s not a good idea to use the - -root user on a day-to-day basis. In fact, the only thing you should use the root user for is to create other user - -accounts with more-limited permissions, and then switch to one of those accounts immediately, as per the next step. - -Make sure to store the root user credentials in a secure password manager, such as 1Password (you’ll learn more about - -secrets management in Part 8).

- -
- -
- -

Step 2: Create an IAM user. To create a more-limited user account, you will need to use the Identity - -and Access Management (IAM) service. IAM is where you manage user accounts as well as the permissions for each user. - -We’ll go into more detail on this topic in Part 8, but for now, we’ll do the simplest thing - -we can to get started. To create a new IAM user, go to the IAM Console (note: - -you can use the search bar at the top of the AWS Console to find services such as IAM), click Users, and then click the - -Create User button. Enter a name for the user, and make sure "Provide user access to the AWS Management Console" is - -selected, as shown in Figure 10 (note that AWS occasionally makes changes to its web console, so what you - -see may look slightly different from the screenshots in this blog post series).

- -
- -
- -
- -Use the AWS Console to create a new IAM user. - -
- -
Figure 10. Use the AWS Console to create a new IAM user.
- -
- -
- -

Click the Next button. AWS will ask you to add permissions to the user. By default, new IAM users have no permissions - -whatsoever and cannot do anything in an AWS account. To give your IAM user the ability to do something, you need to - -associate one or more IAM Policies with that user’s account. An IAM Policy is a JSON document that defines what a - -user is or isn’t allowed to do. You can create your own IAM Policies or use some of the predefined IAM Policies built - -into your AWS account, which are known as Managed Policies.

- -
- -
- -

To run the examples in this blog post series, the easiest way to get started is to select "Attach policies directly" - -and add the AdministratorAccess Managed Policy to your IAM user (search for it, and click the checkbox next to it), - -as shown in Figure 11.[10]

- -
- -
- -
- -Adding the AdministratorAccess Managed IAM Policy to your new IAM user - -
- -
Figure 11. Add the AdministratorAccess Managed IAM Policy to your new IAM user.
- -
- -
- -

Click Next again and then the "Create user" button. AWS will show you the security credentials for that - -user, which consist of (a) a sign-in URL, (b) the user name, and (c) the console password, as shown in Figure 12. - -Save all three of these immediately in a secure password manager (e.g., 1Password), especially the console password, as - -it will never be shown again.

- -
- -
- -
- -Store your AWS credentials somewhere secure. Never share them with anyone. - -
- -
Figure 12. Store your AWS credentials somewhere secure. Never share them with anyone.
- -
- -
- -

Step 3: Login as the IAM user. Now that you’ve created an IAM user, log out of your AWS account, go to - -the sign-in URL you got in the previous step, and enter the user name and console password from that step to sign in as - -the IAM user.

- -
- -
- -

Step 4: Deploy an EC2 instance. Now you’re finally ready to deploy a server. You can do this through - -the AWS Elastic Compute Cloud (EC2) service, which lets you launch servers called EC2 instances. Head over to the - -EC2 Console and click the "Launch instance" button (as of April, 2024, it’s - -an orange button in the middle of the page). This will take you to a page where you configure your EC2 instance, as - -shown in Figure 13.

- -
- -
- -
- -Configure the name and AMI to use for your EC2 instance - -
- -
Figure 13. Configure the name and AMI to use for your EC2 instance.
- -
- -
- -

Fill in a name for the instance. Below that, you need to pick the operating system image to use (the Amazon Machine - -Image or AMI), which is a topic we’ll come back to in Part 2. For now, you can stick - -with the default, which should be Amazon Linux. Below that, you’ll need to configure the instance type and key pair, - -as shown in Figure 14.

- -
- -
- -
- -Configure the instance type and key pair to use for your EC2 instance - -
- -
Figure 14. Configure the instance type and key pair to use for your EC2 instance.
- -
- -
- -

The instance type specifies what type of server to use: that is, what sort of CPU, memory, hard drive, etc. it’ll - -have. For this quick test, you can use the default, which should be t2.micro or t3.micro, small instances (1 CPU, - -1GB of memory) that are part of the AWS free tier. The key pair can be used to connect to the EC2 instance via SSH, a - -topic you’ll learn more about in Part 7. You’re not going to be using SSH for this example, so - -select "Proceed without a key pair." Scroll down to the network settings, as shown in Figure 15.

- -
- -
- -
- -Configure the network settings for your EC2 instance - -
- -
Figure 15. Configure the network settings for your EC2 instance.
- -
- -
- -

You’ll learn about networking in Part 7. For now, you can leave most of these settings at their - -defaults: the Network should pick your Default VPC (in Figure 15, my Default VPC has the ID - -vpc-deb90eb6, but your ID will be different), the Subnet should be "No preference," and Auto-assign public IP should - -be "Enable." The only thing you should change is the Firewall (security groups) setting, selecting the "Create - -security group" radio button, disabling the "Allow SSH traffic from" setting, and enabling the "Allow HTTP traffic - -from the internet" setting, as shown in Figure 15. By default, EC2 instances have firewalls, - -called security groups, that don’t allow any network traffic in our out. Allowing HTTP traffic tells the security - -group to allow inbound TCP traffic on port 80 so that the sample app can receive requests and respond with "Hello, - -World!"

- -
- -
- -

Next, open up the "Advanced details" section, and scroll down to "User data," as shown in Figure 16.

- -
- -
- -
- -Configure user data for your EC2 instance - -
- -
Figure 16. Configure user data for your EC2 instance.
- -
- -
- -

User data is a script that will be executed by the EC2 instance the very first time it boots up. Copy and paste the - -following script into user data:

- -
- -
- -
Example 3. User data script (ch1/ec2-user-data-script/user-data.sh)
- -
- -
- -
- -
#!/usr/bin/env bash
-
-
-
-set -e
-
-
-
-# (1)
-
-curl -fsSL https://rpm.nodesource.com/setup_21.x | bash -
-
-yum install -y nodejs
-
-
-
-# (2)
-
-tee app.js > /dev/null << "EOF"
-
-const http = require('http');
-
-
-
-const server = http.createServer((req, res) => {
-
-  res.writeHead(200, { 'Content-Type': 'text/plain' });
-
-  res.end('Hello, World!\n');
-
-});
-
-
-
-// (3)
-
-const port = 80;
-
-server.listen(port,() => {
-
-  console.log(`Listening on port ${port}`);
-
-});
-
-EOF
-
-
-
-# (4)
-
-nohup node app.js &
- -
- -
- -
- -
- -
- -

This Bash script will do the following when the EC2 instance boots:

- -
- -
- -
    - -
  1. - -

    Install Node.js.

    - -
  2. - -
  3. - -

    Write the sample app code to a file called app.js. This is the same Node.js code you saw earlier in the - -blog post, with one difference, as described next.

    - -
  4. - -
  5. - -

    The only difference from the sample app code you saw earlier is that this code listens on port 80 instead of 8080, - -as that’s the port you opened up in the security group.

    - -
  6. - -
  7. - -

    Run the app using node app.js, just like you did on your own computer. The only difference is the use of nohup - -and ampersand (&), which allows the app to run permanently in the background, while the Bash script itself can - -exit.

    - -
  8. - -
- -
- -
- - - - - - - - - - - -
- -
Warning
- -
- -
Watch out for snakes: these examples have several problems
- -
- -

The approach shown here with user data has a number of drawbacks, as explained in Table 4:

- -
- - - - - -- -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 4. Problems with the simplified example
ProblemWhat the example app doesWhat you should do instead

Root user

User data scripts run as the root user, so running the app from user data means it runs as the root user, too.

Run apps using a separate OS user with limited permissions: you’ll see an example of this in Part 3.

Port 80

The app listens on port 80, which requires root user permissions.

Have apps listen on a port greater than 1024.

User data limits

The app crams all of its code and dependencies into the user data script. User data scripts are limited to 16 KB.

Use configuration management or server templating tools: you’ll see example of both in Part 2.

Process supervision

The user data script starts the app, but user data scripts only run on the very first boot.

Use process supervisors to restart your app if it crashes or the server reboots: you’ll see an example of this in Part 3.

Node.js specifics

The user data script runs just a single Node.js process, in development mode, using only one CPU core.

Run multiple Node.js processes to use all CPU cores. Set the NODE_ENV environment variable to "production."

- -
- -

You’ll see how to address all of these limitations later in the blog post series. Since this is just a first example - -for learning, it’s OK to use this simple, insecure approach for now, but make sure not to use this approach in - -production!

- -
- -
- -
- -
- -

Leave all the other settings at their defaults and click "Launch instance." Once the EC2 instance has been launched, - -you should see the ID of the instance on the page (something like i-05565e469650271b6). Click on the ID to go to the - -EC2 instances page, where you should see your EC2 instance booting up. Once it has finished booting (you’ll see the - -instance state go from "Pending" to "Running"), which typically takes 1-2 minutes, click on the row with your instance, - -and in a drawer that pops up at the bottom of the page, you should see more details about your EC2 instance, including - -its public IP address, as shown in Figure 17.

- -
- -
- -
- -Find the public IP address for your EC2 instance - -
- -
Figure 17. Find the public IP address for your EC2 instance.
- -
- -
- -

Copy and paste that IP address, open http://<IP>; in your browser (note: you have to actually type the http:// - -portion in your browser, or the browser may try to use https:// by default, which will not work; you’ll learn more - -about HTTPS in Part 8), and you should see:

- -
- -
- -
- -
Hello, World!
- -
- -
- -
- -

Congrats, you now have your app running on a server in AWS!

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for an IaS such as AWS:

- -
- -
- -
    - -
  • - -

    Try restarting your EC2 instance. Does the sample-app still work after the reboot? If not, why not?

    - -
  • - -
  • - -

    Create a custom security group that opens up port 8080, and launch a new EC2 instance that uses this new security - -group. This will allow the sample app to listen on port 8080 rather than 80, which is better from a security - -standpoint.

    - -
  • - -
  • - -

    Find CloudWatch in the AWS Console and use it to find what logs and metrics you can about your EC2 instance. How does - -this compare to the monitoring you get out-of-the-box with Fly.io?

    - -
  • - -
- -
- -
- -
- -
- -

When you’re done experimenting with AWS, you should undeploy your app by selecting your EC2 instance, clicking - -"Instance state," and choosing "Terminate instance" in the drop down, as shown in Figure 18. - -This ensures that your account doesn’t start accumulating any unwanted charges.

- -
- -
- -
- -Make sure to terminate your EC2 instance when you’re done testing - -
- -
Figure 18. Make sure to terminate your EC2 instance when you’re done testing.
- -
- -
- -
- -

How IaaS stacks up

- -
- -

Since you’re using IaaS, what you see really is what you get: it’s just a single server. Unlike PaaS, you - -don’t get multiple servers, TLS certificates and termination, detailed monitoring, automated deployment, and so on out - -of the box. What you do get is access to all the low-level primitives, so you can build all those parts of the software - -delivery process yourself, as described in the rest of this blog post series. And that’s both the greatest strength and - -weakness of IaaS: you have much more control and visibility, so you have fewer limits, can customize things more, and - -meet a much wider set of requirements; but for those very same reasons, it’s much more work than using a PaaS.

- -
- -
- -
- -
- -

Comparing PaaS and IaaS

- -
- -

Now that you’ve seen both IaaS and PaaS in action, the question is, when should you use one or the other? This is the - -topic of the next two sections.

- -
- -
- -

When to Go with PaaS

- -
- -

Your customers don’t care what kind of CI / CD pipeline you have, or if you are running a fancy Kubernetes cluster, or - -if you’re on the newest NoSQL database. All that matters is that you can create a product that meets your customers' - -needs. Every single thing you do that isn’t absolutely required to create that product is wasteful. This may seem like - -a strange thing to say in a blog post series about DevOps and software delivery, but if you can create a great product - -without having to invest much in DevOps and software delivery, that’s a good thing.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #5
- -
- -

You should spend as little time on software delivery as you possibly can, while still meeting your company’s - -requirements.

- -
- -
- -
- -
- -

If you can find someone else who can take care of software delivery for you, and still meet your requirements, you - -should take advantage of that as much as possible. And that’s precisely what a good PaaS offers: out-of-the-box - -software delivery. If you can find a PaaS that meets your requirements, then you should use it, stick with it for as - -long as you can, and avoid having to recreate all those software delivery pieces until you absolutely have to.

- -
- -
- -

Here are a few of the most common cases where a PaaS is usually the best choice:

- -
- -
- -
- -
Side projects
- -
- -

If you want to put up a website for fun or for a hobby, the last thing you want to do is spend a bunch of time - -fighting with builds or pipelines or TLS certs. That’s precisely the sort of thing that can kill your passion for - -your side project. Therefore, use a PaaS, let them do all the heavy lifting, and focus all your time on the side - -project itself.

- -
- -
Startups and small companies
- -
- -

If you’re building a new company, you should almost always start with a PaaS. In the vast majority of cases, startups - -live or die based on their product—whether they managed to build something the market wants—and not their software - -delivery process. Therefore, you typically want to invest as much time as possible into the product, and as little - -time as possible into the software delivery process. As you saw earlier in this blog post, you can - -get live on a PaaS in minutes. Moreover, as a startup, your requirements in terms of scalability, availability, - -security, and compliance are typically fairly minimal, so you can often go for years before you start to run into the - -limitations of a PaaS. It’s only when you find product/market fit, and start hitting the problem of having to scale - -your company—which is a good problem to have—that you may need to start thinking of moving off PaaS. But by then, you - -hopefully have grown large enough to have the time and resources available to invest in building a software delivery - -process on top of IaaS.

- -
- -
New and experimental projects
- -
- -

Another common use case for PaaS is at established companies that want to try something new or experimental. Often, - -the software delivery processes within larger companies are slow and inefficient, making it hard to launch something - -and iterate on it quickly. Using a PaaS for these sorts of new projects can make experimentation far easier. Moreover, - -the new projects often don’t have the same requirements in terms of scalability, availability, security, and - -compliance as the company’s older and more mature products, so you are less likely to hit the limitations of a PaaS.

- -
- -
- -
- -
- -

As a general rule, you want to use a PaaS whenever you can, and only move on to IaaS when a PaaS can no longer meet - -your requirements, as discussed in the next section.

- -
- -
- -
- -

When to Go with IaaS

- -
- -

Here are a few of the most common cases where IaaS is usually the best choice:

- -
- -
- -
- -
Load
- -
- -

If you are dealing with a huge amount of traffic, the pricing of PaaS offerings may become prohibitively expensive. - -Moreover, even if you could afford the bill, most PaaS offerings only support relatively simple architectures, whereas - -handling high load & scale may require you to migrate to IaaS to run more complicated systems.

- -
- -
Company size
- -
- -

PaaS offerings can also struggle to deal with larger companies. As you shift from a handful of developers to dozens - -of teams with hundreds or even thousands of developers, not only can PaaS pricing become untenable, but you may also - -hit limits in terms of the types of governance and access controls offered by the PaaS: e.g., allowing some teams to - -make some types of changes, but not others, may be difficult in a PaaS.

- -
- -
Availability
- -
- -

Your business may need to provide uptime guarantees (e.g., service level objectives, or SLAs, a topic you’ll learn - -more about in Part 10) that are higher than what your PaaS can provide. Moreover, when there - -is an outage or a bug, PaaS offerings are often limited in the type of visibility and connectivity options they - -provide: e.g., many PaaS offerings don’t let you SSH to the server (e.g., this has been a limitation in Heroku for - -over a decade), which can make debugging a lot harder. As your company and architecture grow larger and more - -complicated, being able to introspect your systems becomes more and more important, and this may be a reason to go - -with IaaS over PaaS.

- -
- -
Security & compliance
- -
- -

One of the most common reasons to move off PaaS is to meet security and compliance requirements: e.g., SOC 2, ISO - -27001, PCI, HIPAA, GDPR, etc. Although there are a handful of PaaS providers (e.g., Aptible) that can help you meet - -some types of compliance requirements, most of them do not. Moreover, the general lack of visibility into and control - -of the underlying systems can make it hard to meet certain security and compliance requirements.

- -
- -
- -
- -
- -

You go with IaaS whenever you need more control, more performance, and/or more security. If your company gets big - -enough, one or more of these needs will likely push you from PaaS to IaaS—it’s the price of success.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #6
- -
- -

Go with PaaS whenever you can; go with IaaS when you have to.

- -
- -
- -
- -
- -
- -
- -
- -

Conclusion

- -
- -

You now know the basics of deploying your app. Here are the 6 key takeaways from this chapter:

- -
- -
- -
- -
Adopt the architecture and software delivery processes that are appropriate for your stage of company
- -
- -

Always pick the right tools for the job.

- -
- -
Adopt DevOps incrementally, as a series of small steps, where each step is valuable by itself
- -
- -

Avoid big bang migrations and false incrementalism, where you only get value after all steps have been completed.

- -
- -
You should never expose apps running on a personal computer to the outside world
- -
- -

Instead, deploy those apps on a server.

- -
- -
Using the cloud should be your default choice for most new deployments these days
- -
- -

Run your server(s) in the cloud whenever you can. Use on-prem only if you already have an on-prem presence or you - -have load patterns or compliance requirements that work best on-prem.

- -
- -
You should spend as little time on software delivery as you possibly can, while still meeting your company’s requirements
- -
- -

If you can offload your software delivery to someone else, while still responsibly meeting your company’s - -requirements, you should.

- -
- -
Go with PaaS whenever you can; go with IaaS when you have to
- -
- -

A PaaS cloud provider lets you offload most of your software delivery needs, so if you can find a PaaS that meets - -your company’s requirements, you should use it. Only go with an IaaS if your company’s requirements exceed what a - -PaaS can offer.

- -
- -
- -
- -
- -

Knowing how to deploy your apps is an important step, but it’s just the first step in understanding DevOps and software - -delivery. There are quite a few steps left to go. One problem you may have noticed, for example, is that you had to - -deploy everything in this blog post by clicking around a web UI or manually running a series of CLI - -commands. Doing things manually is tedious, slow, and error-prone. Imagine if instead of one app, you had to deploy - -five or fifty; and imagine you had to do that many times per day. Not fun.

- -
- -
- -

The solution is to automate everything by managing all of your infrastructure as code, which is the topic of - -Part 2.

- -
- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/03.html b/docs/03.html deleted file mode 100644 index 765d932..0000000 --- a/docs/03.html +++ /dev/null @@ -1,6252 +0,0 @@ - - - - - - - - - - - - - - -Part 2. How to Manage Your Infrastructure as Code - - - - - - - - - - - - - -
-
- -
- -
-
- -

Part 2. How to Manage Your Infrastructure as Code

- -
- -
- -

In Part 1, you learned how to deploy your app using PaaS and IaaS, but it required a lot of manual - -steps clicking around a web UI. This is fine while you’re learning and experimenting, but if you manage everything at - -a company this way—what’s sometimes called ClickOps—it quickly leads to problems:

- -
- -
- -
- -
Deployments are slow and tedious
- -
- -

So you can’t deploy too often.

- -
- -
Deployments are error-prone
- -
- -

So you end up with lots of bugs, outages, and late-night debugging sessions.

- -
- -
Only one person knows how to deploy
- -
- -

So that person is overloaded, the simplest updates take ages, there’s never time left for bigger, longer-term - -improvements, and if they ever go on vacation, everything grinds to a halt (and you don’t even dare consider - -what would happen if they left the company or got hit by a bus).[11]

- -
- -
- -
- -
- -

Fortunately, these days, there is a better way to do things: you can manage your infrastructure as code (IaC). - -Instead of clicking around manually, you write and execute code to define, deploy, update, and destroy your - -infrastructure. This represents an important shift in mindset in which you treat all aspects of operations as - -software—even those aspects that represent hardware (e.g., setting up servers). In fact, a key insight of modern DevOps - -practices is that most tasks that you used to do manually can be managed as code instead, as shown in - -Table 5:

- -
- - - - - -- -- -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 5. A key insight of modern DevOps is that you can manage almost everything as code
TaskHow to manage as codeExamplePart

Provision servers

Provisioning tools

Use OpenTofu to deploy a server

This blog post

Configure servers

Configuration management and templating

Use Packer to create an image of a server

This blog post

Configure apps

Configuration files and services

Read configuration from a JSON file during boot

Part 6

Configure networking

Provisioning tools, service discovery

Use Kubernetes service discovery

Part 7

Build apps

Build systems, continuous integration

Build your app with NPM

Part 4, Part 5

Test apps

Automated tests, continuous integration

Write automated tests using Jest

Part 4, Part 5

Deploy apps

Automated deployment, continuous delivery

Do a rolling deployment with Kubernetes

Part 3, Part 5

Scale apps

Auto scaling

Set up auto scaling policies in AWS

Part 3

Recover from outages

Auto healing

Set up liveness probes in Kubernetes

Part 3

Manage databases

Schema migrations

Use Flyway to update your database schema

Part 9

Test for compliance

Automated tests, policy as code

Check compliance using Open Policy Agent (OPA)

Part 4

- -
- -

If you search around, you’ll quickly find that there are many tools out there that allow you to manage your - -infrastructure as code, including Chef, Puppet, Ansible, Pulumi, Terraform/OpenTofu, CloudFormation, Docker, Packer, - -and so on. Which one should you use? Many of the comparisons you find online between these tools do little more than - -list the general properties of each tool and make it sound like you could be equally successful with any of them. And - -while that’s true in theory, it’s not true in practice. There are considerable differences between these tools, and - -your odds of success go up significantly if you know how to pick the right tool for the job.

- -
- -
- -

This blog post will help you navigate the IaC space by introducing you to the most common types of IaC - -tools, which, broadly speaking, fall into the following four IaC categories:

- -
- -
- -
    - -
  • - -

    Ad hoc scripts: e.g., use a Bash script to deploy a server.

    - -
  • - -
  • - -

    Configuration management tools: e.g., use Ansible to deploy a server.

    - -
  • - -
  • - -

    Server templating tools: e.g., use Packer to build an image of a server.

    - -
  • - -
  • - -

    Provisioning tools: e.g., Use OpenTofu to deploy a server.

    - -
  • - -
- -
- -
- -

You’ll work through examples where you deploy the same infrastructure using each of these approaches, which will allow - -you to see how different IaC categories perform across a variety of dimensions (e.g., verbosity, consistency, error - -handling, and so on), so that you can pick the right tool for the job.

- -
- -
- -

Here’s what we’ll cover in this blog post:

- -
- -
- -
    - -
  • - -

    The benefits of IaC

    - -
  • - -
  • - -

    Ad hoc scripts

    - -
  • - -
  • - -

    Configuration management tools

    - -
  • - -
  • - -

    Server templating tools

    - -
  • - -
  • - -

    Provisioning tools

    - -
  • - -
  • - -

    Using multiple IaC tools together

    - -
  • - -
- -
- -
- -

Before digging into the details of various IaC tools, it’s worth asking, why bother? Learning and adopting new tools has - -a cost, so what are the benefits of IaC that make this worthwhile? This is the focus of the next section.

- -
- -
- -

The Benefits of IaC

- -
- -

When your infrastructure is defined as code, you are able to use a wide variety of software engineering practices to - -dramatically improve your software delivery processes, including the following:

- -
- -
- -
- -
Self-service
- -
- -

If your infrastructure is defined in code, the entire deployment process can be automated, and developers can kick off - -their own deployments whenever necessary.

- -
- -
Speed and safety
- -
- -

If the deployment process is automated, it will be significantly faster, since a computer can carry out the deployment - -steps far faster than a person, and safer, given that an automated process will be more consistent, more repeatable, and - -not prone to manual error.

- -
- -
Documentation
- -
- -

If your infrastructure is defined as code, then the state of your infrastructure is in source files that anyone can - -read, rather than locked away in a single person’s head. In other words, IaC acts as documentation, allowing - -everyone in the organization to understand how things work.

- -
- -
Version control
- -
- -

You can store your IaC source files in version control (which you’ll do in Part 4), which - -means that the entire history of your infrastructure is now captured in the commit log. This becomes a powerful tool - -for debugging issues, because any time a problem pops up, your first step will be to check the commit log and find out - -what changed in your infrastructure, and your second step might be to resolve the problem by simply reverting back to - -a previous, known-good version of your IaC code.

- -
- -
Validation
- -
- -

If the state of your infrastructure is defined in code, for every single change, you can perform a code review, - -run a suite of automated tests, and pass the code through static analysis tools—all practices that are known to - -significantly reduce the chance of defects (you’ll see examples of all of these practices in - -Part 4).

- -
- -
Reuse
- -
- -

You can package your infrastructure into reusable modules so that instead of doing every deployment for every - -product in every environment from scratch, you can build on top of known, documented, battle-tested - -pieces.

- -
- -
Happiness
- -
- -

There is one other very important, and often overlooked, reason for why you should use IaC: happiness. Deploying code - -and managing infrastructure manually is repetitive and tedious. Most people resent this type of - -work, since it involves no creativity, no challenge, and no recognition. You could deploy code perfectly for months, - -and no one will take notice—until that one day when you mess it up. That creates a stressful and unpleasant - -environment. IaC offers a better alternative that allows computers to do what they do best (automation) and - -developers to do what they do best (coding).

- -
- -
- -
- -
- -

Now that you have a sense of why IaC is so valuable, in the following sections, you’ll explore the most common - -categories of IaC tools, starting with ad hoc scripts.

- -
- -
- -
- -
Authenticating to AWS on the command line
- -
- -

Since most of the examples in this blog post series use AWS (as discussed in Section 1.2.5), you’ll need - -to authenticate to AWS on the command line. This requires using an access key, which you can create by heading over - -to the IAM Console, clicking Users, and clicking on the IAM user you created - -in Section 1.2.5. Next, click on the "Security credentials" tab, scroll down to the "Access keys" - -section, and click "Create access key" as shown in Figure 19:

- -
- -
- -
- -Create an access key for your IAM user - -
- -
Figure 19. Create an access key for your IAM user.
- -
- -
- -

On the next page, select "Command Line Interface (CLI)" as the use case, tick the Confirmation check box, and click - -Next. Finally, enter a description, and click "Create access key." This will take you to a page that shows two values, - -an access key id and a secret access key. This is the only time AWS will show you these values, so make sure to - -save both of them in a secure password manager, such as 1Password (you’ll learn more about secrets management in - -Part 8).

- -
- -
- -

To use the access key on the command line, you need to set the access key id and secret access key as the - -environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, respectively:

- -
- -
- -
- -
$ export AWS_ACCESS_KEY_ID=(your access key id)
-
-$ export AWS_SECRET_ACCESS_KEY=(your secret access key)
- -
- -
- -
- -

Note that these environment variables apply only to the current shell, so if you open a new terminal window, you’ll - -need to export these variables again.

- -
- -
- -
- -
- -
- -

Ad Hoc Scripts

- -
- -

The first approach you might think of for managing your infrastructure as code is to use an ad hoc script. You take - -whatever task you were doing manually, break it down into discrete steps, and use your favorite scripting language - -(e.g., Bash, Ruby, Python) to capture each of those steps in code. When you run that code, it can automate the process - -of creating infrastructure for you.

- -
- -
- -

Example: Deploy an EC2 Instance Using a Bash Script

- -
- - - - - - - - - - - -
- -
Note
- -
- -
Example Code
- -
- -

As a reminder, you can find all the code examples in the blog post series’s sample - -code repo in GitHub.

- -
- -
- -
- -
- -

As an example, let’s create a Bash script that automates all the manual steps you did in Part 1 to - -deploy a simple Node.js app in AWS. Head into the fundamentals-of-devops folder you created in - -Part 1 to work through the examples in this blog post series, and create a new subfolder for this - -part and the Bash script:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch2/bash
-
-$ cd ch2/bash
- -
- -
- -
- -

Within the bash folder, create a Bash script called deploy-ec2-instance.sh, with the contents shown in - -Example 4:

- -
- -
- -
Example 4. Bash script to deploy an EC2 instance (ch2/bash/deploy-ec2-instance.sh)
- -
- -
- -
- -
#!/usr/bin/env bash
-
-
-
-set -e
-
-
-
-export AWS_DEFAULT_REGION="us-east-2"
-
-SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-
-user_data=$(cat "$SCRIPT_DIR/../../ch/ec2-user-data-script/user-data.sh")
-
-
-
-# (1)
-
-security_group_id=$(aws ec2 create-security-group \
-
-  --group-name "sample-app" \
-
-  --description "Allow HTTP traffic into the sample app" \
-
-  --output text \
-
-  --query GroupId)
-
-
-
-# (2)
-
-aws ec2 authorize-security-group-ingress \
-
-  --group-id "$security_group_id" \
-
-  --protocol tcp \
-
-  --port 80 \
-
-  --cidr "0.0.0.0/0" > /dev/null
-
-
-
-# (3)
-
-instance_id=$(aws ec2 run-instances \
-
-  --image-id "ami-0900fe555666598a2" \
-
-  --instance-type "t2.micro" \
-
-  --security-group-ids "$security_group_id" \
-
-  --user-data "$user_data" \
-
-  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=sample-app}]' \
-
-  --output text \
-
-  --query Instances[0].InstanceId)
-
-
-
-public_ip=$(aws ec2 describe-instances \
-
-  --instance-ids "$instance_id" \
-
-  --output text \
-
-  --query 'Reservations[*].Instances[*].PublicIpAddress')
-
-
-
-# (4)
-
-echo "Instance ID = $instance_id"
-
-echo "Security Group ID = $security_group_id"
-
-echo "Public IP = $public_ip"
- -
- -
- -
- -
- -
- -

If you’re not an expert in Bash syntax, all you have to know about this script is that it uses the - -AWS Command Line Interface (CLI) to do the following:

- -
- -
- -
    - -
  1. - -

    Create a security group.

    - -
  2. - -
  3. - -

    Update the security group to allow inbound HTTP requests on port 80.

    - -
  4. - -
  5. - -

    Deploy an EC2 instance that uses that security group and runs the Node.js app on boot in a user data script.

    - -
  6. - -
  7. - -

    Output the IDs of the security group and EC2 instance and the public IP of the EC2 instance.

    - -
  8. - -
- -
- -
- - - - - - - - - - - -
- -
Warning
- -
- -
Watch out for snakes: these are simplified examples for learning, not for production
- -
- -

The examples in this blog post are still simplified for learning and not suitable for production - -usage, due to the security concerns and user data limitations explained in Watch out for snakes: these examples have several problems. You’ll - -see how to work around some of these limitations starting in the next chapter.

- -
- -
- -
- -
- -

If you want to try the script out, you’ll first need to give the script execute permissions:

- -
- -
- -
- -
$ chmod u+x deploy-ec2-instance.sh
- -
- -
- -
- -

Next, authenticate to AWS as described in Authenticating to AWS on the command line, and run the script - -as follows:

- -
- -
- -
- -
$ ./deploy-ec2-instance.sh
-
-Instance ID = i-0335edfebd780886f
-
-Security Group ID = sg-09251ea2fe2ab2828
-
-Public IP = 52.15.237.52
- -
- -
- -
- -

After the script finishes, give the EC2 instance a minute or two to boot up, and then try opening up - -http://<Public IP> in your web browser, where <Public IP> is the IP address the script outputs at the very end. - -You should see:

- -
- -
- -
- -
Hello, World!
- -
- -
- -
- -

Congrats, you are now managing your infrastructure as code! Well, sort of. This script, and most ad hoc scripts, have - -quite a few drawbacks in terms of using them to manage infrastructure, as discussed in the next section.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for using Bash:

- -
- -
- -
    - -
  • - -

    What happens if you run the Bash script a second time? Do you get an error? If so, why?

    - -
  • - -
  • - -

    How would you have to tweak the script if you wanted to run multiple EC2 instances?

    - -
  • - -
- -
- -
- -
- -
- -

When you’re done experimenting with this script, you should manually undeploy the EC2 instance by finding it in the - -EC2 Console (look for the instance ID the script outputs at the end), - -clicking "Instance state," and choosing "Terminate instance" in the drop down, as shown in - -Figure 18. This ensures that your account doesn’t start accumulating any unwanted - -charges.

- -
- -
- -
- -

How Ad Hoc Scripts Stack Up

- -
- -

Below is a list of criteria, which I’ll refer to as the IaC category criteria in this blog post, - -that you can use to compare different categories of IaC tools. In this section, I’ll flush out how ad hoc scripts - -stack up according to the IaC category criteria; in later sections, you’ll see how the other IaC categories perform - -along the same criteria, giving you a consistent way to compare the different options.

- -
- -
- -
- -
CRUD
- -
- -

CRUD stands for create, read, update, and delete. To manage infrastructure as code, you typically need that code to - -support all four of these operations, whereas most ad hoc scripts only handle create. For example, this script can - -create a security group and EC2 instance, but if you run this script a second or third time, the script doesn’t know - -how to "read" the state of the world, so it has no awareness that the security group and EC2 instance already exist, - -and so it’ll never update them, but only try to create new infrastructure all over again. Likewise, this script has - -no built-in support for deleting any of the infrastructure it creates (which is why you had to terminate the EC2 - -instance manually). So while ad hoc scripts make it much faster to create infrastructure, they don’t really help - -you manage it.

- -
- -
Scale
- -
- -

Solving the CRUD problem in an ad hoc script for a single EC2 instance is hard enough, but a real architecture may - -contain hundreds of instances, plus databases, load balancers, networking configuration, and so on. Not only do you - -need a way to keep track of and connect to all this infrastructure, you may also need use specific deployment - -strategies, such as zero-downtime rolling deployments, blue-green deployments, canary deployments, and so on - -(you’ll learn more about deployment strategies in Part 5). Tools specifically designed to manage - -infrastructure often have this sort functionality built-in to help you manage infrastructure at scale, whereas with an - -ad hoc script, you’d have to figure it all out yourself.

- -
- -
Idempotency and error handling
- -
- -

To manage infrastructure, you typically want code that is idempotent, which means it can be re-run multiple times - -and still produce the desired result. Most ad hoc scripts are not idempotent and do not handle - -errors gracefully. If you hit an error part way through running this script, it just exits, leaving work in a - -partially completed state, but retaining no memory of what the script got done. If you then try to re-run the script, - -you’ll often get a different error because some of the partially completed work will now interfere with the new - -work the script is trying to do. For example, perhaps you ran the script the first time, and it created the security - -group called "sample-app" successfully, but when it tried to create the EC2 instance, AWS was out of capacity, - -and you got an error. If you wait until AWS has more capacity and try to re-run the script, you’ll now get an error as - -the script tries to create a security group called "sample-app" again, which isn’t allowed, as AWS requires - -security group names to be unique.

- -
- -
Consistency
- -
- -

The great thing about ad hoc scripts is that you can use any programming language you want, and you can write the - -code however you want. The terrible thing about ad hoc scripts is that you can use any programming language you want, - -and you can write the code however you want. I wrote the Bash script one way; you might write it another way; - -your coworker may choose a different language entirely. If you’ve ever had to maintain a large repository of ad hoc - -scripts, you know that it almost always devolves into a mess of unmaintainable spaghetti code. As you’ll see shortly, - -tools that are designed specifically for managing infrastructure as code often provide a single, idiomatic way to - -solve each problem, so that your codebase tends to be more consistent and easier to navigate and maintain.

- -
- -
Verbosity
- -
- -

The Bash script to launch a simple EC2 instance, plus the user data script, add up to around 80 lines of code—and - -that’s without the code for CRUD, idempotency, and error handling. An ad hoc script that handles all of these - -properly would be hundreds or thousands of lines of code. And we’re talking about just one EC2 instance; your - -production infrastructure may include hundreds of instances, plus databases, load balancers, network configurations, - -and much more. The amount of custom code it takes to manage all of this with ad hoc scripts quickly becomes - -untenable. As you’ll see shortly, tools that are designed specifically for managing infrastructure as code typically - -provide APIs that are more concise for accomplishing common infrastructure tasks.

- -
- -
- -
- -
- -

Ad hoc scripts have always been, and will always be, a big part of software delivery. They are the glue and duct tape - -of the DevOps world. However, they are not the best choice as a primary tool for managing infrastructure as code.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #1
- -
- -

Ad hoc scripts are great for small, one-off tasks, but not for managing all your infrastructure as code.

- -
- -
- -
- -
- -

If you’re going to be managing all of your infrastructure as code, you should use an IaC tool that is purpose-built for - -the job, such as one of the ones discussed in the next several sections.

- -
- -
- -
- -
- -

Configuration Management Tools

- -
- -

After trying out ad hoc scripts, and hitting all the issues mentioned in the previous section, the software industry - -moved on to configuration management tools, such as Chef, Puppet, - -and Ansible. These tools first started to appear before cloud computing was ubiquitous, so - -the way they were originally designed was to assume someone else had done the work of setting up the hardware (e.g., - -your Ops team racked the servers in your own data center), and the primary purpose of these tools was to handle the - -software, including configuring the operating system, installing dependencies, deploying and updating apps, and so on.

- -
- -
- -

Most configuration management tools make changes directly on a set of servers you specify: this is a mutable - -infrastructure paradigm, where you have long-running servers that you update (mutate) over and over again, over many - -years. To be able to make changes on those servers, you need two things:

- -
- -
- -
- -
Something to drive the changes
- -
- -

With Chef and Puppet, the idiomatic way to do this is to run one or more master servers (e.g., the Chef Server or - -Puppet Server), which take your code and apply it to all your other servers. Ansible, on the other hand, allows you - -to run the Ansible CLI tool anywhere: e.g., on your own computer, on a build server, or anywhere else. The advantage - -of a master server is that it can run a reconciliation loop, constantly checking that the configuration of each - -server matches your desired configuration, and making corrections if not. The drawback is that you have extra servers - -to deploy, configure, secure, monitor, and maintain.

- -
- -
A way to connect to servers
- -
- -

With Chef and Puppet, the idiomatic way to do this is to install agent software on each server; the idiomatic way to - -do this with tools like Ansible is to connect to each server using SSH (a topic you’ll learn more about in - -Part 7). In either case, there is a bit of a chicken-and-egg problem you have to solve, where - -your goal is to be able to configure your servers, but before you can do that, you have to configure your servers - -(i.e., install an agent or configure SSH access)! Solving this chicken-and-egg problem requires either manual - -intervention or external tools (e.g., you’ll see an example shortly of how you can use AWS APIs to configure SSH - -access for Ansible). Using agents or SSH to configure servers is an advantage over the user data technique you saw - -with the Bash script, as user data has several significant limitations (only runs on first boot, max size 16 KB). - -However, the drawback is that both agents and SSH require that you open up extra ports and configure extra - -authentication mechanisms.

- -
- -
- -
- -
- -

Example: Deploy an EC2 Instance Using Ansible

- -
- -

To be able to use configuration management, the first thing you need is a server. If you have an existing server you - -can use—e.g., a physical server on-prem or a virtual server in the cloud—and you have SSH access to that server, you - -can skip this section, and go to the next one.

- -
- -
- -

If you don’t have a server you can use, this section will show you how to deploy an EC2 instance using Ansible. Note - -that deploying and managing servers (hardware) is not really what configuration management tools were designed to - -do—later in this blog post, you’ll see how provisioning tools are typically a better fit for this - -task—but for spinning up a single server for learning and testing, Ansible is good enough.

- -
- -
- -

Create a new folder called ansible:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch2/ansible
-
-$ cd ch2/ansible
- -
- -
- -
- -

Inside the Ansible folder, create an Ansible playbook called create_ec2_instance_playbook.yml, with the contents - -shown in Example 5:

- -
- -
- -
Example 5. Ansible playbook to deploy an EC2 instance (ch2/ansible/create_ec2_instance_playbook.yml)
- -
- -
- -
- -
- name: Deploy an EC2 instance in AWS
-
-  hosts: localhost
-
-  gather_facts: no
-
-  environment:
-
-    AWS_REGION: us-east-2
-
-  tasks:    
-
-    - name: Create security group                      # (1)
-
-      amazon.aws.ec2_security_group:
-
-        name: sample-app-ansible 
-
-        description: Allow HTTP and SSH traffic
-
-        rules:
-
-          - proto: tcp
-
-            ports: [8080]
-
-            cidr_ip: 0.0.0.0/0
-
-          - proto: tcp
-
-            ports: [22]
-
-            cidr_ip: 0.0.0.0/0
-
-      register: aws_security_group
-
-
-
-    - name: Create a new EC2 key pair                  # (2)
-
-      amazon.aws.ec2_key:
-
-        name: ansible-ch2
-
-        file_name: ansible-ch2.key                     # (3)
-
-      no_log: true
-
-      register: aws_ec2_key_pair
-
-
-
-    - name: Create EC2 instance with Amazon Linux 2003 # (4)
-
-      amazon.aws.ec2_instance:
-
-        name: sample-app-ansible
-
-        key_name: "{{ aws_ec2_key_pair.key.name }}"
-
-        instance_type: t2.micro
-
-        security_group: "{{ aws_security_group.group_id }}"
-
-        image_id: ami-0900fe555666598a2
-
-        tags:
-
-          Ansible: ch2_instances                       # (5)
- -
- -
- -
- -
- -
- -

Instead of a general-purpose programming language (GPL), such as Bash or Ruby or Python, Ansible uses a domain - -specific language (DSL) defined on top of YAML. The YAML in the preceding playbook does the following:

- -
- -
- -
    - -
  1. - -

    Create a security group: Allow inbound HTTP requests on port 8080 and inbound SSH requests on port 22.

    - -
  2. - -
  3. - -

    Create an EC2 key pair: An EC2 key pair is a public/private key pair that can be used to authenticate to an EC2 - -instance.

    - -
  4. - -
  5. - -

    Save the private key: Store the private key of the EC2 key pair locally in a file called - -ansible-ch2.key. You’ll use this private key in the next section to authenticate to the EC2 instance.

    - -
  6. - -
  7. - -

    Deploy an EC2 instance: The instance uses the security group and public key from the previous steps.

    - -
  8. - -
  9. - -

    Tag the instance: This sets the Ansible tag on the instance to "ch2_instances." You’ll use this tag in the next - -section.

    - -
  10. - -
- -
- -
- -

To run this Ansible playbook, - -install Ansible, authenticate to - -AWS as described in Authenticating to AWS on the command line, and run the following command:

- -
- -
- -
- -
$ ansible-playbook -v create_ec2_instance_playbook.yml
- -
- -
- -
- -

You should get log output for each step that looks something like this (truncated for readability):

- -
- -
- -
- -
PLAY [Deploy an EC2 instance in AWS]
-
-
-
-TASK [Create security group]
-
-changed: [localhost] => {"changed": true, "description": "..."}
-
-
-
-TASK [Create a new EC2 key pair]
-
-changed: [localhost] => {"censored": "...", "changed": true}
-
-
-
-TASK [Create EC2 instance with Amazon Linux 2003]
-
-changed: [localhost] => {"changed": true, "instance_ids": ["..."]}
-
-
-
-PLAY RECAP
-
-localhost: ok=3    changed=3    unreachable=0    failed=0
- -
- -
- -
- -

Now that you have a server to work with, you can see what configuration management tools are really designed to do: - -configuring servers to run software.

- -
- -
- -
- -

Example: Configure a Server Using Ansible

- -
- -

In order for Ansible to be able to configure your servers, you have to provide an inventory, which is a file that - -specifies which servers you want configured, and how to connect to them. If you have a set of physical servers on-prem, - -you can put the IP addresses of those servers in an inventory file, as shown in Example 6:

- -
- -
- -
Example 6. Example Ansible inventory file (inventory.yml)
- -
- -
- -
- -
webservers:
-
-  hosts:
-
-    10.16.10.1:
-
-    10.16.10.2:
-
-dbservers:
-
-  hosts:
-
-    10.16.20.1:
-
-    10.16.20.2:
-
-    10.16.20.3:
- -
- -
- -
- -
- -
- -

The preceding file organizes your servers into groups: the webservers group has two servers in it and the - -dbservers group has three servers. You’ll then be able to write Ansible playbooks that target specific groups.

- -
- -
- -

If you are running servers in the cloud, where servers come and go often, and IP addresses change more frequently, - -you’re better off using an inventory plugin that can dynamically discover your servers. For example, if you deployed - -an EC2 instance in AWS in the previous section, you can use the aws_ec2 inventory plugin by creating a file called - -inventory.aws_ec2.yml with the contents shown in Example 7:

- -
- -
- -
Example 7. Example Ansible inventory plugin to discovery EC2 instances (ch2/ansible/inventory.aws_ec2.yml)
- -
- -
- -
- -
plugin: amazon.aws.aws_ec2
-
-regions:
-
-  - us-east-2
-
-keyed_groups:
-
-  - key: tags.Ansible # (1)
-
-leading_separator: '' # (2)
- -
- -
- -
- -
- -
- -

This code does the following:

- -
- -
- -
    - -
  1. - -

    Automatically create groups based on the Ansible tag of the instance. In the previous section, you set this tag - -to "ch2_instances," so you’ll get an Ansible group of that name.

    - -
  2. - -
  3. - -

    By default, Ansible adds a leading underscore to group names. This disables it so the group name matches the tag - -name.

    - -
  4. - -
- -
- -
- -

For each group in your inventory, you can also specify group variables to configure how to connect to the servers in - -that group. You define these variables in YAML files in the group_vars folder, with the name of the file set to the - -name of the group you’re configuring. For example, for the EC2 instance in the ch2_instances group, you should - -create a file in group_vars/ch2_instances.yml with the contents shown in Example 8:

- -
- -
- -
Example 8. Variables for the sample app group (ch2/ansible/group_vars/ch2_instances.yml)
- -
- -
- -
- -
ansible_user: ec2-user                        # (1)
-
-ansible_ssh_private_key_file: ansible-ch2.key # (2)
-
-ansible_host_key_checking: false              # (3)
- -
- -
- -
- -
- -
- -

The variables this file defines are:

- -
- -
- -
    - -
  1. - -

    Use "ec2-user" as the username to connect to the EC2 instance. This is the username you need to use with Amazon - -Linux AMIs.

    - -
  2. - -
  3. - -

    Use the private key at ansible-ch2.key to authenticate to the instance. This is the private key of the EC2 key - -pair you created with the playbook in the previous section.

    - -
  4. - -
  5. - -

    Skip host key checking so you don’t get interactive prompts from Ansible.

    - -
  6. - -
- -
- -
- -

Alright, with the inventory stuff out of the way, you can now create a playbook to configure your server to run the - -Node.js sample app. Create a file called configure_sample_app_playbook.yml with the contents shown in - -Example 9:

- -
- -
- -
Example 9. The playbook to configure the server to run the sample app (ch2/ansible/configure_sample_app_playbook.yml)
- -
- -
- -
- -
- name: Configure the EC2 instance to run a sample app
-
-  hosts: ch2_instances # (1)
-
-  gather_facts: true
-
-  become: true
-
-  roles:
-
-    - sample-app       # (2)
- -
- -
- -
- -
- -
- -

This playbook does two things:

- -
- -
- -
    - -
  1. - -

    Target the servers in the ch2_instances group, which should be a group with the EC2 instance you - -deployed in the previous section. If you are configuring some other server (e.g., your own servers on-prem), update - -this to the name of the group to target in your inventory file.

    - -
  2. - -
  3. - -

    Configure the servers using an Ansible role called sample-app, as discussed next.

    - -
  4. - -
- -
- -
- -

An Ansible role is a structured way to organize tasks, templates, files, and other configuration you might want to - -apply to a server. The standard folder structure for Ansible roles looks like this:

- -
- -
- -
- -
roles
-
-  └── <role-name>
-
-      ├── defaults
-
-      │   └── main.yml
-
-      ├── files
-
-      │   └── foo.txt
-
-      ├── handlers
-
-      │   └── main.yml
-
-      ├── tasks
-
-      │   └── main.yml
-
-      ├── templates
-
-      │   └── foo.txt.j2
-
-      └── vars
-
-          └── main.yml
- -
- -
- -
- -

Each folder has a specific purpose: e.g., the tasks folder defines tasks to run on a server; the files - -folder has files to copy to the server; the templates folder lets you use - -Jinja templates to dynamically fill in data in files; and so on. - -Having this standardized structure makes it easier to navigate and understand an Ansible code base.

- -
- -
- -

To create the sample-app role for this playbook, create a roles/sample-app folder in the same directory as - -configure_sample_app_playbook.yml:

- -
- -
- -
- -
.
-
-├── configure_sample_app_playbook.yml
-
-├── group_vars
-
-├── inventory.aws_ec2.yml
-
-└── roles
-
-    └── sample-app
-
-        ├── files
-
-        │   └── app.js
-
-        └── tasks
-
-            └── main.yml
- -
- -
- -
- -

Within roles/sample-app, you should create files and tasks subfolders, which are the only parts of the - -standardized role folder structure you’ll need for this simple example. Copy the Node.js sample app you saw earlier in - -in Section 1.2.1 into files/app.js:

- -
- -
- -
- -
$ cp ch1/sample-app/app.js ch2/ansible/roles/sample-app/files/
- -
- -
- -
- -

Next, create tasks/main.yml with the code shown in Example 10:

- -
- -
- -
Example 10. Ansible role to run the Node.js sample app (ch2/ansible/roles/sample-app/tasks/main.yml)
- -
- -
- -
- -
- name: Add Node packages to yum  # (1)
-
-  shell: curl -fsSL https://rpm.nodesource.com/setup_21.x | bash -
-
-
-
-- name: Install Node.js
-
-  yum:
-
-    name: nodejs
-
-
-
-- name: Copy sample app           # (2)
-
-  copy:
-
-    src: app.js
-
-    dest: app.js
-
-
-
-- name: Start sample app          # (3)
-
-  shell: nohup node app.js &
- -
- -
- -
- -
- -
- -

This code does the following:

- -
- -
- -
    - -
  1. - -

    Install Node.js: Use the shell module to run a command on the server to add Node packages to yum, and then - -use the yum module to install Node.js.

    - -
  2. - -
  3. - -

    Copy the sample app: Use the copy module to copy app.js to the server.

    - -
  4. - -
  5. - -

    Start the sample app: Use the shell module to execute the node binary to run the app in the background.

    - -
  6. - -
- -
- -
- -

To run this playbook, authenticate to AWS as described in Authenticating to AWS on the command line, and run the following - -command:

- -
- -
- -
- -
$ ansible-playbook -v -i inventory.aws_ec2.yml configure_sample_app_playbook.yml
- -
- -
- -
- -

You should get log output for each step, including a recap at the end that looks something like this:

- -
- -
- -
- -
PLAY RECAP
-
-xxx.us-east-2.compute.amazonaws.com : ok=5    changed=4    failed=0
- -
- -
- -
- -

The value on the left, "xxx.us-east-2.compute.amazonaws.com," is a domain name you can use to access the instance. - -If you open http://xxx.us-east-2.compute.amazonaws.com:8080 (note it’s port 8080 this time, not 80) in your web - -browser, you should see the familiar "Hello, World!"

- -
- -
- -

Congrats, you’re now using a configuration management tool to manage your infrastructure as code!

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for Ansible:

- -
- -
- -
    - -
  • - -

    What happens if you run the Ansible playbook a second time? How does this compare to running the Bash script a second - -time?

    - -
  • - -
  • - -

    How would you have to tweak the playbook if you wanted to run multiple EC2 instances?

    - -
  • - -
  • - -

    Figure out how to use the SSH key created by Ansible (ansible.key) to manually SSH to your EC2 instance and make - -changes locally.

    - -
  • - -
- -
- -
- -
- -
- -

When you’re done experimenting with Ansible, you should manually undeploy the EC2 instance by finding it in the - -EC2 Console (look for the instance ID the playbook writes to the log), - -clicking "Instance state," and choosing "Terminate instance" in the drop down, as shown in Figure 18. - -This ensures that your account doesn’t start accumulating any unwanted charges.

- -
- -
- -
- -

How Configuration Management Tools Stack Up

- -
- -

Here is how configuration management tools stack up using the IaC category criteria from before:

- -
- -
- -
- -
CRUD
- -
- -

Most configuration management tools support three of the four CRUD operations: they can create the initial - -configuration, read the current configuration to see if it matches the desired configuration, and if not, update the - -existing configuration. That said, support for read and update is a bit hit or miss: for example, to be able to read - -and update AWS resources, Ansible requires that you manually give each resource a unique name or tag, which is easy - -to do with just a handful of resources, but becomes more challenging with thousands; Ansible does better at reading - -and updating the state of a server (which is what it was really designed to do), but only if you use tasks that - -are idempotent, as you’ll see below. Finally, most configuration management tools don’t support delete (which is - -why you had to undeploy the EC2 instance manually).

- -
- -
Scale
- -
- -

Most configuration management tools are designed specifically for managing multiple remote servers. For - -example, you could easily update the preceding Ansible code to deploy 3 EC2 instances, and Ansible will automatically - -configure all 3 to run the web server (you’ll see an example of this in Part 3). Moreover, some - -configuration management tools have built-in support for deployment strategies: for example, Ansible has built-in - -support for rolling deployments, so if you deployed 20 servers, then updated the configuration in the Ansible role - -(e.g., to deploy a new version of the app) and re-ran Ansible, it could roll out the change in batches (e.g., - -updating 5 servers at a time), with zero downtime.

- -
- -
Idempotency and error handling
- -
- -

Some tasks you do with configuration management tools are idempotent, some are not. For example, the yum task in - -Ansible is idempotent: it only installs the software if it’s not installed already, so it’s safe to re-run that task - -as many times as you want. On the other hand, arbitrary shell tasks may or may not be idempotent, depending on what - -shell commands you execute. For example, the preceding playbook uses a shell task to directly execute the node - -binary, which is not idempotent: after the first run, subsequent runs of this playbook will fail, as the Node.js - -app is already running and listening on port 8080, so you’ll get an error about conflicting ports. In - -Part 3, you’ll see a better way of running apps with Ansible that is idempotent.

- -
- -
Consistency
- -
- -

Most configuration management tools enforce a consistent, predictable structure to the code, including documentation, - -file layout, clearly named parameters, secrets management, and so on. While every developer organizes their ad hoc - -scripts in a different way, most configuration management tools come with a set of conventions that makes it easier - -to navigate and maintain the code, as you saw with the folder structure for Ansible roles.

- -
- -
Verbosity
- -
- -

Most configuration management tools provide a DSL for specifying server configuration that is more - -concise than the equivalent in an ad hoc script. For example, you saw Ansible’s YAML-based DSL. At first, it might - -not seem like the code is any shorter than the Bash script: in fact, it’s roughly equal, with around 80 lines of - -Bash code (script to deploy EC2 instance plus user data script) versus about 80 lines of YAML with Ansible (playbook - -plus role). However, the 80 lines of Ansible code are doing considerably more: as just mentioned, the Ansible code - -supports most CRUD operations, idempotency, scaling operations to many servers, and consistent code structure. An ad - -hoc script that supported all of this would be many times the length.

- -
- -
- -
- -
- -

Configuration management tools brought a number of advantages over ad hoc scripts, but they also introduced their - -own drawbacks. One big drawback is that some configuration management tools have a considerable setup cost: e.g., you - -may need to set up master servers and ways to connect to all your other servers (agents or SSH). A second big drawback - -is that most configuration management tools were designed for a mutable infrastructure paradigm: this can be - -problematic due to configuration drift, where over time, your long-running servers can build up unique histories of - -changes, so each server is subtly different from the others, which can make it hard to reason about what’s deployed and - -debug issues.

- -
- -
- -

As cloud and virtualization becomes more and more ubiquitous, it’s becoming more common to use an immutable - -infrastructure paradigm, where instead of long-running physical servers, you use short-lived virtual servers that you - -replace every time you do an update. This is inspired by functional programming, where variables are immutable, so - -after you’ve set a variable to a value, you can never change that variable again, and if you need to update something, - -you create a new variable. Because variables never change, it’s a lot easier to reason about your code.

- -
- -
- -

The idea behind immutable infrastructure is similar: once you’ve deployed a server, you never make changes to it again. - -If you need to update something, such as deploying a new version of your code, you deploy a new server. Because - -servers never change after being deployed, it’s a lot easier to reason about what’s deployed. The typical analogy used - -here (my apologies to vegetarians and animal lovers), is cattle vs pets: with mutable - -infrastructure, you treat your servers like pets, giving each one its own unique name, taking care of it, and trying to - -keep it alive as long as possible; with immutable infrastructure, you treat your servers like cattle, each one more or - -less indistinguishable from the others, with random or sequential IDs instead of names, and you kill them off and - -replace them regularly.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #2
- -
- -

Configuration management tools are great for managing the configuration of servers, but not for deploying the servers - -themselves, or other infrastructure.

- -
- -
- -
- -
- -

While it’s possible to use configuration management tools with immutable infrastructure patterns, it’s not what they - -were originally designed for, and that led to new approaches, as discussed in the next section.

- -
- -
- -
- -
- -

Server Templating Tools

- -
- -

An alternative to configuration management that has been growing in popularity recently are server templating tools - -such as Docker, Packer, and Vagrant. - -Instead of launching a bunch of servers and configuring them by running the same code on each one, the idea behind - -server templating tools is to create an image of a server that captures a fully self-contained "snapshot" of the - -operating system (OS), the software, the files, and all other relevant details. You can then use some other IaC tool - -(e.g., provisioning tools, as you’ll see in the next section) to install that image on all of your servers.

- -
- -
- -
- -The two main types of images: VMs on the left, and containers on the right. VMs virtualize the hardware, whereas containers virtualize only user space. - -
- -
Figure 20. The two main types of images: VMs, on the left, and containers, on the right. VMs virtualize the hardware, whereas containers virtualize only user space.
- -
- -
- -

As shown in Figure 20, there are two broad categories of tools for working with images:

- -
- -
- -
- -
Virtual machines
- -
- -

A virtual machine emulates an entire computer system, including the hardware. You run a hypervisor, such as VMware, - -VirtualBox, or Parallels, to virtualize (i.e., simulate) the underlying CPU, memory, hard drive, and networking.

- -
- -

The benefit of this is that any VM image that you run on top of the hypervisor can see only the virtualized hardware, - -so it’s fully isolated from the host machine and any other VM images, and it will run exactly the same way in all - -environments (e.g., your computer, a QA server, a production server). The drawback is that virtualizing all this - -hardware and running a totally separate OS for each VM incurs a lot of overhead in terms of CPU usage, memory usage, - -and startup time. You can define VM images as code using tools such as Packer and Vagrant.

- -
- -
- -
Containers
- -
- -

A container emulates the user space of an OS.[12] You run a container engine, such as Docker or cri-o, to create isolated processes, memory, mount - -points, and networking.

- -
- -

The benefit of this is that any container you run on top of the container engine can see only its own user space, so - -it’s isolated from the host machine and other containers, and will run exactly the same way in all environments (your - -computer, a QA server, a production server, etc.). The drawback is that all of the containers running on a single - -server share that server’s OS kernel and hardware, so it’s much more difficult to achieve the level of isolation and - -security you get with a VM.[13] However, because the kernel - -and hardware are shared, your containers can boot up in milliseconds and have virtually no CPU or memory overhead. You - -can define container images as code using tools such as Docker; you’ll see an example of how to use Docker in - -Part 3.

- -
- -
- -
- -
- -
- -

Example: Create a VM Image Using Packer

- -
- -

As an example, let’s take a look at using Packer to create a VM image for AWS called an Amazon Machine Image (AMI) - -(you’ll see an example of how to create container images using Docker in Part 3). First, create a - -folder called packer:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch2/packer
-
-$ cd ch2/packer
- -
- -
- -
- -

Next, create a Packer template called sample-app.pkr.hcl, with the contents shown in Example 11:

- -
- -
- -
Example 11. Packer template to create AMI (ch2/packer/sample-app.pkr.hcl)
- -
- -
- -
- -
packer {
-
-  required_plugins {
-
-    amazon = {
-
-      version = ">= 1.3.1"
-
-      source  = "github.com/hashicorp/amazon"
-
-    }
-
-  }
-
-}
-
-
-
-
-
-source "amazon-ebs" "amazon_linux" {                  # (1)
-
-  ami_name        = "sample-app-packer-${uuidv4()}"
-
-  ami_description = "Amazon Linux 2023 AMI with a Node.js sample app."
-
-  instance_type   = "t2.micro"
-
-  region          = "us-east-2"
-
-  source_ami      = "ami-0900fe555666598a2"
-
-  ssh_username    = "ec2-user"
-
-}
-
-
-
-build {                                               # (2)
-
-  sources = ["source.amazon-ebs.amazon_linux"]
-
-
-
-  provisioner "file" {                                # (3)
-
-    source      = "app.js"
-
-    destination = "/home/ec2-user/app.js"
-
-  }
-
-
-
-  provisioner "shell" {                               # (4)
-
-    inline = [
-
-      "curl -fsSL https://rpm.nodesource.com/setup_21.x | sudo bash -",
-
-      "sudo yum install -y nodejs"
-
-    ]
-
-    pause_before = "30s"
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

With Packer, you create templates using the HashiCorp Configuration Language (HCL) in files with a .hcl extension. - -The preceding Packer template does the following:

- -
- -
- -
    - -
  1. - -

    Source images: Packer will start a server running each source image you specify. The preceding code will - -result in Packer starting an EC2 instance running the Amazon Linux AMI you saw in the Bash and Ansible examples.

    - -
  2. - -
  3. - -

    Build steps: Packer then connects to the server (e.g., via SSH) and runs the build steps in the order - -you specified. When all the build steps have finished, Packer will take a snapshot of the server and shut the - -server down. The preceding example runs two build steps, as described next, and the snapshot it creates is an AMI - -that has everything installed and configured to run the sample app.

    - -
  4. - -
  5. - -

    File provisioner: The first build step is to run a file provisioner, which copies files to the server. The - -preceding examples use this to copy the Node.js sample app code in app.js to the server.

    - -
  6. - -
  7. - -

    Shell provisioner: The second build step is to run a shell provisioner, which executes shell commands on the - -server. The preceding example uses this to install Node.js.

    - -
  8. - -
- -
- -
- -

So this Packer template is nearly identical to the Bash script and Ansible playbook, except for the following two - -differences:

- -
- -
- -
    - -
  • - -

    The result of running Packer is not a server running your app, but the image of a server: the preceding example - -creates an AMI that has Node.js and the sample app installed. The idea is to use other IaC tools to launch one or - -more servers running that image: you’ll see an example later in this blog post of using OpenTofu to - -launch an EC2 instance running this AMI.

    - -
  • - -
  • - -

    The Packer template installs and configures everything, but it doesn’t actually run your app: unlike the Bash script - -and Ansible playbook, the preceding example does not run node.js app.js. That command should be executed when you - -deploy the AMI, which you’ll also see later in this post.

    - -
  • - -
- -
- -
- -

If you want to try the Packer template out, install Packer, - -authenticate to AWS as described in Authenticating to AWS on the command line, and run the following commands:

- -
- -
- -
- -
$ packer init
-
-$ packer build sample-app.pkr.hcl
- -
- -
- -
- -

The first command, packer init, installs any plugins used in this Packer template: Packer can create images for - -many cloud providers—e.g., AWS, GCP, Azure, etc.—and the code for each of these providers lives not in the Packer binary - -itself, but in separate plugins that the init command can install. The second command, packer build, kicks off the - -build process. When the build is done, which typically takes 3-5 minutes, you should see some log output that looks - -like this:

- -
- -
- -
- -
==> Builds finished. The artifacts of successful builds are:
-
---> amazon-ebs.amazon_linux: AMIs were created:
-
-us-east-2: ami-0ee5157dd67ca79fc
- -
- -
- -
- -

Congrats, you’re now using a server templating tool to manage your server configuration as code! The ami-xxx value is - -the ID of the AMI that was created from this template. Save the value somewhere, as later in this - -post, you’ll see an example of how to deploy this AMI.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for using Packer:

- -
- -
- -
    - -
  • - -

    What happens if you run packer build on this template a second time? Why?

    - -
  • - -
  • - -

    Figure out how to update the Packer template so it builds images not only for AWS, but also images you can run on - -other clouds (e.g., Azure or GCP) or on your own computer (e.g., VirtualBox or Docker).

    - -
  • - -
- -
- -
- -
- -
- -
- -

How Server Templating Tools Stack Up

- -
- -

So, how do server templating tools stack up using the IaC category criteria from before?

- -
- -
- -
- -
CRUD
- -
- -

Server templating only needs to support the create operation in CRUD. This is because server templating is a key - -component of the shift to immutable infrastructure: if you need to roll out a change, instead of updating an existing - -server, you use your server templating tool to create a new image, and deploy that image on a new server. So, with - -server templating, you’re always creating totally new images; there’s never a reason to read, update, or delete. That - -said, server templating tools aren’t used in isolation; you need some other tool to deploy these images (e.g., - -a provisioning tool, as you’ll see shortly), and you typically want that tool to support all CRUD operations.

- -
- -
Scale
- -
- -

Server templating tools scale very well, as you can create an image once, and then roll that same image out - -to 1 server or 1,000 servers, as necessary.

- -
- -
Idempotency and error handling
- -
- -

Server templating tools are idempotent by design: since you create a new image every time, the tool just executes the - -exact same steps every time; if you hit an error part of the way through, just re-run, and try again.

- -
- -
Consistency
- -
- -

Most server templating tools enforce a consistent, predictable structure to the code, including documentation, - -file layout, clearly named parameters, secrets management, and so on.

- -
- -
Verbosity
- -
- -

Because server templating tools don’t have to deal with most CRUD operations and are idempotent "for free," the - -amount of code you need is typically pretty small. Moreover, server templating tools provide concise DSLs. As a - -result, the code tends to be fairly short.

- -
- -
- -
- -
- -

Note that the different server templating tools have slightly different purposes. Packer is typically used to create - -images that you run directly on top of production servers, such as an AMI that you run in your production AWS account. - -Vagrant is typically used to create images that you run on your development computers, such as a VirtualBox image that - -you run on your Mac or Windows laptop. Docker is typically used to create images of individual applications. You can - -run the Docker images on production or development computers, as long as some other tool has configured that computer - -with the Docker Engine.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #3
- -
- -

Server templating tools are great for managing the configuration of servers with immutable infrastructure practices.

- -
- -
- -
- -
- -

As I mentioned a few times, server templating tools are powerful, but they don’t work by themselves. You need another - -tool to actually deploy and manage the images you create, such as provisioning tools, which are the focus of the next - -section.

- -
- -
- -
- -
- -

Provisioning Tools

- -
- -

Whereas configuration management and server templating define the code that runs on each server, - -provisioning tools such as OpenTofu, Terraform, - -CloudFormation, OpenStack Heat, and - -Pulumi are responsible for creating the servers themselves. In fact, you can use provisioning - -tools to create not only servers but also databases, caches, load balancers, queues, monitoring, subnet configurations, - -firewall settings, routing rules, TLS certificates, and many other aspects of your infrastructure.

- -
- -
- -

Under the hood, most provisioning tools work by translating the code you write into API calls to the cloud provider - -you’re using: e.g., if you write OpenTofu code to create a server in AWS (which you will do in the next section), - -when you run OpenTofu, it will parse your code, and based on the configuration you specify, make a number of API calls - -to AWS to create an EC2 instance.

- -
- -
- -

That means that, unlike with configuration management tools, you don’t have to do any extra work to set up master - -servers or connectivity: all of this is handled using the APIs and authentication mechanisms already provided by - -the cloud you’re using.

- -
- -
- -

Example: Deploy an EC2 Instance Using OpenTofu

- -
- - - - - - - - - - - -
- -
Note
- -
- -
Terraform versus OpenTofu
- -
- -

Terraform is a popular provisioning tool that HashiCorp open sourced in 2014 under the Mozilla Public License (MPL) - -2.0. In 2023, HashiCorp switched Terraform to the non-open source Business Source License (BSL). As a result, - -the community created OpenTofu, a fork of Terraform that remains open source under the MPL 2.0 license, and is managed - -by the Linux Foundation. I prefer to use open source tools whenever possible, so this blog post series will use - -OpenTofu for all example code, but most of the examples should work with Terraform as well.

- -
- -
- -
- -
- -

As an example of using a provisioning tool, lets create an OpenTofu module that can deploy an EC2 instance. You write - -OpenTofu modules in HCL (the same language you used with Packer), in configuration files with a .tf extension. - -OpenTofu will find all files with the .tf extension in a folder, so you can name the files whatever you want, but - -there are some standard conventions, such as putting the main resources in main.tf, input variables in - -variables.tf, and output variables in outputs.tf.

- -
- -
- -

First, create a new tofu/ec2-instance folder for the module:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch2/tofu/ec2-instance
-
-$ cd ch2/tofu/ec2-instance
- -
- -
- -
- -

Within the tofu/ec2-instance folder, create a file called main.tf, with the contents shown in - -Example 12:

- -
- -
- -
Example 12. OpenTofu module to deploy an EC2 instance (ch2/tofu/ec2-instance/main.tf)
- -
- -
- -
- -
provider "aws" {                                               # (1)
-
-  region = "us-east-2"
-
-}
-
-
-
-resource "aws_security_group" "sample_app" {                   # (2)
-
-  name        = "sample-app-tofu"
-
-  description = "Allow HTTP traffic into the sample app"
-
-}
-
-
-
-resource "aws_security_group_rule" "allow_http_inbound" {      # (3)
-
-  type              = "ingress"
-
-  protocol          = "tcp"
-
-  from_port         = 8080
-
-  to_port           = 8080
-
-  security_group_id = aws_security_group.sample_app.id
-
-  cidr_blocks       = ["0.0.0.0/0"]
-
-}
-
-
-
-resource "aws_instance" "sample_app" {                         # (4)
-
-  ami                    = var.ami_id                          # (5)
-
-  instance_type          = "t2.micro"
-
-  vpc_security_group_ids = [aws_security_group.sample_app.id]
-
-  user_data              = file("${path.module}/user-data.sh") # (6)
-
-
-
-  tags = {
-
-    Name = "sample-app-tofu"
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

The code in main.tf does something very similar to the Bash script and Ansible playbook from earlier in the - -blog post:

- -
- -
- -
    - -
  1. - -

    Configure the AWS provider: OpenTofu works with many providers, such as AWS, GCP, Azure, and so on. This code - -configures the AWS provider to use the us-east-2 (Ohio) region. AWS has datacenters all over the world, grouped - -into regions. An AWS region is a separate geographic area, such as us-east-2 (Ohio), eu-west-1 (Ireland), and - -ap-southeast-2 (Sydney). Within each region, there are multiple isolated datacenters known as Availability - -Zones (AZs), such as us-east-2a, us-east-2b, and so on.[14] There are - -many other settings you can configure on this provider, but for now, let’s keep it simple.

    - -
  2. - -
  3. - -

    Create a security group: For each type of provider, there are many different kinds of resources that you can - -create, such as servers, databases, and load balancers. The general syntax for creating a resource in OpenTofu is - -as follows:

    - -
    - -
    - -
    resource "<PROVIDER>_<TYPE>" "<NAME>" {
    -
    -  [CONFIG ...]
    -
    -}
    - -
    - -
    - -
    - -

    where PROVIDER is the name of a provider (e.g., aws), TYPE is the type of resource to create in that provider - -(e.g., instance), NAME is an identifier you can use throughout the OpenTofu code to refer to this - -resource (e.g., my_instance), and CONFIG consists of one or more arguments that are specific to - -that resource.

    - -
    - -
    - -

    The preceding code creates an aws_security_group resource, which, as you can guess from the name, is a security group - -that controls what network traffic can go in and out of the EC2 instance.

    - -
    - -
  4. - -
  5. - -

    Allow HTTP requests: Use the aws_security_group_rule resource to add a rule to the security group from (2) that - -allows inbound HTTP requests on port 8080.

    - -
  6. - -
  7. - -

    Deploy an EC2 instance: Use the aws_instance resource to create an EC2 instance that uses the security group - -and has the Name tag set to "sample-app-tofu."

    - -
  8. - -
  9. - -

    Set the AMI: The EC2 instance sets the AMI to var.ami_id. This is a reference to an input variable defined - -in variables.tf, as shown in Example 13.

    - -
  10. - -
  11. - -

    Set the user data: The EC2 instance configures a user data script by reading in the user-data.sh file shown in - -Example 14.

    - -
  12. - -
- -
- -
- -

In the same folder as main.tf, create a file called variables.tf to define input variables, as shown in - -Example 13:

- -
- -
- -
Example 13. Input variables for the OpenTofu module (ch2/tofu/ec2-instance/variables.tf)
- -
- -
- -
- -
variable "ami_id" {
-
-  description = "The ID of the AMI to run."
-
-  type        = string
-
-}
- -
- -
- -
- -
- -
- -

As you’ll see shortly, this input variable will allow you to pass in the ID of a custom AMI to run in the EC2 instance: - -namely, the AMI you built from the Packer template in the previous section.

- -
- -
- -

You should also create a file called user-data.sh, which contains the user data script shown in - -Example 14:

- -
- -
- -
Example 14. User data script for the OpenTofu module (ch2/tofu/ec2-instance/user-data.sh)
- -
- -
- -
- -
#!/usr/bin/env bash
-
-nohup node /home/ec2-user/app.js &
- -
- -
- -
- -
- -
- -

Note how this user data script is much shorter than the one you saw in the Bash code. That’s because all the - -dependencies (Node.js) and code (app.js) are already installed in the AMI by Packer. So the only thing this user data - -script does is start the sample app. This is a more idiomatic way to use user data.

- -
- -
- -

Finally, create a file called outputs.tf with the contents shown in Example 15:

- -
- -
- -
Example 15. Output variables for the OpenTofu module (ch2/tofu/ec2-instance/outputs.tf)
- -
- -
- -
- -
output "instance_id" {
-
-  description = "The ID of the EC2 instance"
-
-  value       = aws_instance.sample_app.id
-
-}
-
-
-
-output "security_group_id" {
-
-  description = "The ID of the security group"
-
-  value       = aws_security_group.sample_app.id
-
-}
-
-
-
-output "public_ip" {
-
-  description = "The public IP of the EC2 instance"
-
-  value       = aws_instance.sample_app.public_ip
-
-}
- -
- -
- -
- -
- -
- -

The preceding code defines output variables, which you can use to log and share values between modules. The preceding - -code defines output variables for the EC2 instance ID, security group ID, and EC2 instance public IP.

- -
- -
- -

If you want to try the OpenTofu code out, install OpenTofu, authenticate to - -AWS as described in Authenticating to AWS on the command line, and run the following command:

- -
- -
- -
- -
$ tofu init
- -
- -
- -
- -

The init command installs any providers used in this Tofu configuration: OpenTofu works with many - -cloud providers, including AWS, which is used in the preceding example, as well as Azure, GCP, Alibaba Cloud, OCI, - -and so on. The code for each provider doesn’t live in the tofu binary, but in separate provider binaries, which you - -download via the init command.

- -
- -
- -

Once init has completed, run the apply command to start the deployment process:

- -
- -
- -
- -
$ tofu apply
- -
- -
- -
- -

The first thing the apply command will do is prompt you for the ami_id value:

- -
- -
- -
- -
var.ami_id
-
-  The ID of the AMI to run.
-
-
-
-  Enter a value:
- -
- -
- -
- -

You can paste in the ID of the AMI you built using Packer in the previous section and hit Enter. Alternatively, if you - -don’t want to be prompted interactively, you can instead use the -var flag when running apply:

- -
- -
- -
- -
$ tofu apply -var ami_id=ami-0ee5157dd67ca79fc
- -
- -
- -
- -

You could also use an environment variable: you can set the value for any input variable foo using the environment - -variable TF_VAR_foo:

- -
- -
- -
- -
$ export TF_VAR_ami_id=ami-0ee5157dd67ca79fc
-
-$ tofu apply
- -
- -
- -
- -

Another option is to define the values for your variables in a terraform.tfvars file, as shown in - -Example 16:

- -
- -
- -
Example 16. An OpenTofu variables file (ch2/tofu/ec2-instance/terraform.tfvars)
- -
- -
- -
- -
ami_id = "ami-0ee5157dd67ca79fc"
- -
- -
- -
- -
- -
- -

If you define this file and re-run tofu apply, it’ll automatically find the ami_id value, and won’t prompt you for - -it interactively.

- -
- -
- -

The second thing the apply command will do is show you the execution plan (just plan for short), which will look - -something like this (truncated for readability):

- -
- -
- -
- -
OpenTofu will perform the following actions:
-
-
-
-  # aws_instance.sample_app will be created
-
-  + resource "aws_instance" "sample_app" {
-
-      + ami                                  = "ami-0ee5157dd67ca79fc"
-
-      + instance_type                        = "t2.micro"
-
-      ... (truncated) ...
-
-    }
-
-
-
-  # aws_security_group.sample_app will be created
-
-  + resource "aws_security_group" "sample_app" {
-
-      + description            = "Allow HTTP traffic into the sample app"
-
-      + name                   = "sample-app-tofu"
-
-      ... (truncated) ...
-
-    }
-
-
-
-  # aws_security_group_rule.allow_http_inbound will be created
-
-  + resource "aws_security_group_rule" "allow_http_inbound" {
-
-      + from_port                = 8080
-
-      + protocol                 = "tcp"
-
-      + to_port                  = 8080
-
-      + type                     = "ingress"
-
-      ... (truncated) ...
-
-    }
-
-
-
-Plan: 3 to add, 0 to change, 0 to destroy.
-
-
-
-Changes to Outputs:
-
-  + instance_id       = (known after apply)
-
-  + public_ip         = (known after apply)
-
-  + security_group_id = (known after apply)
-
-
-
-Do you want to perform these actions?
-
-  OpenTofu will perform the actions described above.
-
-  Only 'yes' will be accepted to approve.
-
-
-
-  Enter a value:
- -
- -
- -
- -

The plan lets you see what OpenTofu will do before actually making any changes, and prompts you for confirmation before - -continuing. This is a great way to sanity-check your code before unleashing it onto the world. The plan output is - -similar to the output of the diff command that is part of Unix, Linux, and git: anything with a plus sign (+) will - -be created, anything with a minus sign (–) will be deleted, and anything with a tilde sign (~) will be modified - -in place. Every time you run apply, OpenTofu will show you this execution plan; you can also generate the execution - -plan without applying any changes by running tofu plan instead of tofu apply.

- -
- -
- -

In the preceding plan output, you can see that OpenTofu is planning on creating an EC2 Instance, security group, and - -security group rule, which is exactly what you want. Type yes and hit Enter to let OpenTofu proceed. You should see - -log output that looks like this:

- -
- -
- -
- -
Do you want to perform these actions?
-
-  OpenTofu will perform the actions described above.
-
-  Only 'yes' will be accepted to approve.
-
-
-
-  Enter a value: yes
-
-
-
-aws_security_group.sample_app: Creating...
-
-aws_security_group.sample_app: Creation complete after 2s
-
-aws_security_group_rule.allow_http_inbound: Creating...
-
-aws_security_group_rule.allow_http_inbound: Creation complete after 0s
-
-aws_instance.sample_app: Creating...
-
-aws_instance.sample_app: Still creating... [10s elapsed]
-
-aws_instance.sample_app: Still creating... [20s elapsed]
-
-aws_instance.sample_app: Creation complete after 22s
-
-
-
-Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
-
-
-
-Outputs:
-
-
-
-instance_id = "i-0a4c593f4c9e645f8"
-
-public_ip = "3.138.110.216"
-
-security_group_id = "sg-087227914c9b3aa1e"
- -
- -
- -
- -

You can see the three output variables from outputs.tf at the end, including the public IP address in public_ip. - -Wait a minute or two for the EC2 instance to boot up, copy the public_ip, open http://<public_ip>:8080 in your web - -browser, and you should see the familiar "Hello, World!" yet again.

- -
- -
- -

Congrats, you’re now using a provisioning tool to manage your infrastructure as code!

- -
- -
- -
- -

Example: Update and Destroy Infrastructure Using OpenTofu

- -
- -

One of the big advantages of provisioning tools is that they support not just deploying infrastructure, but also - -updating and destroying it. For example, now that you’ve deployed an EC2 instance using OpenTofu, make a change to the - -configuration, such as adding a new Test tag with the value "update," as shown in - -Example 17:

- -
- -
- -
Example 17. Update the tags on the EC2 instance (ch2/tofu/ec2-instance/main.tf)
- -
- -
- -
- -
resource "aws_instance" "sample_app" {
-
-
-
-  # ... (other params omitted) ...
-
-
-
-  tags = {
-
-    Name = "sample-app-tofu"
-
-    Test = "update"
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

Run the apply command again, and you should see output that looks like this (truncated for readability):

- -
- -
- -
- -
$ tofu apply
-
-
-
-aws_security_group.sample_app: Refreshing state...
-
-aws_security_group_rule.allow_http_inbound: Refreshing state...
-
-aws_instance.sample_app: Refreshing state...
-
-
-
-OpenTofu used the selected providers to generate the following execution plan.
-
-Resource actions are indicated with the following symbols:
-
-  ~ update in-place
-
-
-
-OpenTofu will perform the following actions:
-
-
-
-  # aws_instance.sample_app will be updated in-place
-
-  ~ resource "aws_instance" "sample_app" {
-
-        id                                   = "i-0738de27643533e98"
-
-      ~ tags                                 = {
-
-            "Name" = "sample-app-tofu"
-
-          + "Test" = "update"
-
-        }
-
-        # (31 unchanged attributes hidden)
-
-
-
-        # (8 unchanged blocks hidden)
-
-    }
-
-
-
-Plan: 0 to add, 1 to change, 0 to destroy.
-
-
-
-Do you want to perform these actions?
-
-  OpenTofu will perform the actions described above.
-
-  Only 'yes' will be accepted to approve.
-
-
-
-  Enter a value:
- -
- -
- -
- -

Every time you run OpenTofu, it records information about what infrastructure it created in an OpenTofu state file. - -OpenTofu manages state using backends; if you don’t specify a backend, the default is to use the local backend, - -which stores state locally in a terraform.tfstate file in the same folder as the OpenTofu module (you’ll see how to - -use other backends in Part 5). This file contains a custom JSON format that records a mapping from the - -OpenTofu resources in your configuration files to the representation of those resources in the real world.

- -
- -
- -

For example, when you run apply the first on the tofu module, OpenTofu records in the state file the IDs of - -the EC2 instance, security group, security group rules, and any other resources it created. When you run apply again, - -you can see "Refreshing state" in the log output, which is OpenTofu updating itself on the latest status of the world. - -As a result, the new plan output that you see is the diff between what’s currently deployed in the real world and - -what’s in your OpenTofu code. The preceding diff shows that OpenTofu wants to create a single tag called Test, which is - -exactly what you want, so type yes and hit Enter, and you’ll see OpenTofu perform an update operation, updating the - -EC2 instance with your new tag.

- -
- -
- -

When you’re done testing, you can run tofu destroy to have OpenTofu undeploy everything it deployed earlier, which - -should give you log output that looks something like this (log output truncated for readability):

- -
- -
- -
- -
$ tofu destroy
-
-
-
-OpenTofu will perform the following actions:
-
-
-
-  # aws_instance.sample_app will be destroyed
-
-  - resource "aws_instance" "sample_app" {
-
-      - ami                                  = "ami-0ee5157dd67ca79fc" -> null
-
-      - associate_public_ip_address          = true -> null
-
-      - id                                   = "i-0738de27643533e98" -> null
-
-      ... (truncated) ...
-
-    }
-
-
-
-  # aws_security_group.sample_app will be destroyed
-
-  - resource "aws_security_group" "sample_app" {
-
-      - id                     = "sg-066de0b621838841a" -> null
-
-      ... (truncated) ...
-
-    }
-
-
-
-  # aws_security_group_rule.allow_http_inbound will be destroyed
-
-  - resource "aws_security_group_rule" "allow_http_inbound" {
-
-      - from_port              = 8080 -> null
-
-      - protocol               = "tcp" -> null
-
-      - to_port                = 8080 -> null
-
-      ... (truncated) ...
-
-    }
-
-
-
-Plan: 0 to add, 0 to change, 3 to destroy.
-
-
-
-Changes to Outputs:
-
-  - instance_id       = "i-0738de27643533e98" -> null
-
-  - public_ip         = "18.188.174.48" -> null
-
-  - security_group_id = "sg-066de0b621838841a" -> null
-
-
-
-Do you really want to destroy all resources?
-
-  OpenTofu will destroy all your managed infrastructure, as shown above.
-
-  There is no undo. Only 'yes' will be accepted to confirm.
-
-
-
-  Enter a value:
- -
- -
- -
- -

When you run destroy, OpenTofu shows you a destroy plan, which tells you about all the resources it’s about to - -delete. This gives you one last chance to check that you really want to delete this stuff before you actually do it. - -It goes without saying that you should rarely, if ever, run destroy in a production environment—there’s no "undo" - -for the destroy command. If everything looks good, type yes and hit Enter, and in a minute or two, OpenTofu will - -clean up everything it deployed.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for using OpenTofu:

- -
- -
- -
    - -
  • - -

    How would you have to tweak the OpenTofu code if you wanted to run multiple EC2 instances?

    - -
  • - -
  • - -

    Figure out how to configure the EC2 instance with an EC2 key pair so you can connect to it over SSH.

    - -
  • - -
- -
- -
- -
- -
- -
- -

Example: Deploy an EC2 Instance Using an OpenTofu Module

- -
- -

One of OpenTofu’s more powerful features is that the modules are reusable. In a general - -purpose programming language (e.g., JavaScript, Python, Java), you put reusable code in a function; in OpenTofu, you - -put reusable code in a module. You can then use that module multiple times to spin up many copies of the same - -infrastructure, without having to copy/paste the code.

- -
- -
- -

So far, you’ve been using the ec2-instance module as a root module, which is any module on which you run apply - -directly. However, you can also use it as a resuable module, which is a module meant to be included in other modules - -(e.g., in other root modules) as a means of code re-use.

- -
- -
- -

Let’s give it a shot. First, create a folder called modules to store your reusable modules:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch2/tofu/modules
- -
- -
- -
- -

Next, move the ec2-instance module into the modules folder:

- -
- -
- -
- -
$ mv ch2/tofu/ec2-instance ch2/tofu/modules/ec2-instance
- -
- -
- -
- -

Create a folder called live to store your root modules, as these modules configure your live environments:

- -
- -
- -
- -
$ mkdir -p ch2/tofu/live
- -
- -
- -
- -

Inside the live folder, create a new folder called sample-app, which will house the new root module you’ll use - -to deploy the sample app:

- -
- -
- -
- -
$ mkdir -p ch2/tofu/live/sample-app
-
-$ cd ch2/tofu/live/sample-app
- -
- -
- -
- -

In the live/sample-app folder, create a main.tf file with the initial contents shown in - -Example 18:

- -
- -
- -
Example 18. Basic module usage (ch2/tofu/live/sample-app/main.tf)
- -
- -
- -
- -
module "sample_app_1" {
-
-  source = "../../modules/ec2-instance"
-
-
-
-  # TODO: fill in with your own AMI ID!
-
-  ami_id = "ami-09a9ad4735def0515"
-
-}
- -
- -
- -
- -
- -
- -

To use one module from another, all you need is the following:

- -
- -
- -
    - -
  • - -

    A module block.

    - -
  • - -
  • - -

    A source parameter that contains the file path of the module you want to use: the preceding code sets source to - -the relative file path of the ec2-instance module in the modules folder.

    - -
  • - -
  • - -

    If the module defines input variables, you can set those as parameters within the module block. The ec2-instance - -module defines an input variable called ami_id, which you’ll need to set to the ami_id to the ID of the AMI you - -built in the server templating section earlier in this blog post.

    - -
  • - -
- -
- -
- -

If you were to run apply on this code, it would use the ec2-instance module code to create a single EC2 instance. - -But the beauty of code reuse is that you can use the module multiple times, as shown in - -Example 19:

- -
- -
- -
Example 19. Using a module multiple times (ch2/tofu/live/sample-app/main.tf)
- -
- -
- -
- -
module "sample_app_1" {
-
-  source = "../../modules/ec2-instance"
-
-
-
-  # TODO: fill in with your own AMI ID!
-
-  ami_id = "ami-09a9ad4735def0515"
-
-}
-
-
-
-module "sample_app_2" {
-
-  source = "../../modules/ec2-instance"
-
-
-
-  # TODO: fill in with your own AMI ID!
-
-  ami_id = "ami-09a9ad4735def0515"
-
-}
- -
- -
- -
- -
- -
- -

This code uses two module blocks, so if you run apply on it, it will create two EC2 instances. If you had three - -module blocks, it would create three EC2 instances; four module blocks would create four EC2 instances; and so on. - -And, of course, you can mix and match different modules, include modules in other modules, and so on. It’s not unusual - -for modules to be reused dozens or hundreds of times across a company, so that you put in the work to create - -a module that meets your company’s needs once, and then use it over and over again.

- -
- -
- -

However, there are two changes you need to make to the ec2-instance module in order for it to work effectively as a - -reusable module.

- -
- -
- -

The first change is to namespace all the resources created by the ec2-instance module. Currently, it hard-codes all - -names, such as the name of the security group, to "sample-app-tofu." AWS requires all security group names to be unique, - -so if you ran apply on these two module blocks, you’d get an error due to the name conflicts. To fix this, - -introduce a name input variable in modules/ec2-instance/variables.tf, as shown in Example 20:

- -
- -
- -
Example 20. Add a name input variable to the ec2-instance module (ch2/tofu/modules/ec2-instance/variables.tf)
- -
- -
- -
- -
variable "name" {
-
-  description = "The base name for the instance and all other resources"
-
-  type        = string
-
-}
- -
- -
- -
- -
- -
- -

Next, update the ec2-instance module to use the name input variable everywhere that was hard-coded to - -"sample-app-tofu," including the aws_security_group resource and the tags in the aws_instance resource, as shown - -in Example 21:

- -
- -
- -
Example 21. Use the name input variable in the ec2-instance module (ch2/tofu/modules/ec2-instance/main.tf)
- -
- -
- -
- -
resource "aws_security_group" "sample_app" {
-
-  name        = var.name
-
-  description = "Allow HTTP traffic into ${var.name}"
-
-}
-
-
-
-resource "aws_instance" "sample_app" {
-
-
-
-  # ... (other params omitted) ...
-
-
-
-  tags = {
-
-    Name = var.name
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

Now, back in sample-app/main.tf, you can set the name parameter to different values in each of the module - -blocks, as shown in Example 22:

- -
- -
- -
Example 22. Set the name input to different values in each module block (ch2/tofu/live/sample-app/main.tf)
- -
- -
- -
- -
module "sample_app_1" {
-
-  source = "../../modules/ec2-instance"
-
-
-
-  # TODO: fill in with your own AMI ID!
-
-  ami_id = "ami-09a9ad4735def0515"
-
-
-
-  name = "sample-app-tofu-1"
-
-}
-
-
-
-module "sample_app_2" {
-
-  source = "../../modules/ec2-instance"
-
-
-
-  # TODO: fill in with your own AMI ID!
-
-  ami_id = "ami-09a9ad4735def0515"
-
-
-
-  name = "sample-app-tofu-2"
-
-}
- -
- -
- -
- -
- -
- -

Now you’ll get two EC2 instances, one with all resources named "sample-app-tofu-1," and the other with all resources - -named "sample-app-tofu-2."

- -
- -
- -

The second change is to remove the provider block from the ec2-instance module. Having a provider block inside - -a module isn’t wrong per se, but typically, reusable modules do not declare provider blocks, and instead inherit - -those from the root module. This allows the provider block to be configured in different ways in different usages of - -the module: e.g., one usage might configure the provider to use a different region, another usage might configure it - -to a different AWS account, and so on. All you need to do is to move the provider block from the ec2-instance - -(reusable) module to the sample-app (root) module, as shown in Example 23:

- -
- -
- -
Example 23. Move the provider block to the sample-app root module (ch2/tofu/live/sample-app/main.tf)
- -
- -
- -
- -
provider "aws" {
-
-  region = "us-east-2"
-
-}
-
-
-
-module "sample_app_1" {
-
-  source = "../../modules/ec2-instance"
-
-
-
-  # TODO: fill in with your own AMI ID!
-
-  ami_id = "ami-09a9ad4735def0515"
-
-
-
-  name = "sample-app-tofu-1"
-
-}
-
-
-
-module "sample_app_2" {
-
-  source = "../../modules/ec2-instance"
-
-
-
-  # TODO: fill in with your own AMI ID!
-
-  ami_id = "ami-09a9ad4735def0515"
-
-
-
-  name = "sample-app-tofu-2"
-
-}
- -
- -
- -
- -
- -
- -

One last step: create an outputs.tf file in the sample-app folder with the contents shown in - -Example 24:

- -
- -
- -
Example 24. Proxy the output variables from the ec2-instance module (ch2/tofu/live/sample-app/outputs.tf)
- -
- -
- -
- -
output "sample_app_1_public_ip" {
-
-  value = module.sample_app_1.public_ip
-
-}
-
-
-
-output "sample_app_2_public_ip" {
-
-  value = module.sample_app_2.public_ip
-
-}
-
-
-
-output "sample_app_1_instance_id" {
-
-  value = module.sample_app_1.instance_id
-
-}
-
-
-
-output "sample_app_2_instance_id" {
-
-  value = module.sample_app_2.instance_id
-
-}
- -
- -
- -
- -
- -
- -

The preceding code "proxies" the output variables from the underlying ec2-instance module usages so that you can see - -those outputs when you run apply on the sample-app module.

- -
- -
- -

OK, you’re finally ready to run this code:

- -
- -
- -
- -
$ tofu init
-
-$ tofu apply
- -
- -
- -
- -

When apply completes, you should have two EC2 instances running, and the output variables should show their IPs and - -instance IDs. If you wait a minute or two for the instances to boot up, and open http://<IP>:8080 in your browser, - -where <IP> is the public IP of either instance, you should see the familiar "Hello, World!" text. When you’re done - -experimenting, run tofu destroy to clean everything up again.

- -
- -
- -
- -

Example: Deploy an EC2 Instance Using an OpenTofu Module from GitHub

- -
- -

There’s one more trick with OpenTofu modules: the source parameter can be set to not only a local file path, but also - -to a URL. For example, the blog post series’s sample code repo in GitHub includes an - -ec2-instance module that is more or less identical to your own ec2-instance module. You can use the module from the - -series’s sample code repo by updating the source URLs as shown in - -Example 25:

- -
- -
- -
Example 25. Set the source parameters to GitHub URLs (ch2/tofu/live/sample-app/main.tf)
- -
- -
- -
- -
module "sample_app_1" {
-
-  source = "github.com/brikis98/devops-book//ch2/tofu/modules/ec2-instance"
-
-
-
-  # ... (other params omitted) ...
-
-
-
-}
- -
- -
- -
- -
- -
- -

The preceding code sets the source URL to a GitHub URL. Note the intentional use of two slashes (//): the - -part to the left of the two slashes specifies the GitHub repo and the part to the right of the two slashes specifies - -the subfolder within that repo.

- -
- -
- -

Run init on this code one more time:

- -
- -
- -
- -
$ tofu init
-
-
-
-Initializing the backend...
-
-Initializing modules...
-
-Downloading git::https://github.com/brikis98/devops-book.git...
-
-Downloading git::https://github.com/brikis98/devops-book.git...
-
-
-
-Initializing provider plugins...
- -
- -
- -
- -

The init command is responsible for downloading provider code and module code, and you can see in the preceding - -output that, this time, it downloaded the module code from GitHub.

- -
- -
- -

If you now run apply, you should get the exact same two EC2 instances as before. When you’re done experimenting, run - -destroy to clean everything up.

- -
- -
- -

You’ve now seen the power of reusable modules. A common pattern at many companies is for the Ops team to define and - -manage a library of vetted, reusable OpenTofu modules—e.g., one module to deploy servers, another to deploy databases, - -another to configure networking, and so on—and for the Dev teams to use these modules as a self-service way to deploy - -and manage the infrastructure they need for their apps.

- -
- -
- -

This blog post series will make use of this pattern in future chapters: instead of writing every line of code - -from scratch, you’ll be able to use modules directly from this series’s sample code repo to deploy the - -infrastructure you need for each chapter.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for using OpenTofu:

- -
- -
- -
    - -
  • - -

    Figure out how to update your ec2-instance module to make it more configurable: e.g., add input variables to - -configure the instance type it uses, the port it opens up for HTTP requests, and so on.

    - -
  • - -
  • - -

    Look up how to use data sources in OpenTofu to find the ID of your AMI automatically, instead of having to provide - -the ID manually.

    - -
  • - -
- -
- -
- -
- -
- -
- -

How Provisioning Tools Stack Up

- -
- -

So, how do provisioning tools stack up using the IaC category criteria from before?

- -
- -
- -
- -
CRUD
- -
- -

Most provisioning tools have full support all four CRUD operations. For example, you just saw OpenTofu create an EC2 - -instance, read the EC2 instance state, update the EC2 instance (to add a tag), and delete the EC2 instance.

- -
- -
Scale
- -
- -

Provisioning tools scale very well. For example, the self-service approach mentioned in the previous section—where - -you have a library of reusable modules that is managed by the Ops team and used by the Dev teams to deploy the - -infrastructure they need—can scale to thousands of developers and tens of thousands of resources, something that - -would be a nightmare to manage with ad hoc scripts.

- -
- -
Idempotency and error handling
- -
- -

Whereas most ad hoc scripts are procedural, where you specify step by step how to achieve some desired end state, - -most provisioning tools are declarative, where you specify the end state you want, and the provisioning itself - -tool automatically figures out how to get you from your current state to that desired end state. As a result, most - -provisioning tools are idempotent and can handle errors automatically, based on their inherent design. For example, - -you already saw in the CRUD discussion that you can re-run OpenTofu multiple times, and it will refresh its state, - -and come up with an execution plan to try to make the state of the world match the desired state in your code, - -handling changes in your code, changes in the outside world, and errors along the way.

- -
- -
Consistency
- -
- -

Most provisioning tools enforce a consistent, predictable structure to the code, including documentation, - -file layout, clearly named parameters, secrets management, and so on.

- -
- -
Verbosity
- -
- -

The declarative nature of provisioning tools and the custom DSLs they provide typically result in concise code, - -especially considering that code supports all CRUD operations, scale, idempotency, and error handling out-of-the-box. - -The OpenTofu code for deploying an EC2 instance is about half the length of the Bash code, even though it does - -considerably more, and the more complex the infrastructure you’re managing, the larger this gap becomes.

- -
- -
- -
- -
- -

Provisioning tools should be your go-to option for managing infrastructure. In fact these days, many provisioning tools - -can be used to not only manage traditional infrastructure (e.g., servers), but many other aspects of software delivery - -as well. For example, you can use OpenTofu to manage your version control system (e.g., using the - -GitHub provider), metrics and dashboards (e.g., using - -the Grafana provider), and your on-call rotation (e.g., using - -the PagerDuty provider), tying them all together with code.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #4
- -
- -

Provisioning tools are great for deploying and managing servers and infrastructure.

- -
- -
- -
- -
- -

Although I’ve been comparing IaC tools this entire blog post, the reality is that you’ll probably need - -to use multiple IaC tools together, as discussed in the next section.

- -
- -
- -
- -
- -

Using Multiple IaC Tools Together

- -
- -

Each of the tools you’ve seen in this blog post has strengths and weaknesses. No one of them - -can do it all, so for most real-world scenarios, you’ll need to use several different tools, and it’s your job to pick - -the right tool(s) for the job.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #5
- -
- -

You usually need to use multiple IaC tools together to manage your infrastructure.

- -
- -
- -
- -
- -

The following sections show three common combinations I’ve seen work well at a number of companies.

- -
- -
- -

Provisioning Plus Configuration Management

- -
- -

Example: OpenTofu and Ansible. You use OpenTofu to deploy all the underlying infrastructure, including the network - -topology (i.e., virtual private clouds [VPCs], subnets, route tables), data stores (e.g., MySQL, Redis), load balancers, - -and servers. You then use Ansible to deploy your apps on top of those servers, as depicted in Figure 21.

- -
- -
- -
- -OpenTofu deploys the infrastructure, including servers, and Ansible deploys apps onto those servers - -
- -
Figure 21. OpenTofu deploys the infrastructure, including servers, and Ansible deploys apps onto those servers.
- -
- -
- -

This is an easy approach to get started with and there are many ways to get Ansible and OpenTofu to work together - -(e.g., OpenTofu adds tags to your servers, and Ansible uses an inventory plugin to automatically discover servers with - -those tags). The major downside is that using Ansible typically means mutable infrastructure, rather than immutable, so - -as your codebase, infrastructure, and team grow, maintenance and debugging can become more difficult.

- -
- -
- -
- -

Provisioning Plus Server Templating

- -
- -

Example: OpenTofu and Packer. You use Packer to package your apps as VM images. You then use OpenTofu to deploy servers - -with these VM images and the rest of your infrastructure, including the network topology (i.e., VPCs, subnets, route - -tables), data stores (e.g., MySQL, Redis), and load balancers, as illustrated in Figure 22.

- -
- -
- -
- -OpenTofu deploys the infrastructure, including servers, and Packer creates the VMs that run on those servers - -
- -
Figure 22. OpenTofu deploys the infrastructure, including servers, and Packer creates the VMs that run on those servers.
- -
- -
- -

This is also an easy approach to get started with: in fact, you already had a chance to try this combination out - -earlier in this post. Moreover, this is an immutable infrastructure approach, which will - -make maintenance easier. However, there are two major drawbacks. First, VMs can take a long time to build and deploy, - -which will slow down your iteration speed. Second, the deployment strategies you can implement with provisioning tools - -are typically limited (e.g., you can’t implement blue-green deployment natively in OpenTofu), so you either end up - -writing lots of complicated deployment scripts or you turn to orchestration tools.

- -
- -
- -
- -

Provisioning Plus Server Templating Plus Orchestration

- -
- -

Orchestration tools, such as Kubernetes, Nomad, and OpenShift, help you deploy and manage apps on top of your - -infrastructure. You’ll do a deep-dive on orchestration in Part 3.

- -
- -
- -

Example: OpenTofu, Packer, Docker, and Kubernetes. - -You use Packer to create a VM image that has Docker and Kubernetes agents installed. You then use OpenTofu to deploy - -a cluster of servers, each of which runs this VM image, and the rest of your infrastructure, including the - -network topology (i.e., VPCs, subnets, route tables), data stores (e.g., MySQL, Redis), and load balancers. Finally, - -when the cluster of servers boots up, it forms a Kubernetes cluster that you use to run and manage your Dockerized - -applications, as shown in Figure 23.

- -
- -
- -
- -OpenTofu deploys the infrastructure, including servers; Packer creates the VMs that run on those servers; and Kubernetes manages those VMs as a cluster for running Docker containers - -
- -
Figure 23. OpenTofu deploys the infrastructure, including servers; Packer creates the VMs that run on those servers; and Kubernetes manages those VMs as a cluster for running Docker containers.
- -
- -
- -

The advantage of this approach is that Docker images build fairly quickly, you can run and test them on your local - -computer, and you can take advantage of all of the built-in functionality of Kubernetes, including various deployment - -strategies, auto healing, auto scaling, and so on. The drawback is the added complexity, both in terms of extra - -infrastructure to run (Kubernetes clusters are difficult and expensive to deploy and operate, though most major cloud - -providers now provide managed Kubernetes services, which can offload some of this work) and in terms of several extra - -layers of abstraction (Kubernetes, Docker, Packer) to learn, manage, and debug.

- -
- -
- -
- -
- -

Conclusion

- -
- -

You now understand how to manage your infrastructure as code. Instead of clicking around a web UI, which is tedious and - -error-prone, you can automate the process, making if faster and more reliable. Moreover, whereas manual deployments - -always require someone at your company to do the busywork, with IaC, you can reuse code written by others, including - -both open source code (e.g., see Ansible Galaxy, - -Docker Hub, and the Terraform Registry) and commercial code - -(e.g., see the Gruntwork Infrastructure as Code Library). - -This also includes the examples in the rest of this blog post series, most of which will be defined as code: you’ll see - -snippets of the code in the series itself, and you can find the fully-working examples in the - -sample code repo in GitHub.

- -
- -
- -

As a general rule, you want to pick the right tool for the job. Here are the 5 key takeaways you’ve seen - -throughout the chapter to help you pick the right category of IaC tool:

- -
- -
- -
    - -
  • - -

    Ad hoc scripts are great for small, one-off tasks, but not for managing all your infrastructure as code.

    - -
  • - -
  • - -

    Configuration management tools are great for managing the configuration of servers, but not for deploying the servers - -themselves, or other infrastructure.

    - -
  • - -
  • - -

    Server templating tools are great for managing the configuration of servers with immutable infrastructure practices.

    - -
  • - -
  • - -

    Provisioning tools are great for deploying and managing servers and infrastructure.

    - -
  • - -
  • - -

    You usually need to use multiple IaC tools together to manage your infrastructure.

    - -
  • - -
- -
- -
- -

If the job you’re doing is provisioning infrastructure, you’ll probably want to use a provisioning tool. If the job - -you’re doing is configuring servers, you’ll probably want to use a server templating or configuration management tool. - -And as most real-world software delivery setups require you to do multiple jobs, you’ll most likely have to combine - -several tools together: e.g., provisioning plus server templating.

- -
- -
- -

It’s worth remembering that there is also a lot of variety within an IaC category: e.g., there are big differences - -between Ansible and Chef within the configuration management category, and between OpenTofu and CloudFormation within - -the provisioning tool category. For a more detailed comparison of specific tools, have a look at - -this - -comparison of Chef, Puppet, Ansible, Pulumi, CloudFormation, and Terraform/OpenTofu.

- -
- -
- - - - - - - - - - - -
- -
Note
- -
- -
Going deeper on OpenTofu / Terraform
- -
- -

Many of the examples in the rest of this blog post series involve provisioning infrastructure, so these examples will - -be defined using a provisioning tool. I’ve picked OpenTofu as the provisioning tool for most of these - -examples, so you may want to become a bit more familiar with this toolset. The best way to do that, with apologies for - -a bit of self-promotion, is to grab a copy of my other book, - -Terraform: Up & Running.

- -
- -
- -
- -
- -

Being able to use code to run and manage a server is a huge advantage over managing it manually, but a single server is - -also a single point of failure. What if it crashes? What if the load exceeds the capacity of a single server? How do you - -roll out changes without downtime? All of these topics are the focus of Part 3.

- -
- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/04.html b/docs/04.html deleted file mode 100644 index 5001a2f..0000000 --- a/docs/04.html +++ /dev/null @@ -1,9620 +0,0 @@ - - - - - - - - - - - - - - -Part 3. How to Deploy Many Apps: Orchestration, VMs, Containers, and Serverless - - - - - - - - - - - - - -
-
-
- -
-
- -
-
- -

Part 3. How to Deploy Many Apps: Orchestration, VMs, Containers, and Serverless

- -
- -
- -

In Part 1 and Part 2, you deployed an app on a single server. This - -is a great way to learn and to get started, and for smaller and simpler apps, a single server may be all you ever need. - -However, for many production use cases, where you’re building a business that depends on that app, you may run into the - -following problems with just a single server:

- -
- -
- -
- -
Outages due to hardware issues
- -
- -

If the server has a hardware problem, such as the power supply dying, your users will experience an outage until you - -replace the server.

- -
- -
Outages due to software issues
- -
- -

If the app crashes due to a software problem, such as a bug in the code, your users will experience an outage until - -you manually restart it.

- -
- -
Outages due to load
- -
- -

If your app becomes popular enough, the load may exceed what a single server can handle, and - -your users will experience degraded performance, and potentially outages as well.

- -
- -
Outages due to deployments
- -
- -

If you want to roll out a new version of your app, it’s hard to do so with just a - -single server without at least a brief outage while you shut down the old version and replace it with the new version.

- -
- -
- -
- -
- -

In short, a single copy of your app is a single point of failure. To run applications in production, you typically want - -multiple copies, called replicas, of your app. Moreover, you also want a way to manage those replicas: something that - -can automatically handle hardware issues, software issues, load issues, deployments, and so on. Although you could - -build your own solutions for deploying and managing replicas, it’s a tremendous amount of work, and there are tools out - -there that do it for you: these are called orchestration tools.

- -
- -
- -

If you search around, you’ll quickly find that there are many orchestration tools out there, including - -Kubernetes, EKS, - -GKE, - -AKS, - -OpenShift, EC2, - -ECS, Marathon / - -Mesos, Nomad, - -AWS Lambda, Google Cloud Functions, - -Azure Serverless, Capistrano, - -Ansible, and many others. It seems like there’s a new, hot orchestration tool nearly every - -day. How do you keep track of them all? Which one should you use? How do these tools compare?

- -
- -
- -

This Part will help you navigate the orchestration space by introducing you to the most common - -types of orchestration tools, which, broadly speaking, fall into the following four categories:

- -
- -
- -
    - -
  • - -

    Server orchestration: e.g., use Ansible to deploy code onto a cluster of servers.

    - -
  • - -
  • - -

    VM orchestration: e.g., deploy VMs into an Auto Scaling Group.

    - -
  • - -
  • - -

    Container orchestration: e.g., deploy containers into a Kubernetes cluster.

    - -
  • - -
  • - -

    Serverless orchestration: e.g., deploy functions using AWS Lambda.

    - -
  • - -
- -
- -
- -

You’ll work through examples where you deploy the same app using each of these approaches, which will let you see how - -different orchestration approaches perform across a variety of dimensions (e.g., rolling out updates, load balancing, - -auto scaling, auto healing, and so on), so that you can pick the right tool for the job.

- -
- -
- -

Here’s what we’ll cover in this post:

- -
- -
- -
    - -
  • - -

    An introduction to orchestration

    - -
  • - -
  • - -

    Server orchestration

    - -
  • - -
  • - -

    VM orchestration

    - -
  • - -
  • - -

    Container orchestration

    - -
  • - -
  • - -

    Serverless orchestration

    - -
  • - -
  • - -

    Comparison of orchestration options

    - -
  • - -
- -
- -
- -

Let’s get started by understanding exactly what orchestration is, and why it’s important.

- -
- -
- -

An Introduction to Orchestration

- -
- -

In the world of classical music, a conductor is responsible for orchestration: that is, they direct the orchestra, - -coordinating all the individual members to start or stop playing, to increase or decrease the tempo, to play quieter or - -louder, and so on. In the world of software, an orchestration tool is responsible for orchestration: they direct - -software clusters, coordinating all the individual apps to start or stop, to increase or decreases the hardware - -resources available to them, to increase or decrease the number of replicas, and so on.

- -
- -
- -

These days, for many people, the term "orchestration" is associated with Kubernetes, but the underlying needs - -have been around since the first programmer ran the first app for others to use. Anyone running an app in production - -needs to solve most or all of the following core orchestration problems:

- -
- -
- -
- -
Deployment
- -
- -

You need a way to initially deploy one or more replicas of your app onto your servers.

- -
- -
Update strategies
- -
- -

After the initial deployment, you need a way to periodically roll out updates to all replicas of your app, and in - -most cases, you want a way to roll out those updates without your users experiencing downtime (known as a - -zero-downtime deployment).

- -
- -
Scheduling
- -
- -

For each deployment, you need to decide which apps should run on which servers, ensuring that each app gets the - -resources (CPU, memory, disk space) it needs. This is known as scheduling. With some orchestration tools, you do - -the scheduling yourself, manually; other orchestration tools provide a scheduler that can do it automatically, - -and this scheduler usually implements some sort of bin packing algorithm to try to use the resources available as - -efficiently as possible.

- -
- -
Rollback
- -
- -

If there is a problem when rolling out an update, you need a way to roll back all replicas to a previous version.

- -
- -
Auto scaling
- -
- -

As load goes up and down, you need a way to automatically scale your app up and down in response. This may include - -vertical scaling, where you scale the resources available to your existing servers up or down, such as getting - -faster CPUs, more memory, or bigger hard drives, as well as horizontal scaling, where you deploy more servers and/or - -more replicas of your app across your servers.

- -
- -
Auto healing
- -
- -

You need something to monitor your apps, detect if they are not healthy (i.e., the app is not responding correctly or - -at all), and to automatically respond to problems by restarting or replacing the app or server.

- -
- -
Configuration
- -
- -

If you have multiple environments (e.g., dev, stage, and prod), you need a way to be able to configure the app - -differently in each environment: e.g., use different domain names or different memory settings in each environment.

- -
- -
Secrets management
- -
- -

You may need a way to securely pass sensitive configuration data to your apps (e.g., passwords, API keys).

- -
- -
Load balancing
- -
- -

If you are running multiple replicas of your app, you may need a way to distribute traffic across all those replicas.

- -
- -
Service communication
- -
- -

If you are running multiple apps, you may need to give them a way to communicate with each other, including a way to - -find out how to connect to other apps (service discovery), and ways to control and monitor that communication, - -including authentication, authorization, encryption, error handling, observability, and so on (service mesh).

- -
- -
Disk management
- -
- -

If your app stores data on a local hard drive, then as you deploy replicas of your app to various servers, you need - -to find a way to ensure that the right hard drive is connected to the right servers.

- -
- -
- -
- -
- -

Over the years, there have been dozens of different approaches to solving each of these problems. In the pre-cloud era, - -since every on-prem deployment was different, most companies wrote their own bespoke solutions, typically consisting of - -gluing together various scripts and tools to solve each problem. Nowadays, the industry is starting to standardize - -around four broad types of solutions:

- -
- -
- -
- -
Server orchestration
- -
- -

You have a pool of servers that you manage.

- -
- -
VM orchestration
- -
- -

Instead of managing servers directly, you manage VM images.

- -
- -
Container orchestration
- -
- -

Instead of managing servers directly, you manage containers.

- -
- -
Serverless orchestration
- -
- -

You no longer think about servers at all, and just focus on managing apps, or even - -individual functions.

- -
- -
- -
- -
- -

We’ll discuss each of these in turn in the next several sections, starting with server orchestration.

- -
- -
- -
- -

Server Orchestration

- -
- -

The original approach used in the pre-cloud era, and one that, for better or worse, is still fairly common today, is to - -do the following:

- -
- -
- -
    - -
  • - -

    Set up a bunch of servers.

    - -
  • - -
  • - -

    Deploy your apps across the servers.

    - -
  • - -
  • - -

    When you need to roll out changes, update the servers in place.

    - -
  • - -
- -
- -
- -

I’ve seen companies use a variety of tools for implementing this approach, including configuration management - -tools (e.g., Ansible, Chef, Puppet), - -specialized deployment scripts (e.g., Capistrano, Deployer, - -Mina, Fabric, Shipit), and, - -perhaps the most common approach, thousands and thousands of ad hoc scripts.

- -
- -
- -

Because this approach pre-dates the cloud era, it also predates most attempts at creating standardized tooling for it - -(which is why there are so many different tools for it), and I’m not aware of any single, commonly accepted name for it. - -Most people would just refer to it as "deployment tooling," as deployment was the primary focus (as opposed to auto - -scaling, auto healing, service discovery, etc.). For the purposes of this blog post series, I’ll refer to it as server - -orchestration, to disambiguate it from the newer orchestration approaches you’ll see later, such as VM and - -container orchestration.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #1
- -
- -

Server orchestration is an older, mutable infrastructure approach where you have a fixed set of servers that you - -maintain and update in place.

- -
- -
- -
- -
- -

To get a feel for server orchestration, let’s use Ansible. In Part 2, you saw how to - -deploy a single EC2 instance using Ansible. In this post, you’ll first use Ansible to deploy - -multiple servers, and once you have several servers to work with, you’ll be able to see what server orchestration - -looks like in practice.

- -
- -
- -

Example: Deploy Multiple Servers in AWS Using Ansible

- -
- - - - - - - - - - - -
- -
Note
- -
- -
Example Code
- -
- -

As a reminder, you can find all the code examples in the blog post series’s sample - -code repo in GitHub.

- -
- -
- -
- -
- -

The first thing you need for server orchestration is a bunch of servers. If you have existing servers you - -can use—e.g., several physical servers on-prem or several virtual servers in the cloud—and you have SSH access to those - -servers, you can skip this section, and go to the next one.

- -
- -
- -

If you don’t have servers you can use, this section will show you how to deploy several EC2 instances using Ansible. - -As mentioned in Part 2, deploying and managing servers (hardware) is not really what - -configuration management tools were designed to do, but for learning and testing, Ansible is good enough. Note that - -the way you’ll use Ansible to deploy multiple EC2 instances in this section is meant to showcase server orchestration in - -its canonical form, with a fixed set of servers, and not the idiomatic approach for running multiple servers in the - -cloud; you’ll see the more idiomatic approach later in this blog post, in the VM orchestration section.

- -
- -
- -

The blog post series’s sample code repo in GitHub contains an Ansible playbook called - -create_ec2_instances_playbook.yml (note the "s" in "instances," implying multiple instances, unlike the playbook from - -Part 2) in the ch3/ansible folder that can do the following:

- -
- -
- -
    - -
  • - -

    Prompt you for several input variables:

    - -
    - -
      - -
    • - -

      num_instances: How many EC2 instances to create.

      - -
    • - -
    • - -

      base_name: What to name all the resources created by this playbook.

      - -
    • - -
    • - -

      http_port: What port the instances should listen on for HTTP requests.

      - -
    • - -
    - -
    - -
  • - -
  • - -

    Create multiple EC2 instances, each with the Ansible tag set to base_name.

    - -
  • - -
  • - -

    Create a security group for the instances which opens up port 22 (for SSH access) and http_port (for HTTP access).

    - -
  • - -
  • - -

    Create an EC2 Key Pair you can use to connect to those instances via SSH.

    - -
  • - -
- -
- -
- -

To use this playbook, git clone the sample code repo, if you haven’t already (if you are new to Git, check out the - -Git tutorial in Part 4):

- -
- -
- -
- -
$ git clone https://github.com/brikis98/devops-book.git
- -
- -
- -
- -

This will check out the sample code into the devops-book folder. Next, head into the - -fundamentals-of-devops folder you created in Part 1 to work through the examples in this - -blog post series, and create a new ch3/ansible subfolder:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch3/ansible
-
-$ cd ch3/ansible
- -
- -
- -
- -

Copy create_ec2_instances_playbook.yml from the devops-book folder into ch3/ansible:

- -
- -
- -
- -
$ cp -r ../../devops-book/ch3/ansible/create_ec2_instances_playbook.yml .
- -
- -
- -
- -

To run this playbook, make sure Ansible is installed, authenticate to AWS as described in - -Authenticating to AWS on the command line, and run ansible-playbook as before. Ansible will start to interactively prompt - -you for input variables:

- -
- -
- -
- -
$ ansible-playbook -v create_ec2_instances_playbook.yml
-
-How many instances to create?: 3
-
-What to use as the base name for resources?: sample_app_instances
-
-What port to use for HTTP requests?: 8080
- -
- -
- -
- -

You can enter the values interactively and hit Enter, or, alternatively, you can define the variables in a YAML file, - -such as the sample-app-vars.yml file shown in Example 26:

- -
- -
- -
Example 26. Variables file to create EC2 instances for the sample app (ch3/ansible/sample-app-vars.yml)
- -
- -
- -
- -
num_instances: 3
-
-base_name: sample_app_instances
-
-http_port: 8080
- -
- -
- -
- -
- -
- -

You can then use the --extra-vars flag to pass this variables file to the ansible-playbook command:

- -
- -
- -
- -
$ ansible-playbook \
-
-  -v create_ec2_instances_playbook.yml \
-
-  --extra-vars "@sample-app-vars.yml"
- -
- -
- -
- -

This will create three empty servers that you can configure and manage as you wish. It’s a great playground to get a - -sense for server orchestration. As a first step, let’s improve the security and reliability of your app deployments, as - -discussed next.

- -
- -
- -
- -

Example: Deploy an App Securely and Reliably Using Ansible

- -
- -

As explained in Watch out for snakes: these examples have several problems, the code used to deploy apps in the previous - -blog posts had a number of concerns related to security and reliability issues: e.g., running the app - -as a root user, listening on port 80, no automatic app restart in case of crashes, and so on. It’s time to fix these - -issues and get this code a bit closer to something you could use in production.

- -
- -
- -

First, just as in Section 2.3.2, you need to tell Ansible what servers you want to configure. - -You do this using either an inventory file or, if you deployed servers in the cloud, such as the EC2 instances in the - -previous section, you can use an inventory plugin, as shown in Example 27, - -to discover your servers automatically.

- -
- -
- -
Example 27. Inventory plugin to discover EC2 instances automatically (ch3/ansible/inventory.aws_ec2.yml)
- -
- -
- -
- -
plugin: amazon.aws.aws_ec2
-
-regions:
-
-  - us-east-2
-
-keyed_groups:
-
-  - key: tags.Ansible
-
-leading_separator: ''
- -
- -
- -
- -
- -
- -

Just as in the previous blog post, this inventory file will create groups based on the Ansible tag. - -If you used the playbook in the previous section, that tag will be set to the value you entered for the base_name - -variable. In the preceding section, I used "sample_app_instances" as the base_name, so that’s what the group will be - -called. You’ll need to configure group variables for this group by creating a YAML file with the name of the group in - -the group_vars folder. So that will be group_vars/sample_app_instances.yml, as shown in - -Example 28:

- -
- -
- -
Example 28. Configure group variables for your sample app servers (ch3/ansible/group_vars/sample_app_instances.yml)
- -
- -
- -
- -
ansible_user: ec2-user
-
-ansible_ssh_private_key_file: ansible-ch3.key
-
-ansible_host_key_checking: false
- -
- -
- -
- -
- -
- -

This file configures the user, private key, and host key checking settings for the sample_app_instances group. Now you - -can use a playbook to configure the servers in this group to run the Node.js sample app. Create a new playbook called - -configure_sample_app_playbook.yml, with the contents shown in - -Example 29:

- -
- -
- -
Example 29. A playbook for configuring the servers to run the Node.js sample app (ch3/ansible/configure_sample_app_playbook.yml)
- -
- -
- -
- -
- name: Configure servers to run the sample-app
-
-  hosts: sample_app_instances # (1)
-
-  gather_facts: true
-
-  become: true
-
-  roles:
-
-    - role: nodejs-app        # (2)
-
-    - role: sample-app        # (3)
-
-      become_user: app-user   # (4)
- -
- -
- -
- -
- -
- -

Here’s what this playbook does:

- -
- -
- -
    - -
  1. - -

    Target the sample_app_instances group you just configured in your inventory.

    - -
  2. - -
  3. - -

    Instead of a single sample-app role that does everything, as you saw in Part 2, the - -code in this blog post uses two roles. The first role, called nodejs-app, is responsible for - -configuring a server to run Node.js apps. You’ll see the code for this role shortly.

    - -
  4. - -
  5. - -

    The second role is called sample-app, and it’s responsible for running the sample app. You’ll see the code - -for this role shortly as well.

    - -
  6. - -
  7. - -

    The sample-app role will be executed as the OS user app-user, which is a user that the nodejs-app role creates, - -rather than as the root user.

    - -
  8. - -
- -
- -
- -

Create just a single file and folder for the nodejs-app role, roles/nodejs-app/tasks/main.yml:

- -
- -
- -
- -
roles
-
-  └── nodejs-app
-
-      └── tasks
-
-          └── main.yml
- -
- -
- -
- -

Put the code shown in Example 30 into tasks/main.yml:

- -
- -
- -
Example 30. The tasks of the nodejs-app role (ch3/ansible/roles/nodejs-app/tasks/main.yml)
- -
- -
- -
- -
- name: Add Node packages to yum # (1)
-
-  shell: curl -fsSL https://rpm.nodesource.com/setup_21.x | bash -
-
-
-
-- name: Install Node.js
-
-  yum:
-
-    name: nodejs
-
-
-
-- name: Create app user          # (2)
-
-  user:
-
-    name: app-user
-
-
-
-- name: Install pm2              # (3)
-
-  npm:
-
-    name: pm2
-
-    version: latest
-
-    global: true
-
-
-
-- name: Configure pm2 to run at startup as the app user
-
-  shell: eval "$(sudo su app-user bash -c 'pm2 startup' | tail -n1)"
- -
- -
- -
- -
- -
- -

Here’s what this role does:

- -
- -
- -
    - -
  1. - -

    Install Node.js, just as you’ve seen before.

    - -
  2. - -
  3. - -

    Create a new OS user called app-user. This allows you to run your apps with a user with more limited permissions - -than root.

    - -
  4. - -
  5. - -

    Install PM2 and configure it to run on boot. You’ll see what PM2 is and why it’s installed shortly.

    - -
  6. - -
- -
- -
- -

As you can see, the nodejs-app role is fairly generic: it’s designed so you can use it with any Node.js app, which - -makes this a highly reusable piece of code.

- -
- -
- -

The sample-app role, on the other hand, is specifically designed to run the sample app. Create two subfolders - -for this role, files and tasks:

- -
- -
- -
- -
roles
-
-  ├── nodejs-app
-
-  └── sample-app
-
-      ├── files
-
-      │   ├── app.config.js
-
-      │   └── app.js
-
-      └── tasks
-
-          └── main.yml
- -
- -
- -
- -

app.js is the exact same "Hello, World" Node.js sample app you saw in Part 1. Copy it into the - -files folder:

- -
- -
- -
- -
$ cp ../../ch1/sample-app/app.js roles/sample-app/files/
- -
- -
- -
- -

app.config.js is a new file that is used to configure PM2. So, what is PM2? PM2 is a - -process supervisor, which is a tool you can use to run your apps, monitor them, restart them after a reboot or a - -crash, manage their logging, and so on. Process supervisors provide one layer of auto healing for long-running apps. - -You’ll see other types of auto healing later in this post.

- -
- -
- -

There are many process supervisors out there, including supervisord, - -runit, and systemd, with systemd as the one you’re likely to use in - -most situations, as it’s built into most Linux distributions these days. You’ll see an example of how to use systemd - -later in this blog post. For this example, I picked PM2 because it has features designed specifically - -for Node.js apps. To use these features, create a configuration file called app.config.js, as shown in - -Example 31:

- -
- -
- -
Example 31. PM2 configuration file (ch3/ansible/roles/sample-app/files/app.config.js)
- -
- -
- -
- -
module.exports = {
-
-  apps : [{
-
-    name   : "sample-app",
-
-    script : "./app.js",       // (1)
-
-    exec_mode: "cluster",      // (2)
-
-    instances: "max",          // (3)
-
-    env: {
-
-      "NODE_ENV": "production" // (4)
-
-    }
-
-  }]
-
-}
- -
- -
- -
- -
- -
- -

This file configures PM2 to do the following:

- -
- -
- -
    - -
  1. - -

    Run app.js to start the app.

    - -
  2. - -
  3. - -

    Run in cluster mode, so that instead of a single Node.js process, you get one - -process per CPU, ensuring your app is able to take advantage of all the CPUs on your server.

    - -
  4. - -
  5. - -

    Configure cluster mode to use all CPUs available in cluster mode.

    - -
  6. - -
  7. - -

    Set the NODE_ENV environment variable to "production," which is how all Node.js apps and plugins know to run in - -production mode rather than development mode.

    - -
  8. - -
- -
- -
- -

Finally, create tasks/main.yml with the contents shown in Example 32:

- -
- -
- -
Example 32. The sample-app role’s tasks (ch3/ansible/roles/sample-app/tasks/main.yml)
- -
- -
- -
- -
- name: Copy sample app                          # (1)
-
-  copy:
-
-    src: ./
-
-    dest: /home/app-user/
-
-
-
-- name: Start sample app using pm2               # (2)
-
-  shell: pm2 start app.config.js
-
-  args:
-
-    chdir: /home/app-user/
-
-
-
-- name: Save pm2 app list so it survives reboot  # (3)
-
-  shell: pm2 save
- -
- -
- -
- -
- -
- -
    - -
  1. - -

    Copy the sample app code (app.js and app.config.js) from the files folder to the server.

    - -
  2. - -
  3. - -

    Use PM2 to start the app in the background and start monitoring it.

    - -
  4. - -
  5. - -

    Save the list of apps PM2 is running so that if the server reboots, PM2 will automatically restart those apps.

    - -
  6. - -
- -
- -
- -

These changes address most of the concerns in Watch out for snakes: these examples have several problems, improving your security posture - -(no more root user) and the reliability and performance of your app (process supervisor, cluster mode).

- -
- -
- -

To try this code out, make sure you have Ansible installed, authenticate to AWS as described in - -Authenticating to AWS on the command line, and run the following command:

- -
- -
- -
- -
$ ansible-playbook -v -i inventory.aws_ec2.yml configure_sample_app_playbook.yml
- -
- -
- -
- -

Ansible will discover your servers, configure each one with all the dependencies it needs, and run the app on each - -one. At the end, you should see the IP addresses of servers, as shown in the following log output (truncated - -for readability):

- -
- -
- -
- -
PLAY RECAP ************************************
-
-13.58.56.201               : ok=9    changed=8
-
-3.135.188.118              : ok=9    changed=8
-
-3.21.44.253                : ok=9    changed=8
-
-localhost                  : ok=6    changed=4
- -
- -
- -
- -

Copy the IP of one of the three servers, open http://<IP>:8080 in your web browser, and you should see the - -familiar "Hello, World!" text once again.

- -
- -
- -

While three servers is great for redundancy, it’s not so great for usability, as your users typically want just a - -single endpoint to hit. This requires deploying a load balancer, as described in the next section.

- -
- -
- -
- -

Example: Deploy a Load Balancer Using Ansible and Nginx

- -
- -

A load balancer is a piece of software that can distribute load across multiple servers or apps. You give your users - -a single endpoint to hit, which is the load balancer, and under the hood, the load balancer forwards the requests it - -receives to a number of different endpoints, using various algorithms (e.g., round-robin, hash-based, - -least-response-time, etc.) to process requests as efficiently as possible. There are many popular load balancer options - -out there, such as Apache, Nginx, and HAProxy, - -as well as cloud-specific load balancing services, such as AWS Elastic Load - -Balancer, GCP Cloud Load Balancer, and - -Azure Load Balancer.

- -
- -
- -

In the cloud, you’d most likely use a cloud load balancer, as you’ll see later in this blog post. - -However, for the purposes of server orchestration, I decided to show you a simplified example of how to run your own - -load balancer, as server orchestration techniques should work on-prem as well. Therefore, you’ll be deploying Nginx.

- -
- -
- -

To do that, you need one more server. If you have one already with SSH access, you can use it, and skip forward a few - -paragraphs. If not, you can deploy one more EC2 instance using the same create_ec2_instances_playbook.yml, but with a - -new variables file, nginx-vars.yml, with the contents shown in Example 33:

- -
- -
- -
Example 33. Variables file to create an EC2 instance for nginx (ch3/ansible/nginx-vars.yml)
- -
- -
- -
- -
num_instances: 1
-
-base_name: nginx_instances
-
-http_port: 80
- -
- -
- -
- -
- -
- -

This will create a single EC2 instance, with the base_name "nginx_instances," and it will allow requests on port 80, - -which is the default port for HTTP. Run the playbook with this vars file as follows:

- -
- -
- -
- -
$ ansible-playbook \
-
-  -v create_ec2_instances_playbook.yml \
-
-  --extra-vars "@nginx-vars.yml"
- -
- -
- -
- -

This should create one more EC2 instance you can use for nginx. Since the base_name for that instance is - -nginx_instances, that will also be the group name in the inventory, so configure the variables for this group by - -creating group_vars/nginx_instances.yml with the contents shown in Example 34:

- -
- -
- -
Example 34. Configure group variables for your Nginx servers (ch3/ansible/group_vars/nginx_instances.yml)
- -
- -
- -
- -
ansible_user: ec2-user
-
-ansible_ssh_private_key_file: ansible-ch3.key
-
-ansible_host_key_checking: false
- -
- -
- -
- -
- -
- -

Now you can create a new playbook to configure these servers with Nginx. Create a new file called - -configure_nginx_playbook.yml with the contents shown in Example 35:

- -
- -
- -
Example 35. Use a role to configure the EC2 instance with Nginx (ch3/ansible/configure_nginx_playbook.yml)
- -
- -
- -
- -
- name: Configure servers to run nginx
-
-  hosts: nginx_instances # (1)
-
-  gather_facts: true
-
-  become: true
-
-  roles:
-
-    - role: nginx        # (2)
- -
- -
- -
- -
- -
- -

This playbook does the following:

- -
- -
- -
    - -
  1. - -

    Target the nginx_instances group you just configured in your inventory.

    - -
  2. - -
  3. - -

    Configure the servers in that group using a new role called nginx, which is described next.

    - -
  4. - -
- -
- -
- -

Create a new folder for the nginx role with tasks and templates subfolders:

- -
- -
- -
- -
roles
-
-  ├── nginx
-
-  │   ├── tasks
-
-  │   │   └── main.yml
-
-  │   └── templates
-
-  │       └── nginx.conf.j2
-
-  ├── nodejs-app
-
-  └── sample-app
- -
- -
- -
- -

Inside of nginx/templates/nginx.conf.j2, create an Nginx configuration file template, as shown in - -Example 36:

- -
- -
- -
Example 36. Nginx configuration file template (ch3/ansible/roles/nginx/templates/nginx.conf.j2)
- -
- -
- -
- -
user nginx;
-
-worker_processes auto;
-
-error_log /var/log/nginx/error.log notice;
-
-pid /run/nginx.pid;
-
-
-
-events {
-
-    worker_connections 1024;
-
-}
-
-
-
-http {
-
-    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-
-                      '$status $body_bytes_sent "$http_referer" '
-
-                      '"$http_user_agent" "$http_x_forwarded_for"';
-
-
-
-    access_log  /var/log/nginx/access.log  main;
-
-
-
-    include             /etc/nginx/mime.types;
-
-    default_type        application/octet-stream;
-
-
-
-    upstream backend {                                       # (1)
-
-        {% for host in groups['sample_app_instances'] %}     # (2)
-
-        server {{ hostvars[host]['public_dns_name'] }}:8080; # (3)
-
-        {% endfor %}
-
-    }
-
-
-
-    server {
-
-        listen       80;                                     # (4)
-
-        listen       [::]:80;
-
-
-
-        location / {                                         # (5)
-
-                proxy_pass http://backend;
-
-        }
-
-    }
-
-}
- -
- -
- -
- -
- -
- -

Most of this file is standard (boilerplate) Nginx configuration—check out the - -Nginx documentation if - -you’re curious to understand what it does—so I’ll just point out a few items to focus on:

- -
- -
- -
    - -
  1. - -

    Use the upstream keyword to define a group of servers that can be referenced elsewhere in this file by the name - -backend. You’ll see where this is used shortly.

    - -
  2. - -
  3. - -

    Use Jinja templating syntax to loop over the servers in the - -sample_app_instances group.

    - -
  4. - -
  5. - -

    Use Jinja templating syntax to configure the backend upstream to route traffic to the public address and - -port 8080 of each server in the sample_app_instances group.

    - -
  6. - -
  7. - -

    Configure Nginx to listen on port 80.

    - -
  8. - -
  9. - -

    Configure Nginx as a load balancer, forwarding requests to the / URL to the backend upstream.

    - -
  10. - -
- -
- -
- -

In short, the preceding configuration file will configure Nginx to load balance traffic across the servers - -you deployed to run the sample app.

- -
- -
- -

Create nginx/tasks/main.yml with the contents shown in Example 37:

- -
- -
- -
Example 37. nginx role tasks (ch3/ansible/roles/nginx/tasks/main.yml)
- -
- -
- -
- -
- name: Install Nginx              # (1)
-
-  yum:
-
-    name: nginx
-
-
-
-- name: Copy Nginx config          # (2)
-
-  template:
-
-    src: nginx.conf.j2
-
-    dest: /etc/nginx/nginx.conf
-
-
-
-- name: Start Nginx                # (3)
-
-  systemd_service:
-
-    state: started
-
-    enabled: true
-
-    name: nginx
- -
- -
- -
- -
- -
- -

This file defines the tasks for the nginx role, which are the following:

- -
- -
- -
    - -
  1. - -

    Install Nginx.

    - -
  2. - -
  3. - -

    Render the Nginx configuration file and copy it to the server.

    - -
  4. - -
  5. - -

    Start Nginx. Note the use of systemd as a process supervisor to restart Nginx in case it crashes or the server - -reboots.

    - -
  6. - -
- -
- -
- -

Run this playbook to configure Nginx:

- -
- -
- -
- -
$ ansible-playbook -v -i inventory.aws_ec2.yml configure_nginx_playbook.yml
- -
- -
- -
- -

Wait a few minutes for everything to deploy and in the end, you should see log output that looks like this:

- -
- -
- -
- -
PLAY RECAP
-
-xxx.us-east-2.compute.amazonaws.com : ok=4    changed=2    failed=0
- -
- -
- -
- -

The value on the left, "xxx.us-east-2.compute.amazonaws.com," is a domain name you can use to access the Nginx server. - -If you open http://xxx.us-east-2.compute.amazonaws.com (this time with no port number, as Nginx is listening on port - -80, the default port for HTTP) in your browser, you should see "Hello, World!" yet again. Each time you refresh the - -page, Nginx will send that request to a different EC2 instance. Congrats, you now have a single endpoint you can give - -your users, and that endpoint will automatically balance the load across multiple servers!

- -
- -
- -
- -

Example: Roll Out Updates with Ansible

- -
- -

So you’ve now seen how to deploy using a server orchestration tool, but what about doing an update? Some configuration - -management tools support various deployment strategies (a topic you’ll learn more about in Part 5), - -such as a rolling deployment, where you update your servers in batches, so some servers are always running and - -serving traffic, while others are being updated. With Ansible, the easiest way to have it do a rolling update is to add - -the serial parameter to configure_sample_app_playbook.yml, as shown in Example 38:

- -
- -
- -
Example 38. Use the serial parameter to enable rolling deployment (ch3/ansible/configure_sample_app_playbook.yml)
- -
- -
- -
- -
- name: Configure servers to run the sample-app
-
-
-
-  # ... (other params omitted for clarity) ...
-
-
-
-  serial: 1               # (1)
-
-  max_fail_percentage: 30 # (2)
- -
- -
- -
- -
- -
- -
    - -
  1. - -

    Setting serial to 1 tells Ansible to apply changes to one server at a time. Since you have three servers total, - -this ensures that two servers are always available to serve traffic, while one goes down briefly for an update.

    - -
  2. - -
  3. - -

    The max_fail_percentage parameter tells Ansible to abort a deployment if more than this percent of servers hit an - -error during upgrade. Setting this to 30% with three servers means that if a single server fails to update, - -Ansible will not try to deploy the changes to any other servers, so you never lose more than one server to a broken - -update.

    - -
  4. - -
- -
- -
- -

Let’s give the rolling deployment a shot. Update the text that the app responds with in app.js, as shown in - -Example 39:

- -
- -
- -
Example 39. Update the app to respond with the text "Fundamentals of DevOps!" (ch3/ansible/roles/sample-app/files/app.js)
- -
- -
- -
- -
  res.end('Fundamentals of DevOps!\n');
- -
- -
- -
- -
- -
- -

And re-run the playbook:

- -
- -
- -
- -
$ ansible-playbook -v -i inventory.aws_ec2.yml configure_sample_app_playbook.yml
- -
- -
- -
- -

You should see Ansible rolling out the change to one server at a time. When it’s done, if you refresh the Nginx IP in - -your browser, you should see the text "Fundamentals of DevOps!"

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for using Ansible for server orchestration:

- -
- -
- -
    - -
  • - -

    Figure out how to scale the number of instances running the sample app from three to four.

    - -
  • - -
  • - -

    Try restarting one of the instances using the AWS Console. How does nginx handle it while the instance is - -rebooting? Does the sample app still work after the reboot? How does this compare to the behavior you saw in - -Part 1?

    - -
  • - -
  • - -

    Try terminating one of the instances using the AWS Console. How does nginx handle it? How can you restore the - -instance?

    - -
  • - -
- -
- -
- -
- -
- -

When you’re done experimenting with Ansible, you should manually undeploy the EC2 instances by finding each one in the - -EC2 Console (look for the instance IDs the playbook writes to the log), - -clicking "Instance state," and choosing "Terminate instance" in the drop down, as shown in Figure 18. - -This ensures that your account doesn’t start accumulating any unwanted charges.

- -
- -
- -
- -
- -

VM Orchestration

- -
- -

The idea with VM orchestration is to do the following:

- -
- -
- -
    - -
  • - -

    Create VM images that have your apps and all their dependencies fully installed and configured.

    - -
  • - -
  • - -

    Deploy the VM images across a cluster of servers.

    - -
  • - -
  • - -

    Scale the number of servers up or down depending on your needs.

    - -
  • - -
  • - -

    When you need to deploy an update, create new VM images, deploy those onto new servers, and then undeploy the old - -servers.

    - -
  • - -
- -
- -
- -

This is a slightly more modern approach that works best with cloud providers such as AWS, GCP, and Azure, where the - -servers are all virtual servers, so you can spin up new ones and tear down old ones in minutes. That said, you can also - -use virtualization on-prem with tools from VMWare, Citrix, Microsoft Hyper-V, and so on. We’ll take a look at a VM - -orchestration example using AWS, but be aware that the basic techniques here apply to most VM orchestration tools, - -whether in the cloud or on-prem.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #2
- -
- -

VM orchestration is an immutable infrastructure approach where you deploy and manage VM images across virtualized - -servers.

- -
- -
- -
- -
- -

To get a feel for VM orchestration let’s go through an example. This requires the following three things:

- -
- -
- -
    - -
  1. - -

    A tool for building VM images: Just as in Part 2, you’ll use Packer to create VM - -images for AWS.

    - -
  2. - -
  3. - -

    A tool for orchestrating VMs: This blog post series primarily uses AWS, so you’ll use AWS Auto Scaling Groups.

    - -
  4. - -
  5. - -

    A tool for managing your infrastructure as code: Instead of setting up Auto Scaling Groups by manually clicking - -around, you’ll use the same IaC tool as in Part 2, OpenTofu, to manage your - -infrastructure as code.

    - -
  6. - -
- -
- -
- -

We’ll start with the first item, building VM images.

- -
- -
- -

Example: Build a VM Image Using Packer

- -
- -

Head into the fundamentals-of-devops folder you created in Part 1 to work through the - -examples in this blog post series, and create a new subfolder for the Packer code:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch3/packer
-
-$ cd ch3/packer
- -
- -
- -
- -

Copy the Packer template you created in Part 2 into the new ch3/packer folder:

- -
- -
- -
- -
$ cp ../../ch2/packer/sample-app.pkr.hcl .
- -
- -
- -
- -

You should also copy app.js (the sample app) and app.config.js (the PM2 configuration file) from the server - -orchestration section of this blog post into the ch3/packer folder:

- -
- -
- -
- -
$ cp ../ansible/roles/sample-app/files/app*.js .
- -
- -
- -
- -

Example 40 shows the updates to make to the Packer template:

- -
- -
- -
Example 40. Update the Packer template to use PM2 as a process supervisor and create app-user (ch3/packer/sample-app.pkr.hcl)
- -
- -
- -
- -
build {
-
-  sources = [
-
-    "source.amazon-ebs.amazon_linux"
-
-  ]
-
-
-
-  provisioner "file" {                                                   # (1)
-
-    sources     = ["app.js", "app.config.js"]
-
-    destination = "/tmp/"
-
-  }
-
-
-
-  provisioner "shell" {
-
-    inline = [
-
-      "curl -fsSL https://rpm.nodesource.com/setup_21.x | sudo bash -",
-
-      "sudo yum install -y nodejs",
-
-      "sudo adduser app-user",                                           # (2)
-
-      "sudo mv /tmp/app.js /tmp/app.config.js /home/app-user/",          # (3)
-
-      "sudo npm install pm2@latest -g",                                  # (4)
-
-      "eval \"$(sudo su app-user bash -c 'pm2 startup' | tail -n1)\""    # (5)
-
-    ]
-
-    pause_before = "30s"
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

The main changes are to make security and reliability improvements similar to the ones you did in the server - -orchestration section: that is, use PM2 as a process supervisor and create app-user to run the app (instead of using - -the root user).

- -
- -
- -
    - -
  1. - -

    Copy two files, app.js and app.config.js, onto the server (into the /tmp folder, as the final destination, - -the home folder of app-user, doesn’t exist until a later step).

    - -
  2. - -
  3. - -

    Create app-user. This will also automatically create a home folder for app-user.

    - -
  4. - -
  5. - -

    Move app.js and app.config.js from the /tmp folder to the home folder of app-user.

    - -
  6. - -
  7. - -

    Install PM2.

    - -
  8. - -
  9. - -

    Configure PM2 to run on boot (as app-user) so if your server ever restarts, PM2 will restart your app.

    - -
  10. - -
- -
- -
- -

To build the AMI, make sure Packer is installed, authenticate to AWS as described in - -Authenticating to AWS on the command line, and run the following commands:

- -
- -
- -
- -
$ packer init
-
-$ packer build sample-app.pkr.hcl
- -
- -
- -
- -

When the build is done, Packer will output the ID of the newly created AMI. Make sure to jot this ID down somewhere, as - -you’ll need it shortly.

- -
- -
- -
- -

Example: Deploy a VM Image in an Auto Scaling Group Using OpenTofu

- -
- -

The next step is to deploy the AMI. In Part 2, you used OpenTofu to deploy an AMI on a - -single EC2 instance. The goal now is to see VM orchestration at play, which means deploying multiple servers, or what’s - -sometimes called a cluster. Most cloud providers offer a native way to run VMs across a cluster: for example, AWS - -offers Auto Scaling Groups (ASG), GCP - -offers Managed Instance Groups, and Azure offers - -Scale Sets. For this - -example, you’ll be using an AWS ASG, as that offers a number of nice features:

- -
- -
- -
- -
Cluster management
- -
- -

ASGs make it easy to launch multiple instances and manually resize the cluster.

- -
- -
Auto scaling
- -
- -

You can also configure the ASG to resize the cluster automatically in response to load.

- -
- -
Auto healing
- -
- -

The ASG monitors all the instances in the cluster and automatically replaces any instance that - -crashes.

- -
- -
- -
- -
- -

Let’s use a reusable OpenTofu module called asg from this blog post series’s - -sample code repo to deploy an ASG. You can find the module in the ch3/tofu/modules/asg - -folder. This is a simple module that creates three main resources:

- -
- -
- -
    - -
  • - -

    A launch template, which is a bit like a blueprint that specifies the configuration to use for each EC2 instance.

    - -
  • - -
  • - -

    An ASG which uses the configuration in the launch template to stamp out EC2 instances. The ASG will deploy these - -instances into the Default VPC. See the note on Default VPCs in A Note on Default Virtual Private Clouds.

    - -
  • - -
  • - -

    A security group which controls the traffic that can go in and out of each EC2 instance.

    - -
  • - -
- -
- -
- - - - - - - - - - - -
- -
Note
- -
- -
A Note on Default Virtual Private Clouds
- -
- -

All the AWS examples in the early parts of this blog post series use the Default VPC in your AWS account. A - -VPC, or virtual private cloud, is an isolated area of your AWS account that has its own virtual network and IP address - -space. Just about every AWS resource deploys into a VPC. If you don’t explicitly specify a VPC, the resource will be - -deployed into the Default VPC, which is part of every AWS account created after 2013 (if you deleted your Default VPC, - -you can create a new Default VPC using the VPC Console). It’s not a good idea - -to use the Default VPC for production apps, but it’s OK to use it for learning and testing. In - -Part 7, you’ll learn more about VPCs, including how to create a custom VPC that you can use for - -production apps instead of the Default VPC.

- -
- -
- -
- -
- -

To use the asg module, create a live/asg-sample folder to act as a root module:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch3/tofu/live/asg-sample
-
-$ cd ch3/tofu/live/asg-sample
- -
- -
- -
- -

Inside the asg-sample folder, create a main.tf file with the initial contents shown in - -Example 41:

- -
- -
- -
Example 41. Configure the asg module (ch3/tofu/live/asg-sample/main.tf)
- -
- -
- -
- -
provider "aws" {
-
-  region = "us-east-2"
-
-}
-
-
-
-module "asg" {
-
-  source = "github.com/brikis98/devops-book//ch3/tofu/modules/asg"
-
-
-
-  name = "sample-app-asg"                                   # (1)
-
-
-
-  # TODO: fill in with your own AMI ID!
-
-  ami_id        = "ami-0f5b3d9c244e6026d"                   # (2)
-
-  user_data     = filebase64("${path.module}/user-data.sh") # (3)
-
-  app_http_port = 8080                                      # (4)
-
-
-
-  instance_type    = "t2.micro"                             # (5)
-
-  min_size         = 1                                      # (6)
-
-  max_size         = 10                                     # (7)
-
-  desired_capacity = 3                                      # (8)
-
-}
- -
- -
- -
- -
- -
- -

The preceding code sets the following parameters:

- -
- -
- -
    - -
  1. - -

    name: The name to use for the launch template, ASG, security group, and all other resources created by the module.

    - -
  2. - -
  3. - -

    ami_id: The AMI to use for each EC2 instance. You’ll need to set this to the ID of the AMI you built from the - -Packer template in the previous section.

    - -
  4. - -
  5. - -

    user_data: The user data script to run on each instance during boot. The contents of user-data.sh are shown in - -Example 42.

    - -
  6. - -
  7. - -

    app_http_port: The port to open in the security group to allow the app to receive HTTP requests.

    - -
  8. - -
  9. - -

    instance_type: The type of instances to run in the ASG.

    - -
  10. - -
  11. - -

    min_size: The minimum number of instances to run in the ASG.

    - -
  12. - -
  13. - -

    max_size: The maximum number of instances to run in the ASG.

    - -
  14. - -
  15. - -

    desired_capacity: The initial number of instances to run in the ASG.

    - -
  16. - -
- -
- -
- -

Create a file called user-data.sh with the contents shown in Example 42:

- -
- -
- -
Example 42. The user data script for each EC2 instance, which uses PM2 to start the sample app (ch3/tofu/live/asg-sample/user-data.sh)
- -
- -
- -
- -
#!/usr/bin/env bash
-
-
-
-set -e
-
-
-
-sudo su app-user         # (1)
-
-cd /home/app-user        # (2)
-
-pm2 start app.config.js  # (3)
-
-pm2 save                 # (4)
- -
- -
- -
- -
- -
- -

This user data script does the following:

- -
- -
- -
    - -
  1. - -

    Switch to app-user.

    - -
  2. - -
  3. - -

    Go into the home folder for app-user, which is where the Packer template copied the sample app code.

    - -
  4. - -
  5. - -

    Use PM2 to run the sample app.

    - -
  6. - -
  7. - -

    Save the running app status so that if the server reboots, PM2 will restart the sample app.

    - -
  8. - -
- -
- -
- -

If you were to run apply right now, you’d get an ASG with three EC2 instances running your sample app. While this is - -great for redundancy, as discussed in the server orchestration section, you typically want to give your users just a - -single endpoint to hit. This requires deploying a load balancer, as described in the next section.

- -
- -
- -
- -

Example: Deploy an Application Load Balancer Using OpenTofu

- -
- -

In the server orchestration section, you deployed your own load balancer using Nginx. This is a simplified - -deployment that works fine for an example, but has a number of drawbacks if you try to use it for production apps:

- -
- -
- -
- -
Availability
- -
- -

You are running only a single instance for your load balancer. If it crashes, your users experience - -an outage.

- -
- -
Scalability
- -
- -

If load exceeds what a single server can handle, users will see degraded performance or an outage.

- -
- -
Maintenance
- -
- -

Keeping the load balancer up to date is entirely up to you. Moreover, when you need to update the - -load balancer itself (e.g., update to a new version of Nginx), it’s tricky to do so without downtime.

- -
- -
Security
- -
- -

The load balancer server is not especially hardened against attacks.

- -
- -
Encryption
- -
- -

If you want to encrypt data in transit (e.g., use HTTPS and TLS)—which you should for just about all - -production use cases—you’ll have to set it all up manually (you’ll learn more about encryption in - -Part 8).

- -
- -
- -
- -
- -

To be clear, there’s nothing wrong with Nginx: if you put the work in, there are ways to address all of these issues - -with Nginx. However, it’s a considerable amount of work. One of the big benefits of the cloud is that most cloud - -providers offer managed services that can do this work for you. Load balancing is a very common problem, - -and as I mentioned before, almost every cloud provider offers a managed service for load balancing, such as - -AWS Elastic Load Balancer, - -GCP Cloud Load Balancer, and - -Azure Load Balancer. All of these - -provide a number of powerful features out-of-the-box. For example, the AWS Elastic Load Balancer (ELB) gives you the - -following:

- -
- -
- -
- -
Availability
- -
- -

Under the hood, AWS automatically deploys multiple servers for an ELB so you don’t get an outage - -if one server crashes.

- -
- -
Scalability
- -
- -

AWS monitors load on the ELB, and if it is starting to exceed capacity, AWS automatically deploys more - -servers.

- -
- -
Maintenance
- -
- -

AWS automatically keeps the load balancer up to date, with zero downtime.

- -
- -
Security
- -
- -

AWS load balancers are hardened against a variety of attacks, including meeting the requirements of a - -variety of security standards (e.g., SOC 2, ISO 27001, HIPAA, PCI, FedRAMP) out-of-the-box.[15]

- -
- -
Encryption
- -
- -

AWS has out-of-the-box support for HTTPS, Mutual TLS, TLS Offloading, auto-rotated TLS certs, and - -more.

- -
- -
- -
- -
- -

Using a managed service for load balancing can be a huge time saver, so let’s use an AWS load balancer. There are - -actually several types of AWS load balancers to choose from; the one that’ll be the best fit for the simple sample app - -is the Application Load Balancer (ALB). The - -ALB consists of several parts, as shown in Figure 24:

- -
- -
- -
- -An ALB consists of listeners, listener rules, and target groups - -
- -
Figure 24. An ALB consists of listeners, listener rules, and target groups.
- -
- -
- -
- -
Listener
- -
- -

Listen for requests on a specific port (e.g., 80) and protocol (e.g., HTTP).

- -
- -
Listener rule
- -
- -

Specify which requests that come into a listener to route to which target group based on rules that match on request - -parameters such as the path (e.g., /foo and /bar) and hostname (e.g., foo.example.com and bar.example.com).

- -
- -
Target groups
- -
- -

One or more servers that receive requests from the load balancer. The target group also performs - -health checks on these servers by sending each server a request on a configurable interval (e.g., every 30 seconds), - -and only considering the server as healthy if it returns an expected response (e.g., a 200 OK) within a configurable - -time period (e.g., within 2 seconds). The target group will only send requests to servers that pass its health checks.

- -
- -
- -
- -
- -

The blog post series’s sample code repo includes a module called alb in the ch3/tofu/modules/alb folder that you - -can use to deploy an ALB. Note that this is a very simple ALB—it deploys into the Default VPC (see the note in - -A Note on Default Virtual Private Clouds) and only has a single listener rule where it forwards all requests to a single target group—but it - -should suffice for our purposes in this blog post.

- -
- -
- -

Example 43 shows how to update the asg-sample module to use the alb module:

- -
- -
- -
Example 43. Configure the alb module (ch3/tofu/live/asg-sample/main.tf)
- -
- -
- -
- -
module "asg" {
-
-  source = "github.com/brikis98/devops-book//ch3/tofu/modules/asg"
-
-
-
-  # ... (other params omitted) ...
-
-
-
-}
-
-
-
-module "alb" {
-
-  source = "github.com/brikis98/devops-book//ch3/tofu/modules/alb"
-
-
-
-  name                  = "sample-app-alb" # (1)
-
-  alb_http_port         = 80               # (2)
-
-  app_http_port         = 8080             # (3)
-
-  app_health_check_path = "/"              # (4)
-
-}
- -
- -
- -
- -
- -
- -

The preceding code sets the following parameters on the alb module:

- -
- -
- -
    - -
  1. - -

    name: The name to use for the ALB, target group, security group, and all other resources created by the module.

    - -
  2. - -
  3. - -

    alb_http_port: The port the ALB (the listener) listens on for HTTP requests.

    - -
  4. - -
  5. - -

    app_http_port: The port the app listens on for HTTP requests. The ALB target group will send traffic and health - -checks to this port.

    - -
  6. - -
  7. - -

    app_health_check_path: The path to use when sending health check requests to the app.

    - -
  8. - -
- -
- -
- -

The one missing piece is the connection between the ASG and the ALB: that is, how does the ALB know which EC2 instances - -to send traffic to (which instances to put in its target group)? To tie these pieces together, go back to your usage - -of the asg module, and update it with one parameter, as shown in Example 44:

- -
- -
- -
Example 44. Configure the asg module (ch3/tofu/live/asg-sample/main.tf)
- -
- -
- -
- -
module "asg" {
-
-  source = "github.com/brikis98/devops-book//ch3/tofu/modules/asg"
-
-
-
-  # ... (other params omitted) ...
-
-
-
-  target_group_arns = [module.alb.target_group_arn]
-
-}
- -
- -
- -
- -
- -
- -

The preceding code sets the target_group_arns parameter, which will change the ASG behavior in two ways:

- -
- -
- -
    - -
  • - -

    First, it’ll configure the ASG to register all of its instances in the specified target group, including the initial - -set of instances when you first launch the ASG, as well as any new instances that launch later, either as a result of - -a deployment or auto healing or auto scaling.

    - -
  • - -
  • - -

    Second, it’ll configure the ASG to use the ALB for health checks and auto healing. By default, the auto healing - -feature in the ASG is simple: it replaces any instance that has crashed (a hardware issue). However, if the instance - -is still running, and it’s the app that crashed or stopped responding (a software issue), the ASG won’t know to - -replace it. Configuring the ASG to use the ALB for health checks tells the ASG to replace an instance if it fails - -the load balancer’s health check, which gives you more robust auto healing, as the load balancer health check will - -detect both hardware and software issues.

    - -
  • - -
- -
- -
- -

The final change to the asg-sample module is to add the load balancer’s domain name as an output variable in - -outputs.tf, as shown in Example 45:

- -
- -
- -
Example 45. Output the ALB domain name (ch3/tofu/live/asg-sample/outputs.tf)
- -
- -
- -
- -
output "alb_dns_name" {
-
-  value = module.alb.alb_dns_name
-
-}
- -
- -
- -
- -
- -
- -

To deploy the module, make sure OpenTofu is installed, authenticate to AWS as described in - -Authenticating to AWS on the command line, and run the following commands:

- -
- -
- -
- -
$ tofu init
-
-$ tofu apply
- -
- -
- -
- -

After a few minutes, everything should be deployed, and you should see the ALB domain name as an output:

- -
- -
- -
- -
Apply complete! Resources: 10 added, 0 changed, 0 destroyed.
-
-
-
-Outputs:
-
-
-
-alb_dns_name = "sample-app-tofu-656918683.us-east-2.elb.amazonaws.com"
- -
- -
- -
- -

Open this domain name up in your web browser, and you should see "Hello, World!" once again. Congrats, you now have - -a single endpoint, the load balancer domain name, that you can give your users, and when users hit it, the load balancer - -will distribute their requests across all your apps in your ASG!

- -
- -
- -
- -

Example: Roll Out Updates with OpenTofu and Auto Scaling Groups

- -
- -

You’ve seen the initial deployment with VM orchestration, but what about rolling out updates? Most of the VM - -orchestration tools have support for zero-downtime deployments and various deployment strategies. For example, the - -ASGs in AWS have native support for a feature called - -instance refresh, which can update - -your instances automatically by doing a rolling deployment. Example 46 shows how to enable - -instance refresh in the asg module:

- -
- -
- -
Example 46. Enable instance refresh for the ASG (ch3/tofu/live/asg-sample/main.tf)
- -
- -
- -
- -
module "asg" {
-
-  source = "github.com/brikis98/devops-book//ch3/tofu/modules/asg"
-
-
-
-  # ... (other params omitted) ...
-
-
-
-  instance_refresh = {
-
-    min_healthy_percentage = 100  # (1)
-
-    max_healthy_percentage = 200  # (2)
-
-    auto_rollback          = true # (3)
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

The preceding code sets the following parameters:

- -
- -
- -
    - -
  1. - -

    min_healthy_percentage: Setting this to 100% means that the cluster will never have fewer than the desired number - -of instances (initially, three), even during deployment. Whereas with server orchestration, you updated instances in - -place, with VM orchestration, you’ll deploy new instances, as per the next parameter.

    - -
  2. - -
  3. - -

    max_healthy_percentage: Setting this to 200% means that to deploy updates, the cluster will deploy totally new - -instances, up to twice the original size of the cluster, wait for the new instances to pass health checks, and then - -undeploy the old instances. So if you started with three instances, then during deployment, you’ll go up to six - -instances, with three new and three old, and when the new instances pass health checks, you’ll go back to three - -instances by undeploying the three old ones.

    - -
  4. - -
  5. - -

    auto_rollback: If something goes wrong during deployment, and the new instances fail to pass health checks, this - -setting will automatically initiate a rollback, putting your cluster back to its previous working condition.

    - -
  6. - -
- -
- -
- -

Run apply one more time to enable the instance refresh setting. Once that’s done, you can try rolling out a change. - -For example, update app.js in the packer folder to respond with "Fundamentals of DevOps!", as shown in - -Example 47:

- -
- -
- -
Example 47. Update the app to respond with the text "Fundamentals of DevOps!" (ch3/packer/app.js)
- -
- -
- -
- -
res.end('Fundamentals of DevOps!\n');
- -
- -
- -
- -
- -
- -

Next, build a new AMI using Packer:

- -
- -
- -
- -
$ packer build sample-app.pkr.hcl
- -
- -
- -
- -

This will give you a new AMI ID. Update the ami_id in the asg-sample module to this new ID and run apply one - -more time. You should then see a plan output that looks something like this (truncated for readability):

- -
- -
- -
- -
$ tofu apply
-
-
-
-OpenTofu will perform the following actions:
-
-
-
-  # aws_autoscaling_group.sample_app will be updated in-place
-
-  ~ resource "aws_autoscaling_group" "sample_app" {
-
-        # (27 unchanged attributes hidden)
-
-
-
-      ~ launch_template {
-
-            id      = "lt-0bc25ef067814e3c0"
-
-            name    = "sample-app-tofu20240414163932598800000001"
-
-          ~ version = "1" -> (known after apply)
-
-        }
-
-
-
-        # (3 unchanged blocks hidden)
-
-    }
-
-
-
-  # aws_launch_template.sample_app will be updated in-place
-
-  ~ resource "aws_launch_template" "sample_app" {
-
-      ~ image_id       = "ami-0f5b3d9c244e6026d" -> "ami-0d68b7b6546331281"
-
-      ~ latest_version = 1 -> (known after apply)
-
-        # (10 unchanged attributes hidden)
-
-    }
- -
- -
- -
- -

This plan output shows that launch template has changed, due to the new AMI ID, and as a result, the version of the - -launch template used in the ASG has changed. This will result in an instance refresh. Type in yes, hit Enter, and - -AWS will kick off the instance refresh process in the background. If you go to the EC2 Console, click Auto Scaling - -Groups in the left nav, find your ASG, and click the "Instance refresh" tab, you should be able to see the instance - -refresh in progress, as shown in Figure 25.

- -
- -
- -
- -Using the EC2 console to see an ASG instance refresh in progress - -
- -
Figure 25. Using the EC2 console to see an ASG instance refresh in progress
- -
- -
- -

During this process, the ASG will launch three new EC2 instances, and the ALB will start performing health checks. Once - -the new instances start to pass health checks, the ASG will undeploy the old one instances, leaving you with just the - -three new instances running the new code. The whole process should take around five minutes.

- -
- -
- -

During this deployment, the load balancer URL should always return a successful response, as this is a zero-downtime - -deployment. You can even check this by opening a new terminal tab, and running the following Bash one-liner:

- -
- -
- -
- -
$ while true; do curl http://<load_balancer_url>; sleep 1; done
- -
- -
- -
- -

This code runs curl, an HTTP client, in a loop, hitting your ALB once per second and allowing you to see the - -zero-downtime deployment in action. For the first couple minutes, you should see only responses from the old instances: - -"Hello, World!" Then, as new instances start to pass health checks, the ALB will begin sending traffic to them, and you - -should see the response from the ALB alternate between "Hello, World!" and "Fundamentals of DevOps!" After another couple - -minutes, the "Hello, World!" message will disappear, and you’ll see only "Fundamentals of DevOps!", which means all the - -old instances have been shut down. The output will look something like this:

- -
- -
- -
- -
Hello, World!
-
-Hello, World!
-
-Hello, World!
-
-Hello, World!
-
-Hello, World!
-
-Hello, World!
-
-Fundamentals of DevOps!
-
-Hello, World!
-
-Fundamentals of DevOps!
-
-Hello, World!
-
-Fundamentals of DevOps!
-
-Hello, World!
-
-Fundamentals of DevOps!
-
-Hello, World!
-
-Fundamentals of DevOps!
-
-Hello, World!
-
-Fundamentals of DevOps!
-
-Fundamentals of DevOps!
-
-Fundamentals of DevOps!
-
-Fundamentals of DevOps!
-
-Fundamentals of DevOps!
-
-Fundamentals of DevOps!
- -
- -
- -
- -

Congrats, you’ve now seen VM orchestration in action, including rolling out changes following immutable infrastructure - -practices!

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for using OpenTofu for VM orchestration:

- -
- -
- -
    - -
  • - -

    Figure out how to scale the number of instances in the ASG running the sample app from three to four. - -How does this compare to adding a fourth instance to the Ansible code?

    - -
  • - -
  • - -

    Try restarting one of the instances using the AWS Console. How does the ALB handle it while the instance is - -rebooting? Does the sample app still work after the reboot? How does this compare to the behavior you saw when - -restarting an instance with Ansible?

    - -
  • - -
  • - -

    Try terminating one of the instances using the AWS Console. How does the ALB handle it? Do you need to do - -anything to restore the instance?

    - -
  • - -
- -
- -
- -
- -
- -

When you’re done experimenting with the ASG, run tofu destroy to undeploy all your infrastructure. This ensures that - -your account doesn’t start accumulating any unwanted charges.

- -
- -
- -
- -
- -

Container Orchestration

- -
- -

The idea with container orchestration is to do the following:

- -
- -
- -
    - -
  • - -

    Create container images that have your apps and all their dependencies fully installed and configured.

    - -
  • - -
  • - -

    Deploy the container images across a cluster of servers, with potentially multiple containers per server, packed in - -as efficiently as possible (bin packing).

    - -
  • - -
  • - -

    Automatically scale the number of servers or the number of containers up or down depending on load.

    - -
  • - -
  • - -

    When you need to deploy an update, create new container images, deploy them into the cluster, and then undeploy the - -old containers.

    - -
  • - -
- -
- -
- -

Although containers have been around for decades[16], container orchestration started to explode in popularity - -around 2013, with the emergence of Docker, a tool for building, running, and sharing containers, and - -Kubernetes, a container orchestration tool. The reason for this popularity is that containers and container - -orchestration offer a number of advantages over VMs and VM orchestration:

- -
- -
- -
- -
Speed
- -
- -

Containers typically build faster than VMs, especially with caching. Moreover, container orchestration tools - -typically deploy containers faster than VMs. So the build & deploy cycle with containers can be considerably - -faster: you can expect 10-20 minutes for VMs, but just 1-5 minutes for containers.

- -
- -
Efficiency
- -
- -

Most container orchestration tools have a built-in scheduler to decide which servers in your cluster - -should run which containers, using bin packing algorithms to use the available resources as efficiently as - -possible.[17]

- -
- -
Portability
- -
- -

You can run containers and container orchestration tools everywhere, including on-prem and in all the - -major cloud providers. Moreover, the most popular container tool, Docker, and container orchestration tool, - -Kubernetes, are both open source. All of this means that using containers reduces lock-in to any single vendor.

- -
- -
Local development
- -
- -

You can also run containers and container orchestration tools in your own local dev environment, - -as containers typically have reasonable file sizes, boot quickly, and have little CPU/memory overhead. This is a huge - -boon to local development, as you could now realistically run your entire tech stack—e.g., Kubernetes and Docker - -containers for multiple services—completely locally. While it’s possible to run VMs locally too, VM images tend to be - -considerably bigger, slower to boot, and have more CPU and memory overhead, so using them for local development is - -relatively uncommon; moreover, there is no practical way to run most VM orchestration tools locally: e.g., there’s no - -way to deploy an AWS ASG on your own computer.

- -
- -
Functionality
- -
- -

Container orchestration tools solved more orchestration problems out-of-the-box than VM - -orchestration tools. For example, Kubernetes has built-in solutions for deployment, updates, auto scaling, auto - -healing, configuration, secrets management, service discovery, and disk management.

- -
- -
- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #3
- -
- -

Container orchestration is an immutable infrastructure approach where you deploy and manage container images across a - -cluster of servers.

- -
- -
- -
- -
- -

There are many container tools out there, including Docker, - -Moby, CRI-O, Podman, - -runc, and buildkit. - -Likewise, there are many container orchestration tools out there, including Kubernetes, - -Nomad, Docker Swarm, - -Amazon ECS, Marathon / - -Mesos, and OpenShift. - -The most popular, by far, are Docker and Kubernetes—so much so their names are nearly synonymous with containers and - -container orchestration, respectively—so that’s what we’ll focus on in this blog post series.

- -
- -
- -

In the next several sections, you’ll learn to use Docker, followed by Kubernetes, and finally, you’ll learn to use - -Docker and Kubernetes in AWS. Let’s get into it!

- -
- -
- -

Example: A Crash Course on Docker

- -
- -

As you may remember from Section 2.4, Docker images are like self-contained "snapshots" of the operating - -system (OS), the software, the files, and all other relevant details. Let’s now see Docker in action.

- -
- -
- -

First, if you don’t have Docker installed already, follow the instructions on the - -Docker website to install Docker Desktop for your operating system. Once it’s - -installed, you should have the docker command available on your command line. You can use the docker run command to - -run Docker images locally:

- -
- -
- -
- -
$ docker run <IMAGE> [COMMAND]
- -
- -
- -
- -

where IMAGE is the Docker image to run and COMMAND is an optional command to execute. For example, here’s how you - -can run a Bash shell in an Ubuntu 24.04 Docker image (note that the following command includes the -it flag so you - -get an interactive shell where you can type):

- -
- -
- -
- -
$ docker run -it ubuntu:24.04 bash
-
-
-
-Unable to find image 'ubuntu:24.04' locally
-
-24.04: Pulling from library/ubuntu
-
-Digest: sha256:3f85b7caad41a95462cf5b787d8a04604c
-
-Status: Downloaded newer image for ubuntu:24.04
-
-
-
-root@d96ad3779966:/#
- -
- -
- -
- -

And voilà, you’re now in Ubuntu! If you’ve never used Docker before, this can seem fairly magical. Try running some - -commands. For example, you can look at the contents of /etc/os-release to verify you really are in Ubuntu:

- -
- -
- -
- -
root@d96ad3779966:/# cat /etc/os-release
-
-PRETTY_NAME="Ubuntu 24.04 LTS"
-
-NAME="Ubuntu"
-
-VERSION_ID="24.04"
-
-(...)
- -
- -
- -
- -

How did this happen? Well, first, Docker searches your local filesystem for the ubuntu:24.04 image. If you don’t - -have that image downloaded already, Docker downloads it automatically from Docker Hub, which - -is a Docker Registry that contains shared Docker images. The ubuntu:24.04 image happens to be a public Docker - -image—an official one maintained by the Docker team—so you’re able to download it without any authentication. It’s also - -possible to create private Docker images that only certain authenticated users can use, as you’ll see later in this - -blog post.

- -
- -
- -

Once the image is downloaded, Docker runs the image, executing the bash command, which starts an interactive Bash - -prompt, where you can type. Try running the ls command to see the list of files:

- -
- -
- -
- -
root@d96ad3779966:/# ls -al
-
-total 56
-
-drwxr-xr-x   1 root root 4096 Feb 22 14:22 .
-
-drwxr-xr-x   1 root root 4096 Feb 22 14:22 ..
-
-lrwxrwxrwx   1 root root    7 Jan 13 16:59 bin -> usr/bin
-
-drwxr-xr-x   2 root root 4096 Apr 15  2020 boot
-
-drwxr-xr-x   5 root root  360 Feb 22 14:22 dev
-
-drwxr-xr-x   1 root root 4096 Feb 22 14:22 etc
-
-drwxr-xr-x   2 root root 4096 Apr 15  2020 home
-
-lrwxrwxrwx   1 root root    7 Jan 13 16:59 lib -> usr/lib
-
-drwxr-xr-x   2 root root 4096 Jan 13 16:59 media
-
-(...)
- -
- -
- -
- -

You might notice that’s not your filesystem. That’s because Docker images run in containers that are isolated at the - -userspace level: when you’re in a container, you can only see the filesystem, memory, networking, etc., in that - -container. Any data in other containers, or on the underlying host operating system, is not accessible to you, and any - -data in your container is not visible to those other containers or the underlying host operating system. This is one of - -the things that makes Docker useful for running applications: the image format is self-contained, so Docker images run - -the same way no matter where you run them, and no matter what else is running there.

- -
- -
- -

To see this in action, write some text to a test.txt file as follows:

- -
- -
- -
- -
root@d96ad3779966:/# echo "Hello, World!" > test.txt
- -
- -
- -
- -

Next, exit the container by hitting Ctrl-D, and you should be back in your original command prompt on your underlying - -host OS. If you try to look for the test.txt file you just wrote, you’ll see that it doesn’t exist: the container’s - -filesystem is totally isolated from your host OS.

- -
- -
- -

Now, try running the same Docker image again:

- -
- -
- -
- -
$ docker run -it ubuntu:24.04 bash
-
-root@3e0081565a5d:/#
- -
- -
- -
- -

Notice that this time, since the ubuntu:24.04 image is already downloaded, the container starts almost instantly. - -This is another reason Docker is useful for running applications: unlike virtual machines, containers are lightweight, - -boot up quickly, and incur little CPU or memory overhead.

- -
- -
- -

You may also notice that the second time you fired up the container, the command prompt looked different. That’s - -because you’re now in a totally new container; any data you wrote in the previous one is no longer accessible to you. - -Run ls -al and you’ll see that the test.txt file does not exist. Containers are isolated not only from the host OS - -but also from each other.

- -
- -
- -

Hit Ctrl-D again to exit the container, and back on your host OS, run the docker ps -a command:

- -
- -
- -
- -
$ docker ps -a
-
-CONTAINER ID   IMAGE            COMMAND    CREATED          STATUS
-
-3e0081565a5d   ubuntu:24.04     "bash"     5 min ago    Exited (0) 16 sec ago
-
-d96ad3779966   ubuntu:24.04     "bash"     14 min ago   Exited (0) 5 min ago
- -
- -
- -
- -

This will show you all the containers on your system, including the stopped ones (the ones you exited). You can start - -a stopped container again by using the docker start <ID> command, setting ID to an ID from the CONTAINER ID column - -of the docker ps output. For example, here is how you can start the first container up again (and attach an - -interactive prompt to it via the -ia flags):

- -
- -
- -
- -
$ docker start -ia d96ad3779966
-
-root@d96ad3779966:/#
- -
- -
- -
- -

You can confirm this is really the first container by outputting the contents of test.txt:

- -
- -
- -
- -
root@d96ad3779966:/# cat test.txt
-
-Hello, World!
- -
- -
- -
- -

Hit Ctrl-D once more to exit the container and get back to your host OS.

- -
- -
- -

Now that you’ve seen the basics of Docker, let’s look at what it takes to create your own Docker images, and use them - -to run web apps.

- -
- -
- -
- -

Example: Create a Docker Image for a Node.js app

- -
- -

Let’s see how a container can be used to run a web app: in particular, the Node.js sample app you’ve been using - -throughout this blog post series. Create a new folder called docker:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch3/docker
-
-$ cd ch3/docker
- -
- -
- -
- -

Copy app.js from the server orchestration section into the docker folder (note: you do not need to copy - -app.config.js this time):

- -
- -
- -
- -
$ cp ../ansible/roles/sample-app/files/app.js .
- -
- -
- -
- -

Next, create a file called Dockerfile, with the contents shown in Example 48:

- -
- -
- -
Example 48. Dockerfile for the Node.js sample-app (ch3/docker/Dockerfile)
- -
- -
- -
- -
# (1)
-
-FROM node:21.7
-
-
-
-# (2)
-
-WORKDIR /home/node/app
-
-
-
-# (3)
-
-COPY app.js .
-
-
-
-# (4)
-
-EXPOSE 8080
-
-
-
-# (5)
-
-USER node
-
-
-
-# (6)
-
-CMD ["node", "app.js"]
- -
- -
- -
- -
- -
- -

Just as you used a Packer template to define how to build a VM image for your sample app, this Dockerfile is a - -template that defines how to build a Docker image for your sample app. This Dockerfile does the following:

- -
- -
- -
    - -
  1. - -

    It starts with the official Node.js Docker image from Docker Hub as the base. One - -of the advantages of Docker is that it’s easy to share Docker images, so instead of having to figure out how to - -install Node.js yourself, you can use the official image, which is maintained by the Node.js team.

    - -
  2. - -
  3. - -

    Set the working directory for the rest of the build.

    - -
  4. - -
  5. - -

    Copy app.js into the Docker image.

    - -
  6. - -
  7. - -

    This tells the Docker image to advertise that the app within it will listen on port 8080. When someone uses your - -Docker image, they can use the information from EXPOSE to figure out which ports they wish to expose. You’ll see - -an example of this shortly.

    - -
  8. - -
  9. - -

    Use the node user (created as part of the official Node.js Docker image) instead of the root user when running - -this app.

    - -
  10. - -
  11. - -

    When you run the Docker image, this will be the default command that it executes. Note that you typically do not - -need to use a process supervisor for Docker images, as Docker orchestration tools take care of process supervision, - -resource usage (e.g., CPU, memory), and so on, automatically. Also note that just about all container - -orchestration tools expect your containers to run apps in the "foreground," blocking until they exit, and logging - -directly to stdout and stderr.

    - -
  12. - -
- -
- -
- -

To build a Docker image from this Dockerfile, use the docker build command:

- -
- -
- -
- -
$ docker build -t sample-app:v1 .
- -
- -
- -
- -

The -t flag is the tag (name) to use for the Docker image: the preceding code sets the image name to "sample-app" and - -the version to "v1." Later on, if you make changes to the sample app, you’ll be able to build a new Docker image and - -give it a new version, such as "v2." The dot (.) at the end tells docker build to run the build in the current - -directory (which should be the folder that contains your Dockerfile). When the build finishes, you can use the - -docker run command to run your new image:

- -
- -
- -
- -
$ docker run --init sample-app:v1
-
- Listening on port 8080
- -
- -
- -
- -

Note the use of --init: Node.js doesn’t handle kernel signals (such as Ctrl+C) properly, so this is necessary to - -ensure that the app will exit correctly if you hit Ctrl+C. See - -Docker and - -Node.js best practices for more information, including other practices that you should use with Node.js Docker images.

- -
- -
- -

Your app is now listening on port 8080! However, if you open a new terminal on your host operating system and try to - -access the sample app, it won’t work:

- -
- -
- -
- -
$ curl localhost:8080
-
-curl: (7) Failed to connect to localhost port 8080: Connection refused
- -
- -
- -
- -

What’s the problem? Actually, it’s not a problem but a feature! Docker containers are isolated from the host operating - -system and other containers, not only at the filesystem level but also in terms of networking. So while the container - -really is listening on port 8080, that is only on a port inside the container, which isn’t accessible on the host OS. - -If you want to expose a port from the container on the host OS, you have to do it via the -p flag.

- -
- -
- -

First, hit Ctrl-C to shut down the sample-app container: note that it’s Ctrl-C this time, not Ctrl-D, as you’re - -shutting down a process, rather than exiting an interactive prompt. Now rerun the container but this time with the - --p flag as follows:

- -
- -
- -
- -
$ docker run -p 8080:8080 --init sample-app:v1
-
- Listening on port 8080
- -
- -
- -
- -

Adding -p 8080:8080 to the command tells Docker to expose port 8080 inside the container on port 8080 of the host OS. - -You know to use port 8080 here, as you built this Docker image yourself, but if this was someone else’s image, you - -could use docker inspect on the image, and that will tell you about any ports that image labeled with EXPOSE. - -In another terminal on your host OS, you should now be able to see the sample app working:

- -
- -
- -
- -
$ curl localhost:8080
-
-Hello, World!
- -
- -
- -
- -

Congrats, you now know how to run a web app locally using Docker! However, while using docker run directly is fine - -for local testing and learning, it’s not the way you’d run Dockerized apps in production. For that, you typically want - -to use a container orchestration tool such as Kubernetes, which is the topic of the next section.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Cleaning Up Containers
- -
- -

Every time you run docker run and exit, you are leaving behind containers, which take up disk space. You may wish to - -clean them up with the docker rm <CONTAINER_ID> command, where CONTAINER_ID is the ID of the container from the - -docker ps output. Alternatively, you could include the --rm flag in your docker run command to have Docker - -automatically clean up when you exit the container.

- -
- -
- -
- -
- -
- -

Example: Deploy a Dockerized App with Kubernetes

- -
- -

Kubernetes is a container orchestration tool, which means it’s a platform for running and managing containers - -on your servers, including scheduling, auto healing, auto scaling, load balancing, and much more. Under the hood, - -Kubernetes consists of two main pieces, as shown in Figure 26:

- -
- -
- -
- -The Kubernetes architecture consists of a control plane and worker nodes - -
- -
Figure 26. The Kubernetes architecture consists of a control plane and worker nodes
- -
- -
- -
- -
Control plane
- -
- -

The control plane is responsible for managing the Kubernetes cluster. It is the "brains" of the operation, responsible - -for storing the state of the cluster, monitoring containers, and coordinating actions across the cluster. It also - -runs the API server, which provides an API you can use from command-line tools (e.g., kubectl), web UIs (e.g., the - -Kubernetes Dashboard), and IaC tools (e.g., OpenTofu) to control what’s happening in the cluster.

- -
- -
Worker nodes
- -
- -

The worker nodes are the servers used to actually run your containers. The worker nodes are entirely managed by the - -control plane, which tells each worker node what containers it should run.

- -
- -
- -
- -
- -

Kubernetes is open source, and one of its strengths is that you can run it anywhere: in any public cloud (e.g., AWS, - -Azure, GCP), in your own datacenter, and even on your personal computer. A little later in this - -blog post, I’ll show you how you can run Kubernetes in the cloud (in AWS), but for now, let’s start - -small and run it locally. This is easy to do if you installed a relatively recent version of Docker Desktop, as it has - -the ability to fire up a Kubernetes cluster locally with just a few clicks.

- -
- -
- -

If you open Docker Desktop’s preferences on your computer, you should see Kubernetes in the nav, as shown in - -Figure 27.

- -
- -
- -
- -Enable Kubernetes on Docker Desktop - -
- -
Figure 27. Enable Kubernetes on Docker Desktop.
- -
- -
- -

If it’s not enabled already, check the Enable Kubernetes checkbox, click Apply & Restart, and wait a few minutes - -for that to complete. In the meantime, follow the instructions on the - -Kubernetes website to install kubectl, which is the command-line tool for - -interacting with Kubernetes.

- -
- -
- -

To use kubectl, you must first update its configuration file, which lives in $HOME/.kube/config (that is, the - -.kube folder of your home directory), to tell it what Kubernetes cluster to connect to. Conveniently, when you enable - -Kubernetes in Docker Desktop, it updates this config file for you, adding a docker-desktop entry to it, so all you - -need to do is tell kubectl to use this configuration as follows:

- -
- -
- -
- -
$ kubectl config use-context docker-desktop
-
-Switched to context "docker-desktop".
- -
- -
- -
- -

Now you can check if your Kubernetes cluster is working with the get nodes command:

- -
- -
- -
- -
$ kubectl get nodes
-
-NAME             STATUS   ROLES           AGE     VERSION
-
-docker-desktop   Ready    control-plane   2m31s   v1.29.1
- -
- -
- -
- -

The get nodes command shows you information about all the nodes in your cluster. Since you’re running Kubernetes - -locally, your computer is the only node, and it’s running both the control plane and acting as a worker node. You’re - -now ready to run some Docker containers!

- -
- -
- -

To deploy something in Kubernetes, you create Kubernetes objects, which are persistent entities you write to the - -Kubernetes cluster (via the API server) that record your intent: e.g., your intent to have specific Docker images - -running. The cluster runs a reconciliation loop, which continuously checks the objects you stored in it and works to - -make the state of the cluster match your intent.

- -
- -
- -

There are many different types of Kubernetes objects available. The one we’ll use to deploy your sample app is a - -Kubernetes Deployment, which is a declarative way to manage an application in Kubernetes. The Deployment allows you - -to declare what Docker images to run, how many copies of them to run (replicas), a variety of settings for - -those images (e.g., CPU, memory, port numbers, environment variables), and so on, and the Deployment will then work to - -ensure that the requirements you declared are always met.

- -
- -
- -

One way to interact with Kubernetes is to create YAML files to define your Kubernetes objects, and to use the - -kubectl apply command to submit those objects to the cluster. Create a new folder called kubernetes to store these - -YAML files:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch3/kubernetes
-
-$ cd ch3/kubernetes
- -
- -
- -
- -

Within the kubernetes folder, create a file called sample-app-deployment.yml with the contents shown in - -Example 49:

- -
- -
- -
Example 49. The YAML for a Kubernetes Deployment (ch3/kubernetes/sample-app-deployment.yml)
- -
- -
- -
- -
apiVersion: apps/v1
-
-kind: Deployment                  # (1)
-
-metadata:                         # (2)
-
-  name: sample-app-deployment
-
-spec:
-
-  replicas: 3                     # (3)
-
-  template:                       # (4)
-
-    metadata:                     # (5)
-
-      labels:
-
-        app: sample-app-pods
-
-    spec:
-
-      containers:                 # (6)
-
-        - name: sample-app        # (7)
-
-          image: sample-app:v1    # (8)
-
-          ports:
-
-            - containerPort: 8080 # (9)
-
-          env:                    # (10)
-
-            - name: NODE_ENV
-
-              value: production
-
-  selector:                       # (11)
-
-    matchLabels:
-
-      app: sample-app-pods
- -
- -
- -
- -
- -
- -

This YAML file gives you a lot of functionality for just ~20 lines of code:

- -
- -
- -
    - -
  1. - -

    The kind keyword specifies that this is Kubernetes object is a Deployment.

    - -
  2. - -
  3. - -

    Every Kubernetes object includes metadata that can be used to identify and target that object in API calls. - -Kubernetes makes heavy use of metadata and labels to keep the system highly flexible and loosely coupled. The - -preceding code sets the name of the Deployment to "sample-app-deployment."

    - -
  4. - -
  5. - -

    The Deployment will run 3 replicas.

    - -
  6. - -
  7. - -

    This is the pod template—the blueprint—that defines what this Deployment will deploy and manage. It’s similar to - -the launch template you saw with AWS ASGs. In Kubernetes, instead of deploying one container at a time, you deploy - -pods, which are groups of containers that are meant to be deployed together. For example, you could have a pod - -with one container to run a web app (e.g., the sample app) and another container that gathers metrics on the web - -app and sends them to a central service (e.g., Datadog). So this template block allows you to configure your - -pods, specifying what container(s) to run, the ports to use, environment variables to set, and so on.

    - -
  8. - -
  9. - -

    Templates can be used separately from Deployments, so they have separate metadata which allows you to identify and - -target that template in API calls (this is another example of Kubernetes trying to be highly flexible and - -decoupled). The preceding code sets the "app" label to "sample-app-pods." You’ll see how this is used shortly.

    - -
  10. - -
  11. - -

    Inside the pod template, you define one or more containers to run in that pod.

    - -
  12. - -
  13. - -

    This simple example configures just a single container to run, giving it the name "sample-app."

    - -
  14. - -
  15. - -

    The Docker image to run for this container. This is the Docker image you built earlier in the - -post.

    - -
  16. - -
  17. - -

    This tells Kubernetes that the Docker image listens for requests on port 8080.

    - -
  18. - -
  19. - -

    The env configuration lets you set environment variables for the container. The preceding code sets the - -NODE_ENV environment variable to "production" to tell the Node.js app and all its dependencies to run in - -production mode.

    - -
  20. - -
  21. - -

    The selector block tells the Kubernetes Deployment what to target: that is, which pod template to deploy - -and manage. Why doesn’t the Deployment just assume that the pod defined within that Deployment is the one you want - -to target? Because Deployments and templates can be defined completely separately, so you always need to specify a - -selector to tell the Deployment what to target (this is yet another example of Kubernetes trying to be - -flexible and decoupled).

    - -
  22. - -
- -
- -
- -

You can use the kubectl apply command to apply your Deployment configuration:

- -
- -
- -
- -
$ kubectl apply -f sample-app-deployment.yml
-
-deployment.apps/sample-app-deployment created
- -
- -
- -
- -

This command should complete very quickly. How do you know if it actually worked? To answer that question, you can - -use kubectl to explore your cluster. First, run the get deployments command, and you should see your Deployment:

- -
- -
- -
- -
$ kubectl get deployments
-
-NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
-
-sample-app-deployment   3/3     3            3           1m
- -
- -
- -
- -

Here, you can see how Kubernetes uses metadata, as the name of the Deployment (sample-app-deployment) comes from your - -metadata block. You can use that metadata in API calls yourself. For example, to get more details about a specific - -Deployment, you can run describe deployment <NAME>, where <NAME> is the name from the metadata:

- -
- -
- -
- -
$ kubectl describe deployment sample-app-deployment
-
-Name:                   sample-app-deployment
-
-CreationTimestamp:      Mon, 15 Apr 2024 12:28:19 -0400
-
-Selector:               app=sample-app-pods
-
-Replicas:               3 desired | 3 updated | 3 total | 3 available
-
-StrategyType:           RollingUpdate
-
-MinReadySeconds:        0
-
-RollingUpdateStrategy:  0 max unavailable, 3 max surge
-
-(... truncated for readability ...)
- -
- -
- -
- -

This Deployment is reporting that all 3 replicas are available. To see those replicas, run the get pods command:

- -
- -
- -
- -
$ kubectl get pods
-
-NAME                                     READY   STATUS    RESTARTS   AGE
-
-sample-app-deployment-64f97797fb-hcskq   1/1     Running   0          4m23s
-
-sample-app-deployment-64f97797fb-p7zjk   1/1     Running   0          4m23s
-
-sample-app-deployment-64f97797fb-qtkl8   1/1     Running   0          4m23s
- -
- -
- -
- -

And to get the details about a specific pod, copy its name, and run describe pod:

- -
- -
- -
- -
$ kubectl describe pod sample-app-deployment-64f97797fb-hcskq
-
-Name:             sample-app-deployment-64f97797fb-hcskq
-
-Node:             docker-desktop/192.168.65.3
-
-Start Time:       Mon, 15 Apr 2024 14:08:04 -0400
-
-Labels:           app=sample-app-pods
-
-                  pod-template-hash=64f97797fb
-
-Status:           Running
-
-IP:               10.1.0.31
-
-Controlled By:  ReplicaSet/sample-app-deployment-64f97797fb
-
-Containers:
-
-  sample-app:
-
-    Image:          sample-app:v1
-
-    Port:           8080/TCP
-
-    Host Port:      0/TCP
-
-(... truncated for readability ...)
- -
- -
- -
- -

From this output, you can see the containers that are running for each pod, which in this case, is just one container - -per pod running the sample-app:v1 Docker image you built earlier.

- -
- -
- -

You can also see the logs for a single pod by using the logs command, which is useful for understanding what’s going - -on and debugging:

- -
- -
- -
- -
$ kubectl logs sample-app-deployment-64f97797fb-hcskq
-
-Listening on port 8080
- -
- -
- -
- -

Ah, there’s that familiar log output. You now have three replicas of your sample app running. But, just as you saw with - -server and VM orchestration, users will want just one endpoint to hit, so now it’s time to figure out how to do load - -balancing with Kubernetes.

- -
- -
- -
- -

Example: Deploy a Load Balancer with Kubernetes

- -
- -

Kubernetes has built-in support for load balancing. The typical way to set it up is to make use of another Kubernetes - -object, called a Kubernetes Service, which is a way to expose an app running in Kubernetes as a service you can - -talk to over the network. Example 50 shows the YAML code for a Kubernetes service, which you - -should put in a file called sample-app-service.yml:

- -
- -
- -
Example 50. The YAML for a Kubernetes Service (ch3/kubernetes/sample-app-service.yml)
- -
- -
- -
- -
apiVersion: v1
-
-kind: Service                    # (1)
-
-metadata:                        # (2)
-
-  name: sample-app-loadbalancer
-
-spec:
-
-  type: LoadBalancer             # (3)
-
-  selector:
-
-    app: sample-app-pods         # (4)
-
-  ports:
-
-    - protocol: TCP
-
-      port: 80                   # (5)
-
-      targetPort: 8080           # (6)
- -
- -
- -
- -
- -
- -

Here’s what this code does:

- -
- -
- -
    - -
  1. - -

    This Kubernetes object is a Service.

    - -
  2. - -
  3. - -

    You have to configure metadata for every Kubernetes object. The preceding code sets the name of the - -Service to "sample-app-loadbalancer."

    - -
  4. - -
  5. - -

    Configure the Service to be a load balancer.[18] Under the hood, depending on what sort of Kubernetes cluster you’re running, and how you configure - -that cluster, the actual type of load balancer you get will be different: for example, if you run this code in AWS, - -you’ll get an AWS ELB; if you run it in GCP, you’ll get a Cloud Load Balancer; and if you run it locally, as - -you will shortly, you’ll get a simple load balancer that is built into the Kubernetes distribution in Docker - -Desktop.

    - -
  6. - -
  7. - -

    Distribute traffic across the pods you defined in the Deployment.

    - -
  8. - -
  9. - -

    The Service will receive requests on port 80, the default HTTP port.

    - -
  10. - -
  11. - -

    The Service will forward requests to port 8080 of the pods.

    - -
  12. - -
- -
- -
- -

You apply the Service the same way, using kubectl apply:

- -
- -
- -
- -
$ kubectl apply -f sample-app-service.yml
-
-service/sample-app-loadbalancer created
- -
- -
- -
- -

To see if your service worked, use the get services command:

- -
- -
- -
- -
$ kubectl get services
-
-NAME                     TYPE          CLUSTER-IP     EXTERNAL-IP  PORT(S)
-
-kubernetes               ClusterIP     10.96.0.1      <none>       443/TCP
-
-sample-app-loadbalancer  LoadBalancer  10.111.250.21  localhost    80:30910/TCP
- -
- -
- -
- -

The first service in the list is Kubernetes itself, which you can ignore. The second is the Service you created, with - -the name sample-app-loadbalancer (based on its own metadata block). You can get more details about your service - -by using the describe service command:

- -
- -
- -
- -
$ kubectl describe service sample-app-loadbalancer
-
-Name:                     sample-app-loadbalancer
-
-Selector:                 app=sample-app-pods
-
-Type:                     LoadBalancer
-
-LoadBalancer Ingress:     localhost
-
-Port:                     <unset>  80/TCP
-
-TargetPort:               8080/TCP
-
-(... truncated for readability ...)
- -
- -
- -
- -

You can see that the load balancer is listening on localhost, at port 80, so you can test it out by opening - -http://localhost in your browser, or using curl:

- -
- -
- -
- -
$ curl http://localhost
-
-Hello, World!
- -
- -
- -
- -

Congrats, you’re now able to deploy Docker containers with Kubernetes and distribute traffic across your containers - -with a load balancer! But what if you want to update your app?

- -
- -
- -
- -

Example: Roll Out Updates with Kubernetes

- -
- -

Kubernetes Deployments have built-in support for rolling updates. Open up sample-app-deployment.yml and add the - -code shown in Example 51 to the bottom of the spec section:

- -
- -
- -
Example 51. The YAML for doing rolling updates (ch3/kubernetes/sample-app-deployment.yml)
- -
- -
- -
- -
spec:
-
-
-
-  # (... other params omitted for clarity ...)
-
-
-
-  strategy:
-
-    type: RollingUpdate
-
-    rollingUpdate:
-
-      maxSurge: 3
-
-      maxUnavailable: 0
- -
- -
- -
- -
- -
- -

This configures the Deployment to do a rolling update where it can deploy up to 3 extra pods during the deployment, - -similar to the instance refresh you saw with ASGs. Run apply to update the Deployment with these changes:

- -
- -
- -
- -
$ kubectl apply -f sample-app-deployment.yml
-
-deployment.apps/sample-app-deployment configured
- -
- -
- -
- -

Now, make a change to the sample app in docker/app.js, such as returning the text "Fundamentals of DevOps!" instead of - -"Hello, World!", as shown in Example 52:

- -
- -
- -
Example 52. Update the app to respond with the text "Fundamentals of DevOps!" (ch3/docker/app.js)
- -
- -
- -
- -
res.end('Fundamentals of DevOps!\n')
- -
- -
- -
- -
- -
- -

To deploy this change, the first step is to build a new Docker image, with v2 as the new version:

- -
- -
- -
- -
$ docker build -t sample-app:v2 .
- -
- -
- -
- -

The build will likely run in less than a second! This is because Docker has a built-in - -build cache, which, if used correctly, can dramatically speed up builds.

- -
- -
- -

Next, open sample-app-deployment.yml one more time, and in the spec section, update the image - -from sample-app:v1 to sample-app:v2, as shown in Example 53:

- -
- -
- -
Example 53. Update the Deployment to use the v2 image (ch3/kubernetes/sample-app-deployment.yml)
- -
- -
- -
- -
spec:
-
-
-
-  # (... other params omitted for clarity ...)
-
-
-
-    spec:
-
-      containers:
-
-        - name: sample-app
-
-          image: sample-app:v2
- -
- -
- -
- -
- -
- -

Run apply one more time to deploy this change:

- -
- -
- -
- -
$ kubectl apply -f sample-app-deployment.yml
-
-deployment.apps/sample-app-deployment configured
- -
- -
- -
- -

In the background, Kubernetes will kick off the rolling update. If you run get pods during this process, you’ll see - -up to six pods running at the same time (three old, three new):

- -
- -
- -
- -
$ kubectl get pods
-
-NAME                                     READY   STATUS    RESTARTS   AGE
-
-sample-app-deployment-64f97797fb-pnh96   1/1     Running   0          15m
-
-sample-app-deployment-64f97797fb-tmprp   1/1     Running   0          15m
-
-sample-app-deployment-64f97797fb-xmjfl   1/1     Running   0          15m
-
-sample-app-deployment-6c5ff6d6ff-fxqd4   1/1     Running   0          21s
-
-sample-app-deployment-6c5ff6d6ff-hvwjx   1/1     Running   0          21s
-
-sample-app-deployment-6c5ff6d6ff-krkcs   1/1     Running   0          21s
- -
- -
- -
- -

After a little while, the three old pods will be undeployed, and you’ll be left with just the new ones. At that point, - -the load balancer will be responding with "Fundamentals of DevOps!"

- -
- -
- -
- -
$ curl http://localhost
-
-Fundamentals of DevOps!
- -
- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Using YAML and kubectl is a great way to learn Kubernetes, and I’m using it in the examples in this - -blog post to avoid introducing extra tools, but raw YAML is not a great choice for production usage. In - -particular, YAML doesn’t have support for variables, templating, for-loops, conditionals, and other programming - -language features that allow for code reuse.

- -
- -
- -

Therefore, when using Kubernetes in production, instead of raw YAML, try out one of the following tools that can solve - -these gaps for you:

- -
- -
- - - -
- -
- -
- -
- -
- -

Example: Deploy a Kubernetes Cluster in AWS Using EKS

- -
- -

So far, you’ve been running Kubernetes locally, which is great for learning and testing. However, for production - -deployments, you’ll need to run a Kubernetes cluster on servers in a data center. Kubernetes is a complicated system: - -it’s more or less a cloud in and of itself, and setting it up and maintaining it is a significant undertaking. - -Fortunately, if you’re using the cloud, most cloud providers have managed Kubernetes offerings that make this - -considerably simpler. The one you’ll learn to use in this blog post series is Amazon’s Elastic Kubernetes Service - -(EKS), which can deploy and manage the control plane and worker nodes for you.

- -
- -
- - - - - - - - - - - -
- -
Warning
- -
- -
Watch out for snakes: EKS is not part of the AWS free tier!
- -
- -

While most of the examples in this book are part of the AWS free tier, Amazon EKS is not: as of June 2024, the - -pricing is $0.10 per hour for the control plane. So please be aware that running - -the examples in this section will cost you a little bit of money.

- -
- -
- -
- -
- -

The blog post series’s sample code repo contains a module called eks-cluster in the ch3/tofu/modules/eks-cluster - -folder that you can use to deploy a simple EKS cluster, which includes the following:

- -
- -
- -
    - -
  • - -

    A fully-managed control plane.

    - -
  • - -
  • - -

    Fully-managed worker nodes. EKS supports - -several types of worker nodes; the - -eks-cluster module uses an EKS managed node group, which deploys worker nodes in an ASG, so you’re making use of - -VM orchestration in addition to container orchestration, although the VM orchestration is mostly invisible to you, as - -AWS handles all the details.

    - -
  • - -
  • - -

    IAM roles with the minimal permissions required by the control plane and worker nodes. An IAM role is similar to an - -IAM user, in that it’s an entity in AWS that can be granted IAM permissions. However, unlike IAM users, IAM roles are - -not associated with any one person and do not have permanent credentials (password or access keys). Instead, a role - -can be assumed by other IAM entities, such as the EKS control plane. So an IAM role is a mechanism for granting - -those services permissions to make certain API calls in your AWS account.

    - -
  • - -
  • - -

    Everything deploys into the Default VPC (see the note on Default VPCs in A Note on Default Virtual Private Clouds).

    - -
  • - -
- -
- -
- -

To use the eks-cluster module, create a new folder called live/eks-sample to use as a root module:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch3/tofu/live/eks-sample
-
-$ cd ch3/tofu/live/eks-sample
- -
- -
- -
- -

Inside of the eks-sample folder, create a file called main.tf, with the contents shown in - -Example 54:

- -
- -
- -
Example 54. Configure the eks-cluster module (ch3/tofu/live/eks-sample/main.tf)
- -
- -
- -
- -
provider "aws" {
-
-  region = "us-east-2"
-
-}
-
-
-
-module "cluster" {
-
-  source = "github.com/brikis98/devops-book//ch3/tofu/modules/eks-cluster"
-
-
-
-  name        = "eks-sample"        # (1)
-
-  eks_version = "1.29"              # (2)
-
-
-
-  instance_type        = "t2.micro" # (3)
-
-  min_worker_nodes     = 1          # (4)
-
-  max_worker_nodes     = 10         # (5)
-
-  desired_worker_nodes = 3          # (6)
-
-}
- -
- -
- -
- -
- -
- -

The preceding code configures the following parameters:

- -
- -
- -
    - -
  1. - -

    name: The name to use for the control plane, worker nodes, and all other resources created by the module.

    - -
  2. - -
  3. - -

    eks_version: The version of Kubernetes to use. A new version comes out roughly once per quarter.

    - -
  4. - -
  5. - -

    instance_type: The type of instance to run for worker nodes.

    - -
  6. - -
  7. - -

    min_worker_nodes: The minimum number of worker nodes to run.

    - -
  8. - -
  9. - -

    max_worker_nodes: The maximum number of worker nodes to run.

    - -
  10. - -
  11. - -

    desired_worker_nodes: The initial number of worker nodes to run.

    - -
  12. - -
- -
- -
- -

To deploy the EKS cluster, authenticate to AWS as described in Authenticating to AWS on the command line, and run the - -following commands:

- -
- -
- -
- -
$ tofu init
-
-$ tofu apply
- -
- -
- -
- -

After 3-5 minutes, the cluster should finish deploying. To explore the cluster with kubectl, you first need to - -authenticate to your cluster. The aws CLI has a built-in command for doing this:

- -
- -
- -
- -
aws eks update-kubeconfig --region <REGION> --name <CLUSTER_NAME>
- -
- -
- -
- -

Where <REGION> is the AWS region you deployed the EKS cluster into and <CLUSTER_NAME> is the name of the EKS - -cluster. The preceding code used us-east-2 and eks-tofu for these, respectively, so you can run the following:

- -
- -
- -
- -
aws eks update-kubeconfig --region us-east-2 --name eks-tofu
- -
- -
- -
- -

Once this is done, try running get nodes:

- -
- -
- -
- -
$ kubectl get nodes
-
-NAME                                          STATUS   ROLES    AGE
-
-ip-172-31-21-41.us-east-2.compute.internal    Ready    <none>   5m
-
-ip-172-31-34-203.us-east-2.compute.internal   Ready    <none>   5m
-
-ip-172-31-4-188.us-east-2.compute.internal    Ready    <none>   5m
- -
- -
- -
- -

This output looks a bit different from when you ran the command with the Kubernetes cluster from Docker Desktop. You - -should see three nodes, each of which is an EC2 instance in your managed node group.

- -
- -
- -

The next step is to try deploying the sample app into the EKS cluster. However, there’s one problem: you’ve created a - -Docker image for the sample app, but that image only lives on your own computer. The EKS cluster in AWS won’t be able - -to fetch the image from your computer, so you need to push the image to a container registry that EKS can read from, as - -described in the next section.

- -
- -
- -
- -

Example: Push a Docker Image to ECR

- -
- -

There are a number of container registries out there, including Docker Hub, Amazon’s - -Elastic Container Registry (ECR), the - -Azure Container Registry, the - -Google Artifact Registry, the - -JFrog Docker Registry, and the - -GitHub - -Container Registry. If you’re using AWS, the easiest one to use is ECR, so let’s set that up.

- -
- -
- -

For each Docker image you want to store in ECR, you have to create an ECR repository (ECR repo for short). The - -blog post series’s sample code repo includes a module called ecr-repo in the ch3/tofu/modules/ecr-repo folder - -that you can use to create an ECR repo.

- -
- -
- -

To use the ecr-repo module, create a new folder called live/ecr-sample to use as a root module:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch3/tofu/live/ecr-sample
-
-$ cd ch3/tofu/live/ecr-sample
- -
- -
- -
- -

In the ecr-sample folder, create a file called main.tf with the contents shown in Example 55:

- -
- -
- -
Example 55. Configure the ecr-repo module (ch3/tofu/live/ecr-sample/main.tf)
- -
- -
- -
- -
provider "aws" {
-
-  region = "us-east-2"
-
-}
-
-
-
-module "repo" {
-
-  source = "github.com/brikis98/devops-book//ch3/tofu/modules/ecr-repo"
-
-
-
-  name = "sample-app"
-
-}
- -
- -
- -
- -
- -
- -

This code will create an ECR repo called "sample-app." Typically, the repo name should match your Docker image name.

- -
- -
- -

You should also create outputs.tf with an output variable, as shown in Example 56:

- -
- -
- -
Example 56. The ecr-sample module output variables (ch3/tofu/live/ecr-sample/outputs.tf)
- -
- -
- -
- -
output "registry_url" {
-
-  value       = module.repo.registry_url
-
-  description = "URL of the ECR repo"
-
-}
- -
- -
- -
- -
- -
- -

The preceding code will output the URL of the ECR repo, which you’ll need to be able to push and pull images. To create - -the ECR repo, run the following commands:

- -
- -
- -
- -
$ tofu init
-
-$ tofu apply
- -
- -
- -
- -

After a few seconds, you should see the registry_url output:

- -
- -
- -
- -
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
-
-
-
-Outputs:
-
-
-
-registry_url = "111111111111.dkr.ecr.us-east-2.amazonaws.com/sample-app"
- -
- -
- -
- -

Copy down that registry_url value, as you’ll need it shortly.

- -
- -
- -

Before you can push your Docker image to this ECR repo, you have to build the image with the right CPU architecture. - -Each Docker image you build is built for a specific CPU architecture: the docker build command, by default, builds - -for whatever CPU architecture you have on your own computer. For example, if you’re on a recent Macbook with an ARM - -CPU (e.g., the M1 or M2), your Docker images will be built for the arm64 architecture. This is a problem if - -you try to run those Docker images in the EKS cluster deployed by the eks-cluster module, as the t2.micro worker - -nodes in that cluster use the amd64 architecture, and won’t be able to run arm64 images.

- -
- -
- -

Therefore, you need to ensure that you build your Docker images for whatever architecture(s) you plan to deploy onto. - -Fortunately, Docker now ships with the buildx command, which makes it easy to build Docker images for multiple - -architectures. The very first time you use buildx, you need to create a multi-platform-builder for your target - -architectures. For example, if you’re on an ARM64 Mac, and you’re going to be deploying onto AMD64 Linux servers, use - -the following command:

- -
- -
- -
- -
$ docker buildx create \
-
-  --use \
-
-  --platform=linux/amd64,linux/arm64 \
-
-  --name multi-platform-builder
- -
- -
- -
- -

Now you can run the following command to build a Docker image of the sample app for both architectures (note the use of - -a new tag, v3, for these images):

- -
- -
- -
- -
$ docker buildx build \
-
-  --platform=linux/amd64,linux/arm64 \
-
-  -t sample-app:v3 \
-
-  .
- -
- -
- -
- -

Once the build is done, to be able to push the Docker image to ECR, you need to tag it using the registry URL of the - -ECR repo that you got from the registry_url output:

- -
- -
- -
- -
docker tag \
-
-  sample-app:v3 \
-
-  <YOUR_ECR_REPO_URL>:v3
- -
- -
- -
- -

Next, you need to authenticate to your ECR repo, which you can do using a combination of the aws CLI and the docker - -CLI, making sure to replace the last argument with the registry URL of your own ECR repo that you got from the - -registry_url output:

- -
- -
- -
- -
$ aws ecr \
-
-  get-login-password \
-
-  --region us-east-2 | \
-
-  docker login \
-
-  --username AWS \
-
-  --password-stdin \
-
-  <YOUR_ECR_REPO_URL>
- -
- -
- -
- -

Finally, you can push the Docker image to your ECR repo:

- -
- -
- -
- -
$ docker push <YOUR_ECR_REPO_URL>:v3
- -
- -
- -
- -

The first time you push, it may take a minute or two to upload the image. Subsequent pushes, due to Docker’s layer - -caching, will be faster.

- -
- -
- -
- -

Example: Deploy a Dockerized App into an EKS Cluster

- -
- -

At this point, you are ready to deploy the sample app Docker image into the EKS cluster. The only change you need to - -make to the YAML you used to deploy locally is to switch the image in kubernetes/sample-app-deployment.yml to the - -v3 ECR repo URL, as shown in Example 57:

- -
- -
- -
Example 57. Update the Deployment to use the Docker image from your ECR repo (ch3/kubernetes/sample-app-deployment.yml)
- -
- -
- -
- -
spec:
-
-
-
-  # (... other params omitted for clarity ...)
-
-
-
-    spec:
-
-      containers:
-
-        - name: sample-app
-
-          image: <YOUR_ECR_REPO_URL>:v3
- -
- -
- -
- -
- -
- -

You can now apply both YAML files to deploy into your EKS cluster:

- -
- -
- -
- -
$ kubectl apply -f sample-app-deployment.yml
-
-$ kubectl apply -f sample-app-service.yml
- -
- -
- -
- -

Deployments to an EKS cluster will take slightly longer than a local Kubernetes cluster, but after a minute or two, - -if you run the get pods command, you should see something like this:

- -
- -
- -
- -
$ kubectl get pods
-
-NAME                                     READY   STATUS    RESTARTS   AGE
-
-sample-app-deployment-59f5c6cd66-nk45z   1/1     Running   0          1m
-
-sample-app-deployment-59f5c6cd66-p5jxz   1/1     Running   0          1m
-
-sample-app-deployment-59f5c6cd66-pmjns   1/1     Running   0          1m
- -
- -
- -
- -

And if you run get services, you should see something like this:

- -
- -
- -
- -
NAME                     TYPE          EXTERNAL-IP                     PORT(S)
-
-kubernetes               ClusterIP     <none>                          443
-
-sample-app-loadbalancer  LoadBalancer  xx.us-east-2.elb.amazonaws.com  80:3225
- -
- -
- -
- -

If you look at the EXTERNAL-IP for sample-app-loadbalancer, you should see the domain name of an AWS ELB. Open this - -URL up in a web browser or using curl:

- -
- -
- -
- -
$ curl xx.us-east-2.elb.amazonaws.com
-
-Fundamentals of DevOps!
- -
- -
- -
- -

If you get "Could not resolve host" errors, this is probably because the load balancer is still booting up or the - -health checks haven’t passed yet. Give it a minute or two more, and try again, and you should see the familiar - -"Fundamentals of DevOps!" text.

- -
- -
- -

Congrats, you’re now running a Dockerized application in a Kubernetes cluster in AWS!

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for using Kubernetes for container orchestration:

- -
- -
- -
    - -
  • - -

    By default, if you deploy a Kubernetes Service of type LoadBalancer into EKS, EKS will create a Classic Load - -Balancer, which is an older type of load balancer that is not generally recommended anymore. In most cases, you - -actually want an Application Load Balancer (ALB), as you saw in the VM orchestration section. To deploy an ALB, you - -need to make a few changes, as explained in the - -AWS documentation.

    - -
  • - -
  • - -

    Try terminating one of the worker node instances using the AWS Console. How does the ELB handle it? How does EKS - -respond? Do you need to do anything to restore the instance or your containers?

    - -
  • - -
  • - -

    Try using kubectl exec to get a shell (like an SSH session) into a running container.

    - -
  • - -
- -
- -
- -
- -
- -

When you’re done experimenting with the EKS cluster, run tofu destroy on both the eks-cluster and ecr-repo - -modules to undeploy all your infrastructure. This ensures that your account doesn’t start accumulating any unwanted - -charges.

- -
- -
- -
- -
- -

Serverless Orchestration

- -
- -

All the orchestration options you’ve seen so far have required you to think about and manage the servers you’re - -using, though a bit less with each step up the abstraction ladder. The idea behind serverless is to allow you to - -focus entirely on your app code, without having to think about servers at all. There are of course still servers there, - -but they are behind the scenes, and fully managed for you.

- -
- -
- -

The original model referred to as "serverless" was Functions as a Service (FaaS), which works as follows:

- -
- -
- -
    - -
  • - -

    Create a deployment package which contains just the source code to run one function (rather than a whole app).

    - -
  • - -
  • - -

    Upload the deployment package to your serverless provider, which is typically a cloud provider like AWS, GCP, or - -Azure (although you can also use tools like Knative to add support for serverless in your - -on-prem Kubernetes cluster).

    - -
  • - -
  • - -

    Configure the serverless provider to trigger your function in response to certain events: e.g., an HTTP request, - -a file upload, a new message in a queue.

    - -
  • - -
  • - -

    When the trigger goes off, the serverless provider executes your function, passing it information about the event - -as an input, and, in some cases, taking the data the function returns as an output, and passing it on elsewhere (e.g., - -sending it as an HTTP response).

    - -
  • - -
  • - -

    When you need to deploy an update, you create a new deployment package and upload it to the serverless provider, who - -will use it to respond to all future triggers.

    - -
  • - -
- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #4
- -
- -

Serverless orchestration is an immutable infrastructure approach where you deploy and manage functions without having - -to think about servers at all.

- -
- -
- -
- -
- -

There are a few key points that are easy to miss that make serverless with the FaaS model stand out from all the other - -orchestration options:

- -
- -
- -
- -
You focus on your code, not on the hardware
- -
- -

The goal of serverless is that you don’t have to think about the - -hardware at all. If your trigger goes off 1,000 times per second or once per year, it’s completely up to the - -serverless provider to manage the servers, clusters, auto scaling, and auto healing that are necessary to handle that - -load.

- -
- -
You focus on your code, not the OS
- -
- -

The deployment package only includes your app code. Notably, it does not - -include anything about the OS or other tooling. Running, securing, and updating the OS is completely handled by the - -serverless provider.

- -
- -
You get even more speed
- -
- -

Serverless deployments are even faster than containers: whereas you can expect the build - -and deploy cycle to take 5-10 minutes with VMs and 1-5 minutes with containers, with serverless, it can take less - -than a minute. This is because the deployment packages are often tiny, containing just a small amount of source code - -for one function, and there are no servers or clusters to spin up, so deployments are fast.

- -
- -
You get even more efficiency
- -
- -

Serverless can make even more efficient use of computing resources than containers: - -instead of scheduling long-running apps, you schedule short-running functions, which you can move around the cluster - -extremely quickly onto any server that has spare resources. That said, most of these benefits accrue to the - -cloud providers, but they do pass some of those cost savings down to the end-user too, offering serverless at - -incredibly low prices.[19]

- -
- -
Pricing scales perfectly with usage
- -
- -

With server, VM, and container orchestration, you typically pay per hour - -to rent whatever hardware you need, even if that hardware is sitting completely idle. With serverless, you pay - -per invocation, so the pricing scales exactly with usage. If usage is high, you pay more, but if usage goes to zero, - -most serverless providers can scale to zero, which means you pay nothing.

- -
- -
- -
- -
- -

While FaaS has some major benefits, it also typically comes with a number of limitations:

- -
- -
- -
- -
Size limits
- -
- -

There are usually limits on deployment package size, event payload size, and response payload size.

- -
- -
Time limits
- -
- -

There is usually a maximum amount of time that your functions can run for (e.g., 15 minutes with AWS Lambda).

- -
- -
Disk space
- -
- -

You typically only have a small amount of storage available locally, and it’s usually ephemeral, so you can’t store - -anything permanent on it.

- -
- -
Performance
- -
- -

Since the servers are hidden from you, you have very little control over the hardware that you’re using, which can - -make performance tuning difficult.

- -
- -
Debugging
- -
- -

You usually can’t connect to the servers directly (e.g. via SSH), which can make debugging difficult.

- -
- -
Cold starts
- -
- -

Serverless often struggles with cold starts, where on the first run, or the first run after a period of idleness, - -the serverless provider needs to download your deployment package and run it, which can take up to several seconds. - -For some use cases, such as responding to live HTTP requests, a delay of several seconds is unacceptably slow.

- -
- -
Long-running connections
- -
- -

Use cases such as database connection pools and WebSockets are typically more complicated with FaaS. For example, - -with AWS Lambda, if you want a database connection pool, you have to run an entirely separate service called the - -Amazon RDS Proxy.

- -
- -
- -
- -
- -

The FaaS model of serverless first became prominent in 2015 with the release of - -AWS Lambda. It grew in popularity very quickly, and since then, other cloud providers - -have released their own FaaS offerings, such as GCP Cloud Functions and - -Azure serverless.

- -
- -
- -

In fact, serverless has become so popular, that these days, the term is being applied not only to FaaS, but other - -models, too:

- -
- -
- -
- -
Google App Engine (GAE)
- -
- -

Released in 2008, GAE predates AWS Lambda, - -and is perhaps the first serverless offering (though I don’t believe the term serverless was used back then), as it - -allowed you to deploy web apps without having to think about servers or clusters. However, this required that the - -apps were written in very specific ways: e.g., specific languages, frameworks, data stores, runtime limits, data - -access patterns, etc.

- -
- -
Serverless containers
- -
- -

A number of cloud providers these days allow you to run containers without having to manage - -the servers or clusters under the hood. For example, AWS Fargate lets you use - -Amazon EKS or Amazon ECS without having to run or manage any worker nodes - -yourself. Combining containers with serverless helps work around some of the limitations of FaaS: e.g., you can - -have long-running containers, which avoids issues with cold starts and long-running connections. However, this very - -same feature also nullifies the scale-to-zero benefits of serverless. Also, containers give you greater - -portability than serverless, as serverless depends on provider-specific deployment packages. However, containers - -are typically larger and container orchestration tools tend to be slower, so you lose some of the speed benefits, - -and containers include the OS and other tooling, so you have more maintenance work to do (that said, with - -containers, the OS kernel is shared with the underlying host, which is managed for you by the serverless provider).

- -
- -
Serverless databases
- -
- -

The term serverless is now being applied to databases too, such as - -Amazon Aurora Serverless. In this case, the term serverless - -typically implies two things. First, you can use these databases without having to worry about running or managing - -the underlying servers, hard-drives, etc. Second, these databases can typically scale to zero when not in use, so you - -don’t have to pay hourly to run a server when things are idle (however, you typically do still pay for data storage).

- -
- -
- -
- -
- -

To get a feel for serverless, let’s try out what is arguably the most popular approach, which is AWS Lambda and FaaS. - -First, you’re going to deploy a Lambda function that can respond with "Hello, World!", and second, you’ll deploy - -API Gateway to trigger the Lambda function when HTTP requests come in.

- -
- -
- -

Example: Deploy a Serverless Function with AWS Lambda

- -
- -

The blog post series’s sample code repo includes a module called lambda in the ch3/tofu/modules/lambda folder that - -can do the following:

- -
- -
- -
    - -
  • - -

    Zip up a folder you specify into a deployment package.

    - -
  • - -
  • - -

    Upload the deployment package as an AWS Lambda function.

    - -
  • - -
  • - -

    Configure various settings for the Lambda function, such as memory, CPU, and environment variables.

    - -
  • - -
- -
- -
- -

To use the lambda module, create a live/lambda-sample folder to use as a root module:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch3/tofu/live/lambda-sample
-
-$ cd ch3/tofu/live/lambda-sample
- -
- -
- -
- -

In the lambda-sample folder, create a file called main.tf with the contents shown in Example 58:

- -
- -
- -
Example 58. Configure the lambda module (ch3/tofu/live/lambda-sample/main.tf)
- -
- -
- -
- -
provider "aws" {
-
-  region = "us-east-2"
-
-}
-
-
-
-  name = "lambda-sample"         # (1)
-
-
-
-  src_dir = "${path.module}/src" # (2)
-
-  runtime = "nodejs20.x"         # (3)
-
-  handler = "index.handler"      # (4)
-
-
-
-  memory_size = 128              # (5)
-
-  timeout     = 5                # (6)
-
-
-
-  environment_variables = {      # (7)
-
-    NODE_ENV = "production"
-
-  }
-
-
-
-  # ... (other params omitted) ...
-
-
-
-}
- -
- -
- -
- -
- -
- -

This code sets the following parameters:

- -
- -
- -
    - -
  1. - -

    name: The name to use for the Lambda function and all other resources created by this module.

    - -
  2. - -
  3. - -

    src_dir: The directory which contains the code for the Lambda function. The lambda module will zip this folder - -up into a deployment package. Example 59 shows the contents of this folder.

    - -
  4. - -
  5. - -

    runtime: The runtime used by this function. AWS Lambda supports - -several different runtimes, including Node.js, - -Python, Java, Ruby, and .NET, as well as the ability to create custom runtimes for all other languages.

    - -
  6. - -
  7. - -

    handler: The handler or entrypoint to call your function. The format is <FILE>.<FUNCTION>, where - -<FILE> is the file in your deployment package and <FUNCTION> is the name of the function to call in that file. - -Lambda will pass this function the event information. The preceding code sets the handler to the handler function - -in index.js, which is shown in Example 59.

    - -
  8. - -
  9. - -

    memory_size: The amount of memory to give the Lambda function. Adding more memory also proportionally increases - -the amount of CPU available, as well as the cost to run the function.

    - -
  10. - -
  11. - -

    timeout: The maximum amount of time the Lambda function has to run. The timeout limit is 15 minutes.

    - -
  12. - -
  13. - -

    environment_variables: Environment variables to set for the function. The preceding code sets the NODE_ENV - -environment variable to "production" to tell the Node.js app and all its dependencies to run in production mode.

    - -
  14. - -
- -
- -
- -

Create a folder in lambda-sample/src, and inside that folder, create a file called index.js, which defines the - -handler, as shown in Example 59:

- -
- -
- -
Example 59. The handler code in index.js (ch3/tofu/live/lambda-sample/src/index.js)
- -
- -
- -
- -
exports.handler = (event, context, callback) => {
-
-  callback(null, {statusCode: 200, body: "Hello, World!"});
-
-};
- -
- -
- -
- -
- -
- -

As you can see, this is a function that takes the event object as input and then uses the callback to return - -a response which is a 200 OK with the text "Hello, World!"

- -
- -
- -

Deploy the lambda-sample module the usual way:

- -
- -
- -
- -
$ tofu init
-
-$ tofu apply
- -
- -
- -
- -

apply should complete in just a few seconds: Lambda is fast! To see if it worked, open the - -Lambda console in your browser, click on the function called - -"sample-app-lambda," and you should see your function and the handler code, as shown in Figure 28:

- -
- -
- -
- -The Lambda console shows your newly created function - -
- -
Figure 28. The Lambda console shows your newly created function
- -
- -
- -

Currently, the function has no triggers, so it doesn’t really do anything. You can manually trigger it by clicking the - -blue Test button. The console will pop up a box where you can enter test data in JSON format to send to the function - -as the event object; leave everything at its default value and and click the Invoke button. That should run your - -function and show you log output that looks similar to Figure 29:

- -
- -
- -
- -The output from manually triggering the Lambda function with a test event - -
- -
Figure 29. The output from manually triggering the Lambda function with a test event
- -
- -
- -

As you can see, your function has run, and responded with the expected 200 OK and "Hello, World!"

- -
- -
- -

Triggering Lambda functions manually is great for learning and testing, but in the real world, if you want to build a - -serverless web app, you need to be able to have HTTP requests trigger your function, as described in the next section.

- -
- -
- -
- -

Example: Deploy an API Gateway in Front of AWS Lambda

- -
- -

You can configure a variety of events to trigger - -your Lambda function: e.g., you can have AWS automatically run your Lambda function each time a file is uploaded to - -Amazon’s Simple Storage Service (S3), or a new message is written to a queue in Amazon’s Simple Queue Service (SQS), or - -each time you get a new email in Amazon’s Simple Email Service (SES). So Lambda is a great choice for building - -event-driven systems and background processing jobs.

- -
- -
- -

You can also configure AWS to trigger a Lambda function each time you receive an HTTP request in - -API Gateway, which is a managed service you can use to expose an entrypoint for - -your apps, managing routing, authentication, throttling, and so on. You can also use API Gateway to create serverless - -web apps.

- -
- -
- -

The blog post series’s sample code repo includes a module called api-gateway in the ch3/tofu/modules/api-gateway - -folder that can deploy an HTTP API Gateway, - -a version of API Gateway designed for simple HTTP APIs, that knows how to trigger a Lambda function. - -Example 60 shows how to update the lambda-sample module to use the api-gateway module:

- -
- -
- -
Example 60. Configure the api-gateway module to trigger the Lambda function (ch3/tofu/live/lambda-sample/main.tf)
- -
- -
- -
- -
module "function" {
-
-  source = "github.com/brikis98/devops-book//ch3/tofu/modules/lambda"
-
-
-
-  # ... (other params omitted) ...
-
-
-
-}
-
-
-
-module "gateway" {
-
-  source = "github.com/brikis98/devops-book//ch3/tofu/modules/api-gateway"
-
-
-
-  name               = "lambda-sample"              # (1)
-
-  function_arn       = module.function.function_arn # (2)
-
-  api_gateway_routes = ["GET /"]                    # (3)
-
-}
- -
- -
- -
- -
- -
- -

This code sets the following parameters:

- -
- -
- -
    - -
  1. - -

    name: The name to use for the API Gateway and all the other resources created by the module.

    - -
  2. - -
  3. - -

    function_arn: The ARN of the Lambda function the API Gateway should trigger when it gets HTTP requests. This is - -set to an output from the lambda module you configured earlier.

    - -
  4. - -
  5. - -

    api_gateway_routes: The routes that should trigger the Lambda function. The preceding code configures - -an HTTP GET to the / path to as the only route.

    - -
  6. - -
- -
- -
- -

You should also add an output variable in outputs.tf, as shown in Example 61:

- -
- -
- -
Example 61. The lambda-sample module’s outputs (ch3/tofu/live/lambda-sample/outputs.tf)
- -
- -
- -
- -
output "api_endpoint" {
-
-  value = module.gateway.api_endpoint
-
-}
- -
- -
- -
- -
- -
- -

This code will give you the API Gateway’s domain name as an output.

- -
- -
- -

Deploy the updates:

- -
- -
- -
- -
$ tofu init
-
-$ tofu apply
- -
- -
- -
- -

When apply completes, you should see the api_endpoint output:

- -
- -
- -
- -
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
-
-
-
-Outputs:
-
-
-
-api_endpoint = "https://iome6ldq7i.execute-api.us-east-2.amazonaws.com"
- -
- -
- -
- -

Open this output in a web browser, and you should see "Hello, World!" Congrats, API Gateway is now routing requests to - -your Lambda function! As load goes up and down, AWS will automatically scale your Lambda functions up and down, and - -API Gateway will automatically distribute traffic across these functions. And when there’s no load, your Lambda - -function will automatically scale to zero, so it won’t cost you a cent.

- -
- -
- -
- -

Example: Roll Out Updates with AWS Lambda

- -
- -

By default, AWS Lambda natively supports a nearly instantaneous deployment model: that is, if you upload a new - -deployment package, all new requests will start executing the code in that deployment package more or less immediately.

- -
- -
- -

For example, try updating lambda-sample/src/index.js to respond with "Fundamentals of DevOps!" rather than - -"Hello, World!", as shown in Example 62:

- -
- -
- -
Example 62. Update the Lambda function response text (ch3/tofu/live/lambda-sample/src/index.js)
- -
- -
- -
- -
exports.handler = (event, context, callback) => {
-
-  callback(null, {statusCode: 200, body: "Fundamentals of DevOps!"});
-
-};
- -
- -
- -
- -
- -
- -

Re-run apply to deploy these changes:

- -
- -
- -
- -
$ tofu apply
- -
- -
- -
- -

apply should complete in a few seconds, and if you retry the api_endpoint URL, you’ll see "Fundamentals of DevOps!" - -right away. So again, deployments with Lambda are fast! In fact, AWS Lambda does an instantaneous - -switchover from the old to the new version, so it’s effectively a blue-green deployment (which you’ll learn more about - -in Part 5).

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

To avoid introducing too many new tools, this blog post uses OpenTofu to deploy Lambda functions, which - -works great for functions used for background jobs and event processing, but for serverless web apps, where you use a - -mix of Lambda functions and API Gateway, the OpenTofu code can get very verbose (especially the API Gateway parts). - -Moreover, if you’re using OpenTofu to manage a serverless webapp, you have no easy way to run or test that webapp - -(especially the API Gateway endpoints) locally.

- -
- -
- -

If you’re going to be building serverless web apps for production use cases, try out one of the following tools instead, - -as they are purpose-built for serverless web apps, keep the code more concise, and give you ways to test locally:

- -
- -
- - - -
- -
- -
- -
- -

When you’re done experimenting with the serverless code, run tofu destroy to undeploy all your infrastructure. This - -ensures that your account doesn’t start accumulating any unwanted charges.

- -
- -
- -
- -
- -

Comparing Orchestration Options

- -
- -

You’ve now seen the most common approaches to orchestration: server orchestration, VM orchestration, container - -orchestration, and serverless orchestration. Table 6 shows how these orchestration - -approaches compare in their ability to solve the core orchestration problems introduced in the beginning of the - -blog post:

- -
- -
- - - - - - - - - - - -
- -
Note
- -
- -
Lossy compression
- -
- -

As there are dozens of different tools within each orchestration category, the tables in this section only try to show - -what you should expect from the typical tools in each category. Think of these tables as compressed guides to the - -strengths & weaknesses of each category, but be aware that, in the effort to compress this information, some of the - -variation within a category inevitably gets lost.

- -
- -
- -
- - - - - -- -- -- -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 6. How orchestration approaches compare in terms of the core orchestration problems
ProblemServer orchestrationVM orchestrationContainer orchestrationServerless orchestration

Deployment

Manual

- -

Manual

- -

Manually specify which servers should run which apps.

Supported

- -

Supported

- -

Define a template and the orchestrator spins up servers from that template.

Strong support

- -

Strong support

- -

Set up worker nodes, define a template, and the orchestrator schedules containers on the worker nodes.

Strong support

- -

Strong support

- -

Upload a deployment package and let the orchestration tool run it whenever it is triggered.

Update strategies

Supported

- -

Supported

- -

Limited strategies: e.g., Ansible rolling deployments.

Supported

- -

Supported

- -

Limited strategies: e.g., ASG rolling deployments.

Strong support

- -

Strong support

- -

Multiple strategies: e.g., rolling, canary, blue-green.[20]

Strong support

- -

Strong support

- -

Multiple strategies: e.g., - -Lambda - -supports blue-green, canary, traffic shifting.

Scheduling

Not supported

- -

Not supported

- -

There is no scheduler built-in.

Supported

- -

Supported

- -

A scheduler decides which VMs run where. As an end-user, you see (and pay for) one VM per server.

Strong support

- -

Strong support

- -

A scheduler decides which containers run where. As an end-user, you see (and pay for) servers, but you get to run multiple containers per server.

Strong support

- -

Strong support

- -

A scheduler decides where to run your deployment package. As an end-user, you see (and pay for) functions, not servers.

Rollback

Not supported

- -

Not supported

- -

Mutable infrastructure practices have side effects, so there’s no automatic "undo." You always fix forward.

Strong support

- -

Strong support

- -

With immutable infrastructure, if you hit an error with the new version, you go back to the old version.

Strong support

- -

Strong support

- -

With immutable infrastructure, if you hit an error with the new version, you go back to the old version.

Strong support

- -

Strong support

- -

With immutable infrastructure, if you hit an error with the new version, you go back to the old version.

Auto scaling

Not supported

- -

Not supported

- -

The number of servers is fixed, and only changes manually.

Supported

- -

Supported

- -

E.g., AWS ASGs supports auto scaling servers based on - -metrics, schedules, and historical patterns.

Supported

- -

Supported

- -

E.g., Kubernetes supports auto scaling of both pods and nodes based on - -metrics, schedules, and events.

Strong support

- -

Strong support

- -

E.g., AWS Lambda handles scaling for you, including scale to zero, without you having to think about it at - -all.[21]

Auto healing

Not supported

- -

Not supported

- -

You have to manually restore servers and use process supervisors.

Supported

- -

Supported

- -

E.g., ASGs automatically replace instances that crash or fail ELB health checks.

Supported

- -

Supported

- -

E.g., Kubernetes automatically replaces nodes that crash or pods that fail any one of a variety of health checks (known - -as probes).

Strong support

- -

Strong support

- -

E.g., AWS Lambda handles auto healing of servers without you having to think about it at all.

Configuration

Strong support

- -

Strong support

- -

E.g., Ansible has support for variables, roles, templates, inventories, etc.

Supported

- -

Supported

- -

E.g., Create an OpenTofu module that exposes variables to configure ASGs for different environments.

Strong support

- -

Strong support

- -

E.g., Kubernetes supports ConfigMaps, which - -give you a way to pass arbitrary key-value pairs to your apps.

Strong support

- -

Strong support

- -

E.g., Lambda functions can get configuration from - -environment - -variables and the - -SSM Parameter - -Store.

Secrets management

Supported

- -

Supported

- -

E.g., Use Ansible Vault to encrypt and manage - -sensitive data.

Manual

- -

Manual

- -

You typically have to handle this yourself: e.g., have your app read from a secret store during boot.

Strong support

- -

Strong support

- -

E.g., Kubernetes supports Secrets as a way to - -pass sensitive data to your apps.

Strong support

- -

Strong support

- -

E.g., AWS Lambda can - -automatically fetch - -secrets from AWS Secrets Manager.

Load balancing

Manual

- -

Manual

- -

E.g., Manually deploy Nginx.

Strong support

- -

Strong support

- -

E.g., Use AWS ASGs with ALBs.

Strong support

- -

Strong support

- -

E.g., Use Kubernetes Services with Kubernetes Deployments.

Strong support

- -

Strong support

- -

E.g., Use API Gateway to trigger Lambda functions in response to HTTP requests.

Service communication

Manual

- -

Manual

- -

E.g., Have Ansible pass the IP addresses of servers in its inventory to your apps.

Manual

- -

Manual

- -

E.g., You can use load balancers between ASGs, using AWS APIs to discover load balancer URLs.

Strong support

- -

Strong support

- -

E.g., Use a Kubernetes Service to expose your app on a private IP within the cluster, and then - -discover IPs using environment - -variables or DNS.

Strong support

- -

Strong support

- -

E.g., Lambda functions can trigger other Lambda functions either directly via API calls or indirectly via - -events.[22]

Disk management

Manual

- -

Manual

- -

Manually attach and manage hard drives.

Supported

- -

Supported

- -

Ephemeral disks are typically supported, but permanent disks have to be managed manually.[23]

Strong support

- -

Strong support

- -

E.g., Kubernetes supports both Volumes and - -Persistent Volumes.

Not supported

- -

Not supported

- -

E.g., The file system for Lambda functions is read-only. If you need to store data, you must use an external data store.

- -
- -

While the core orchestration problems define what an orchestration tool should do, it’s also important to consider - -how they do it. As you used the various orchestration approaches in this blog post, you probably saw - -that they varied across a number of other dimensions, such as speed, ease of learning, and so on. - -Table 7 shows how the different orchestration approaches compare across these - -dimensions, which I’ll refer to as the core orchestration attributes:

- -
- - - - - -- -- -- -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 7. How orchestration approaches compare in terms of core orchestration attributes
DimensionServer orchestrationVM orchestrationContainer orchestrationServerless orchestration

Deployment speed

Weak

- -

Weak

- -

Simple code changes: 5-30 minutes. Major dependency or OS upgrades: 30-60 minutes.

Moderate

- -

Moderate

- -

Building a new VM image and rolling it out: 5-30 minutes.

Strong

- -

Strong

- -

Building a new container image and rolling it out: 1-5 minutes.

Very strong

- -

Very strong

- -

Building a new deployment package and rolling it: 1 minute.

Maintenance

Weak

- -

Weak

- -

You have to maintain the servers, the OS and tools on each server, and the orchestration tool itself (e.g., Chef - -servers and agents).

Moderate

- -

Moderate

- -

You have to maintain the virtual servers and the OS and tools in each VM image.

Weak

- -

Weak

- -

You have to maintain the servers, the OS and tools on each server and Docker image, and the orchestration tool itself - -(e.g., quarterly Kubernetes upgrades).

Very strong

- -

Very strong

- -

There are no servers, no OS, and no orchestration tools to maintain.

Ease of learning

Strong

- -

Strong

- -

Most people understand this model quickly (a few days).

Strong

- -

Strong

- -

Most people understand this model quickly (a few days).

Weak

- -

Weak

- -

Most people understand containers quickly, but container orchestration tools, especially Kubernetes, take a long time - -to learn (a few weeks).

Very strong

- -

Very strong

- -

Most people understand this model very quickly (less than a day).

Dev/prod parity

Weak

- -

Weak

- -

It’s rare to use a server orchestration tool (e.g., Ansible) in your local dev environment.

Weak

- -

Weak

- -

You can’t run most VM orchestration tools (e.g., AWS ASG) in your local dev environment.

Very strong

- -

Very strong

- -

It’s very common to run Docker containers in your local dev environment.

Very strong

- -

Very strong

- -

It’s very common to run serverless apps in your local dev environment.

Maturity

Strong

- -

Strong

- -

The oldest approach, with large, open source communities (e.g., Ansible, Chef, Puppet), so you get many person-years of - -maturity.

Moderate

- -

Moderate

- -

The second-oldest approach, but mostly proprietary (e.g., AWS ASGs), so not as many person-years of maturity as the age - -would suggest.

Strong

- -

Strong

- -

A newer approach, but with massive, open source communities (especially Kubernetes), so you get many person-years of - -maturity.

Weak

- -

Weak

- -

The youngest approach, and mostly proprietary (e.g., AWS Lambda), so not mature at all.

Debugging

Strong

- -

Strong

- -

Full access to the servers and no extra layers of abstraction makes debugging easier, but mutable infrastructure - -practices (and configuration drift) make debugging harder.

Very strong

- -

Very strong

- -

Full access to the virtual servers, a simple abstraction layer, and immutable VM images all make debugging easier.

Weak

- -

Weak

- -

Full access to the servers and immutable container images make debugging easier, but multiple layers of abstraction, - -and the complexity of orchestration tools make debugging challenging.

Weak

- -

Weak

- -

No access to the servers, and everything is abstracted away from you, which can make debugging very challenging.

Long-running tasks

Very strong

- -

Very strong

- -

Typically, long-running tasks work fine.

Very strong

- -

Very strong

- -

Typically, long-running tasks work fine.

Very strong

- -

Very strong

- -

Typically, long-running tasks work fine.

Weak

- -

Weak

- -

Limits on runtimes and numerous hoops to jump through for long-running connections.

Performance tuning

Very strong

- -

Very strong

- -

Full control over the hardware.

Strong

- -

Strong

- -

Full control over the virtualized hardware. However, you may hit the noisy neighbor problem: other VMs - -running on the same underlying physical server sometimes cause performance issues.

Moderate

- -

Moderate

- -

The same trade-offs as VMs for worker nodes, plus the added layer of containers, which makes the noisy neighbor problem - -and performance tuning more complicated.

Weak

- -

Weak

- -

No control over the underlying hardware, plus the additional challenge of cold starts, so performance tuning is very - -challenging.

- -
- -

I hope that next time you need to deploy an app, you can use Table 6 and - -Table 7 to pick the right tool for the job.

- -
- -
- -
- -

Conclusion

- -
- -

You now know how to run your apps in a way that more closely handles the demands of production, including using - -multiple replicas to avoid having a single point of failure, deploying load balancers to distribute traffic across the - -replicas, and using deployment strategies to roll out updates to your replicas without downtime. You’ve seen a number - -of orchestration approaches for handling all of this, summarized via the 4 takeaways from this - -Part:

- -
- -
- -
    - -
  • - -

    Server orchestration is an older, mutable infrastructure approach where you have a fixed set of servers that you - -maintain and update in place.

    - -
  • - -
  • - -

    VM orchestration is an immutable infrastructure approach where you deploy and manage VM images across virtualized - -servers.

    - -
  • - -
  • - -

    Container orchestration is an immutable infrastructure approach where you deploy and manage container images across a - -cluster of servers.

    - -
  • - -
  • - -

    Serverless orchestration is an immutable infrastructure approach where you deploy and manage functions without having - -to think about servers at all.

    - -
  • - -
- -
- -
- -

As you worked your way through the first few parts of this blog post series, you wrote and executed a bunch - -of code, including Node.js, Ansible, OpenTofu, Docker, YAML, and so on. So far, you’ve been working on all this code - -alone, but in the real world, you’ll most likely need to work on code with a whole team of developers. How do you - -collaborate on code as a team so you aren’t constantly overwriting each other’s changes? How do you - -minimize bugs and outages? How do you package and deploy your changes on a regular basis? These questions are - -the focus of the next blog post, Part 4.

- -
- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/05.html b/docs/05.html deleted file mode 100644 index 2eb04ba..0000000 --- a/docs/05.html +++ /dev/null @@ -1,7872 +0,0 @@ - - - - - - - - - - - - - - -Part 4. How to Version, Build, and Test Your Code - - - - - - - - - - - - - -
-
- -
- -
-
- -

Part 4. How to Version, Build, and Test Your Code

- -
- -
- -

In Part 2 and Part 3, you wrote code using a variety of languages - -and tools, including JavaScript (Node.js), Bash, YAML (Ansible), HCL (OpenTofu, Packer), and so on. What did you do - -with all of that code? Is it just sitting on your computer? If so, that’s fine for learning and experimenting, where - -you’re the only one touching that code, but with most real-world code, software development is a team sport, and not - -a solo effort. Which means you need to figure out how to support many developers collaborating safely and - -efficiently on the same codebase.

- -
- -
- -

In particular, you need to figure out how to solve the following problems:

- -
- -
- -
- -
Code access
- -
- -

All the developers on your team need a way to access the same code so they can all collaborate on it.

- -
- -
Integration
- -
- -

As multiple developers make changes to the same code base, you need some way to integrate their - -changes, handling any conflicts that arise, and ensuring that no one’s work is accidentally lost or overwritten.

- -
- -
Correctness
- -
- -

It’s hard enough to make your own code work, but when multiple people are modifying that code at - -the same time, you need to find a way to prevent constant bugs and breakages from slipping in.

- -
- -
Release
- -
- -

Getting a codebase working is great, but as you may remember from the Preface, code isn’t done until - -it’s generating value for your users and your company, which means you need a way to release the changes in your - -codebase to production on a regular basis.

- -
- -
- -
- -
- -

These problems are all key parts of your software development life cycle (SDLC). In the past, many companies would - -come up with their own ad-hoc, manual SDLC processes: I’ve seen places where the developers would email code changes - -back and forth, spend weeks integrating changes together manually, test everything manually (if they did any testing at - -all), and release everything manually (e.g., by using FTP to upload code to a server). But just because you can do - -something doesn’t mean you should.

- -
- -
- -

These days, we have far better tools and techniques for solving these problems. In this post, - -you’ll learn a few of these tools and techniques; in the next post, you’ll learn how to - -put these tools and techniques together into an effective SDLC—the kind of SDLC that makes it possible to achieve - -world-class results like the companies mentioned in Section 1.1, who are able to deploy thousands of times - -per day.

- -
- -
- -

Here’s what we’ll cover in this post:

- -
- -
- -
    - -
  • - -

    Version control

    - -
  • - -
  • - -

    Build system

    - -
  • - -
  • - -

    Automated testing

    - -
  • - -
- -
- -
- -

Let’s get started by understanding what version control is, why it’s important, and the best practices for using it.

- -
- -
- -

Version Control

- -
- -

A version control system (VCS) is a tool that allows you to store source code, share it with your team, integrate - -your work together, and track changes over time. I cannot imagine developing software without using a VCS. It’s a - -central part of every modern SDLC. And there’s nothing modern about it: nearly 25 years ago, using version control was - -item #1 on the Joel Test (a quick - -test you can use to rate the quality of a software team), and the first version control system was developed roughly 50 - -years ago.

- -
- -
- -

Despite all that, I still come across a surprising number of developers who don’t know how or why to use version - -control. If you’re one of these developers, it’s nothing to be ashamed of, and you’ll find that if you take a small - -amount of time to learn it now, it’s one of those skills that will benefit you for years to come.

- -
- -
- -

Here’s what the next few sections will cover:

- -
- -
- -
- -
Version control primer
- -
- -

A quick intro to version control concepts.

- -
- -
Example: a crash course on Git
- -
- -

Get hands-on practice using version control by learning to work with Git.

- -
- -
Example: store your code in GitHub
- -
- -

Get even more hands-on practice using version control by learning to push your - -Git repo to GitHub.

- -
- -
Version control best practices
- -
- -

Learn how to write good commit messages, keep your codebase consistent, review code - -to catch bugs and spread knowledge, and ensure your version control system is protected against common security - -threats.

- -
- -
- -
- -
- -

If you’re already familiar with version control and Git, feel free to skip the next two sections. However, I recommend - -you still go through the third section with the GitHub example, as many of the subsequent examples in the - -blog post series build on top of GitHub (e.g., using GitHub actions for CI / CD in Part 5).

- -
- -
- -

Version Control Primer

- -
- -

Have you ever written an essay in Microsoft Word? Maybe you start with a file called essay.doc, but then you realize - -you need to do some pretty major changes, so you create essay-v2.doc; then you decide to remove some big pieces, but - -you don’t want to lose them, so you put those in essay-backup.doc, and move the remaining work to essay-v3.doc; - -maybe you work on the essay with your friend Anna, so you email her a copy, and she starts making edits; at some point, - -she emails you back the doc with her updates, which you then manually combine with the work you’ve been doing, and save - -that under the new name essay-v4-anna-edit.doc; you keep emailing back and forth, and you keep renaming the file, - -until minutes before the deadline, you finally submit a file called something like - -essay-final-no-really-definitely-final-revision3-v58.doc.

- -
- -
- -

Believe it or not, what you’re doing is essentially version control. You could represent it with the diagram shown in - -Figure 30:

- -
- -
- -
- -Visualizing your process with Word documents as version control - -
- -
Figure 30. Visualizing your process with Word documents as version control
- -
- -
- -

You start with essay.doc, and after some major edits, you commit your changes to a new revision called - -essay-v2.doc. Then, you realize that you need to break off in a new direction, so you could say that you’ve created - -a new branch from you original work, and in that new branch, you commit another new revision called essay-v3.doc. - -When you email Anna essay-v3.doc, and she starts her work, you could say that she’s working in yet another branch. - -When she emails you back, you manually merge the work in your branch and her branch together to create - -essay-v4-anna-edit.doc.

- -
- -
- -

What you’ve just seen is the essence of version control: commits, branches, and merges. Admittedly, manually - -emailing and renaming Word docs isn’t a very good version control system, but it is version control!

- -
- -
- -

A better solution would be to use a first-class VCS, which can perform these operations more effectively. The - -basic idea with a VCS is as follows:

- -
- -
- -
- -
Repositories
- -
- -

You store files (code, documents, images, etc.) in a repository (repo for short).

- -
- -
Branches
- -
- -

You start with everything in a single branch, often called something like main. At any time, you can - -create a new branch from any existing branch, and work in your own branch independently.

- -
- -
Commits
- -
- -

Within any branch, you can edit files, and when you’re ready to store your progress in a new revision, you - -create a commit with your updates. The commit typically records not only the changes to the files, but also who made - -the changes, and a commit message that describes the changes.

- -
- -
Merges
- -
- -

At any time, you can merge branches together. For example, it’s common to create a branch from main, work - -in that branch for a while, and then merge your changes back into main.

- -
- -
Conflicts
- -
- -

VCS tools can merge some types of changes completely automatically, but if there is a conflict (e.g., - -two people changed the same line of code in different ways), the VCS will ask you to resolve the conflict manually.

- -
- -
History
- -
- -

The VCS tracks every commit in every branch in a commit log, which lets you see the full history of how - -the code changed, including all previous revisions of every file, what changed between each revision, and who made - -each change.

- -
- -
- -
- -
- -

Learning about all these terms and concepts is useful, but really, the best way to understand version control is to try - -it out, as in the next section.

- -
- -
- -
- -

Example: A Crash Course on Git

- -
- -

There have been many version control systems developed over the years, including CVS, - -Subversion, Perforce, and - -Mercurial, but these days, the most popular, by far, is Git. - -According to the 2022 StackOverflow Developer Survey, 93% of developers - -use Git (96% if you look solely at professional developers). So if you’re going to learn one VCS, it should be Git.

- -
- -
- -

Git basics

- -
- -

If you don’t have it already installed, follow these - -docs to install Git on your computer. Next, let Git know your name and email:

- -
- -
- -
- -
$ git config --global user.name "<YOUR NAME>"
-
-$ git config --global user.email "<YOUR EMAIL>"
- -
- -
- -
- -

Create a new, empty folder on your computer just for experimenting with Git. For example, you could create a folder - -called git-practice within the system temp folder:

- -
- -
- -
- -
$ mkdir /tmp/git-practice
-
-$ cd git-practice
- -
- -
- -
- -

Within the git-practice folder, write some text to a file called example.txt:

- -
- -
- -
- -
$ echo 'Hello, World!' > example.txt
- -
- -
- -
- -

It would be nice to have some version control for this file. With Git, that’s easy. You can turn any folder into a Git - -repo by running git init:

- -
- -
- -
- -
$ git init
-
-Initialized empty Git repository in /tmp/git-practice/.git/
- -
- -
- -
- -

The contents of your folder should now look something like this:

- -
- -
- -
- -
$ tree -aL 1
-
-.
-
-├── .git
-
-└── example.txt
- -
- -
- -
- -

You should see your original example.txt file, plus a new .git folder. This .git folder is where Git will record - -all the information about your branches, commits, revisions, and so on.

- -
- -
- -

At any time, you can run the git status command to see the status of your repo:

- -
- -
- -
- -
$ git status
-
-On branch main
-
-
-
-No commits yet
-
-
-
-Untracked files:
-
-  (use "git add <file>..." to include in what will be committed)
-
-	example.txt
- -
- -
- -
- -

The status command is something you’ll run often, as it gives you several useful pieces of information: what branch - -you’re on (main is the default branch when you create a new Git repo); any commits you’ve made; and any changes - -that haven’t been committed yet. To commit your changes, you first need to add the file(s) you want to commit to the - -staging area using git add:

- -
- -
- -
- -
$ git add example.txt
- -
- -
- -
- -

Try running git status one more time:

- -
- -
- -
- -
$ git status
-
-On branch main
-
-
-
-No commits yet
-
-
-
-Changes to be committed:
-
-  (use "git rm --cached <file>..." to unstage)
-
-	new file:   example.txt
- -
- -
- -
- -

Now you can see that example.txt is in the staging area, ready to be committed. To commit the changes, use the - -git commit command, passing in a description of the commit via the -m flag:

- -
- -
- -
- -
$ git commit -m "Initial commit"
- -
- -
- -
- -

Git is now storing example.txt in its commit log. You can see this by running git log:

- -
- -
- -
- -
$ git log
-
-commit 7a536b3367981b5c86f22a27c94557412f3d915a (HEAD -> main)
-
-Author: Yevgeniy Brikman
-
-Date:   Sat Apr 20 16:01:28 2024 -0400
-
-
-
-    Initial commit
- -
- -
- -
- -

For each commit in the log, you’ll see the commit ID, author, date, and commit message. Take special note of the - -commit ID: each commit has a different ID that you can use to uniquely identify that commit, and many Git commands - -take a commit ID as an argument. Under the hood, a commit ID is calculated by taking the SHA-1 hash of the contents of - -the commit, all the commit metadata (author, date, and so on), and the ID of the previous commit.[24] Commit IDs are 40 characters long, but in most commands, you can use just the first 7 characters, as that will - -be unique enough to identify commits in all but the largest repos.

- -
- -
- -

Let’s make another commit. First, make a change to example.txt:

- -
- -
- -
- -
$ echo 'New line of text' >> example.txt
- -
- -
- -
- -

This adds a second line of text to example.txt. Run git status once again:

- -
- -
- -
- -
$ git status
-
-On branch main
-
-Changes not staged for commit:
-
-  (use "git add <file>..." to update what will be committed)
-
-  (use "git restore <file>..." to discard changes in working directory)
-
-	modified:   example.txt
- -
- -
- -
- -

Now Git is telling you that it sees changes locally, but these changes have not been added to the staging area. To see - -what these changes are, run git diff:

- -
- -
- -
- -
$ git diff
-
-diff --git a/example.txt b/example.txt
-
-index 8ab686e..3cee8ec 100644
-
---- a/example.txt
-
-+++ b/example.txt
-
-@@ -1 +1,2 @@
-
- Hello, World!
-
-+New line of text
- -
- -
- -
- -

You should use git diff frequently to check what changes you’ve made before committing them. If the changes look good, - -use git add to stage the changes and git commit to commit them:

- -
- -
- -
- -
$ git add example.txt
-
-$ git commit -m "Add another line to example.txt"
- -
- -
- -
- -

Now, try git log once more, this time adding the --oneline flag to get more concise output:

- -
- -
- -
- -
$ git log --oneline
-
-02897ae (HEAD -> main) Add another line to example.txt
-
-0da69c2 Initial commit
- -
- -
- -
- -

Now you can see both of your commits, including their commit messages. This commit log is very powerful:

- -
- -
- -
- -
Debugging
- -
- -

If something breaks in your code, the first question you typically ask is, "what changed?" The commit - -log gives you an easy way to answer that question.

- -
- -
Reverting
- -
- -

You can use git revert <ID> to automatically create a new commit that reverts all the changes - -in the commit with ID <ID>, thereby undoing the changes in that commit, while still preserving your Git history. - -Or you can use git reset --hard <ID> to get rid of all commits after <ID> entirely, including removing them - -from history (use with care!).

- -
- -
Comparison
- -
- -

You can use git diff to compare not only local changes, but also to compare any two commits. This - -lets you see how the code evolved, one commit at a time.

- -
- -
Author
- -
- -

You can use git blame to annotate each line of a file with information about the last commit that - -modified that file, including the date, the commit message, and the author. Although you could use this to blame - -someone for causing a bug, as the name implies, the more common use case is to help you understand where any give - -piece of code came from, and why that change was made.

- -
- -
- -
- -
- -

So far, all of your commits have been on the default branch (main), but in real-world usage, you typically do work - -across multiple branches, which is the focus of the next section.

- -
- -
- -
- -

Git branching and merging

- -
- -

Let’s practice creating and merging Git branches. To create a new branch and switch to it, use the git checkout - -command with the -b flag:

- -
- -
- -
- -
$ git checkout -b testing
-
-Switched to a new branch 'testing'
- -
- -
- -
- -

To see if it worked, you can use git status, as always:

- -
- -
- -
- -
$ git status
-
-On branch testing
-
-nothing to commit, working tree clean
- -
- -
- -
- -

You can also use the git branch command at any time to see what branches are available and which one you’re on:

- -
- -
- -
- -
$  git branch
-
-  main
-
-* testing
- -
- -
- -
- -

Any changes you commit now will go into the testing branch. To try this out, modify example.txt once again:

- -
- -
- -
- -
$ echo 'Third line of text' >> example.txt
- -
- -
- -
- -

Next, stage and commit your changes:

- -
- -
- -
- -
$ git add example.txt
-
-$ git commit -m "Added a 3rd line to example.txt"
- -
- -
- -
- -

If you use git log, you’ll see your three commits:

- -
- -
- -
- -
$ git log --oneline
-
-5b1a597 (HEAD -> testing) Added a 3rd line to example.txt
-
-02897ae (main) Add another line to example.txt
-
-0da69c2 Initial commit
- -
- -
- -
- -

But that third commit is only in the testing branch. You can see this by using git checkout to switch back to the - -main branch:

- -
- -
- -
- -
$ git checkout main
-
-Switched to branch 'main'
- -
- -
- -
- -

Check the contents of example.txt: it’ll have only two lines. And if you run git log, it’ll have only two commits. - -So each branch gives you a copy of all the files in the repo, and you can modify them in that branch, in isolation, as - -much as you want, without affecting any other branches.

- -
- -
- -

Of course, working forever in isolation doesn’t usually make sense. You eventually will want to merge your work back - -together. One way to do that with Git is to run git merge to merge the contents of the testing branch into the - -main branch:

- -
- -
- -
- -
$ git merge testing
-
-Updating c4ff96d..c85c2bf
-
-Fast-forward
-
- example.txt | 1 +
-
- 1 file changed, 1 insertion(+)
- -
- -
- -
- -

You can see that Git was able to merge all the changes automatically, as there were no conflicts between the main and - -testing branches. If you now check the contents of example.txt, it should have three lines in it, and if you run - -git log, you’ll see three commits.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for using Git:

- -
- -
- -
    - -
  • - -

    Learn how to use the git tag command to create tags.

    - -
  • - -
  • - -

    Learn to use git rebase. When does it make sense to use it instead of git merge?

    - -
  • - -
- -
- -
- -
- -
- -

Now that you know how to run Git locally, on your own computer, you’ve already learned something useful: if nothing - -else, you now have a way to store revisions of your work that’s much more effective than essay-v2.doc, - -essay-v3.doc, etc. But to see the full power of Git, you’ll want to use it with other developers, which is the focus - -of the next section.

- -
- -
- -
- -
- -

Example: Store your Code in GitHub

- -
- -

Git is a distributed VCS, which means that every team member can have a full copy of the repository, and do commits, - -merges, and branches, completely locally. However, the most common way to use Git is to pick one copy of the repository - -as the central repository that will act as your source of truth. This central repo is the one everyone will - -initially get their code from, and as you make changes, you always push them back to this central repo.

- -
- -
- -

There are many ways to run such a central repo: the most common approach is to use a hosting service. These not - -only host Git repos for you, but they also provide a number of other useful features, such as web UIs, user management, - -development workflows, issue tracking, security tools, and so on. The most popular hosting services for Git are - -GitHub, GitLab, and BitBucket. Of these, GitHub is - -the most popular by far.

- -
- -
- -

In fact, you could argue that GitHub is what made Git popular. GitHub provided a great experience for hosting repos and - -collaborating with team members, and it has become the de facto home for most open source projects. So if you wanted - -to use or participate in open source, you often had to learn to use Git, and before you knew it, Git and GitHub were - -the dominant players in the market. Therefore, it’s a good idea to learn to use not only Git, but GitHub as well.

- -
- -
- -

Let’s push the example code you’ve worked on while reading this blog post series to GitHub. Go into the folder where - -you have your code:

- -
- -
- -
- -
$ cd fundamentals-of-devops
- -
- -
- -
- -

If you’ve done all the examples up to this point, the contents of this folder should look something like this:

- -
- -
- -
- -
$ tree -L 2
-
-.
-
-├── ch1
-
-│   ├── ec2-user-data-script
-
-│   └── sample-app
-
-├── ch2
-
-│   ├── ansible
-
-│   ├── bash
-
-│   ├── packer
-
-│   └── tofu
-
-└── ch3
-
-    ├── ansible
-
-    ├── docker
-
-    ├── kubernetes
-
-    ├── packer
-
-    └── tofu
- -
- -
- -
- -

Turn this into a Git repo by running git init:

- -
- -
- -
- -
$ git init
-
-Initialized empty Git repository in /fundamentals-of-devops/.git/
- -
- -
- -
- -

If you run git status, you’ll see that there are no commits and no files staged for commit:

- -
- -
- -
- -
$ git status
-
-On branch main
-
-
-
-No commits yet
-
-
-
-Untracked files:
-
-  (use "git add <file>..." to include in what will be committed)
-
-	ch1/
-
-	ch2/
-
-	ch3/
- -
- -
- -
- -

Before staging these files, you should create a new file in the root of the repo called .gitignore, with the contents - -shown in Example 63:

- -
- -
- -
Example 63. The gitignore file (.gitignore)
- -
- -
- -
- -
# (1)
-
-*.tfstate
-
-*.tfstate.backup
-
-*.tfstate.lock.info
-
-
-
-# (2)
-
-.terraform
-
-
-
-# (3)
-
-*.key
-
-
-
-# (4)
-
-*.zip
-
-
-
-# (5)
-
-node_modules
-
-coverage
- -
- -
- -
- -
- -
- -

The .gitignore file specifies files you do not want Git to track:

- -
- -
- -
    - -
  1. - -

    OpenTofu state should not be checked into version control. You’ll learn why not, and the proper way to - -store state files in Part 5.

    - -
  2. - -
  3. - -

    The .terraform folder is used by OpenTofu as a scratch directory and should not be checked in.

    - -
  4. - -
  5. - -

    The Ansible examples in earlier blog posts store SSH private keys locally in .key files. These - -are secrets, so they should be stored in an appropriate secret store (as you’ll learn about in - -Part 8), and not in version control.

    - -
  6. - -
  7. - -

    The lambda module from Part 3 creates a Zip file automatically. This is a - -build artifact and should not be checked in.

    - -
  8. - -
  9. - -

    The node_modules and coverage folders are also scratch directories that should not be checked in. You’ll learn - -more about these folders later in this post.

    - -
  10. - -
- -
- -
- -

I usually commit the .gitignore file first to ensure I don’t accidentally commit other files that don’t belong in - -version control:

- -
- -
- -
- -
$ git add .gitignore
-
-$ git commit -m "Add .gitignore"
- -
- -
- -
- -

With that done, you can use git add . to stage all the files and folders in your fundamentals-of-devops folder, and - -then commit them:

- -
- -
- -
- -
$ git add .
-
-$ git commit -m "Example code for first few chapters"
- -
- -
- -
- -

The code is now in a Git repo on your local computer. Let’s now push it to a Git repo on GitHub.

- -
- -
- -

If you don’t have a GitHub account already, sign up for one now (it’s free), and follow the - -authenticating on the command line docs - -to learn to authenticate to GitHub from your terminal.

- -
- -
- -

Next, create a new repository in GitHub, give it a name, make the repo public, and click - -"Create repository," as shown in Figure 31:

- -
- -
- -
- -Create a new GitHub repo - -
- -
Figure 31. Create a new GitHub repo
- -
- -
- -

This will create a new, empty repo for you that looks something like Figure 32:

- -
- -
- -
- -A newly created, empty GitHub repo - -
- -
Figure 32. A newly created, empty GitHub repo
- -
- -
- -

Copy and paste the git remote add command from that page to add a new remote, which is a Git repository hosted - -remotely (i.e., somewhere on the Internet):

- -
- -
- -
- -
$ git remote add origin https://github.com/<USERNAME>/<REPO>.git
- -
- -
- -
- -

The preceding command adds your GitHub repo as a remote named origin: you can name remotes whatever you want, but - -origin is the convention for your team’s central repo, so you’ll see that used all over the place.

- -
- -
- -

Now you can use git push <REMOTE> <BRANCH> to push the code from branch <BRANCH> of your local repo to the remote - -named <REMOTE>. So to push your main branch to the GitHub repo you just created, you’d run the following:

- -
- -
- -
- -
$ git push origin main
- -
- -
- -
- -

If you refresh your repo in GitHub, you should now see your code there, as shown in Figure 33:

- -
- -
- -
- -Your GitHub repo with code in it - -
- -
Figure 33. Your GitHub repo with code in it
- -
- -
- -

Congrats, you just learned how to push your changes to a remote endpoint, which gets you halfway there with being able - -to collaborate with other developers. Now it’s time to learn the other half, which is how to pull changes from a remote - -endpoint.

- -
- -
- -

Notice how GitHub prompts you to "Add a README" to your new repo. Adding documentation for your code is always a good - -idea, so let’s do it. Click the green Add a README button, and you’ll get a code editor in your browser where you can - -write the README in Markdown, as shown in Figure 34:

- -
- -
- -
- -Filling in a README for the GitHub repo - -
- -
Figure 34. Filling in a README for the GitHub repo
- -
- -
- -

Fill in a reasonable description for the repo and then click the "Commit changes…​" - -button. GitHub will prompt you for a commit message, so fill one in just like the -m flag on the command-line, and - -click the "Commit changes" button. GitHub will commit the changes and then take you back to your repo, where you’ll be - -able to see your README, as shown in Figure 35:

- -
- -
- -
- -Your GitHub repo with a README - -
- -
Figure 35. Your GitHub repo with a README
- -
- -
- -

Notice that the repo in GitHub now has a README.md, but the copy on your own computer doesn’t. To get the latest code - -onto your computer, run the git pull <REMOTE> <BRANCH> command, where <REMOTE> is the name of the remote to pull - -from, and <BRANCH> is the branch to pull:

- -
- -
- -
- -
$ git pull origin main
- -
- -
- -
- -

The log output should show you that Git was able to pull the changes in and a summary of what changed, which should - -include the new README.md file. Congrats, you now know how to pull changes from a remote endpoint!

- -
- -
- -

Note that if you didn’t have a copy of the repo locally on your computer at all, you couldn’t just run git pull. - -Instead, you first need to use git clone to checkout the initial copy of the repo (note: you don’t actually need to - -run this command, as you have a copy of this repo already, but just be aware of this for working with other repos - -in the future):

- -
- -
- -
- -
$ git clone https://github.com/<USERNAME>/<REPO>
- -
- -
- -
- -

When you run git clone, Git will check out a copy of the repo <REPO> to a folder called <REPO> in your current - -working directory. It’ll also automatically add the repo’s URL as a remote named origin.

- -
- -
- -

So now you’ve seen the basic Git workflows:

- -
- -
- -
    - -
  • - -

    git clone: Check out a fresh copy of a repo.

    - -
  • - -
  • - -

    git push origin <BRANCH>: Push changes from your local repo back to the remote repo, so all your other - -team members can see your work.

    - -
  • - -
  • - -

    git pull origin <BRANCH>: Pull changes from the remote repo to your local repo, so you can see the work - -of all your other team members.

    - -
  • - -
- -
- -
- -

This is the basic workflow, but what you’ll find is that many teams use a slightly different workflow to push changes: - -pull requests. This is the topic of the next section.

- -
- -
- -
- -

Example: Open a Pull Request in GitHub

- -
- -

A pull request (PR) is a request to merge one branch into another: in effect, you’re requesting that someone else - -runs git pull on your repo/branch. GitHub popularized the PR workflow as the de facto way to make changes to open - -source repos, and these days, many companies use PRs to make changes to private repos as well. The pull request - -process is as follows:

- -
- -
- -
    - -
  • - -

    You check out a copy of repo R, create a branch B, and commit your changes to this branch. Note that if you have - -write access to repo R, you can create branch B directly in repo R. However, if you don’t have write access, - -which is usually the case if repo R is an open source repo in someone else’s account, then you first create a - -fork of repo R, which is a copy of the repo in your own account, and then you create branch B in your fork.

    - -
  • - -
  • - -

    When you’re done with your work in branch B, you open a pull request against repo R, requesting that the - -maintainer of that repo merges your changes from branch B into some branch in repo R (typically main).

    - -
  • - -
  • - -

    The owner of repo R then uses GitHub’s PR UI to review your changes, provide comments and feedback, and - -ultimately, decide to either merge the changes in, or close the PR unmerged.

    - -
  • - -
- -
- -
- -

Let’s give it a shot. Create a new branch called update-readme in your repo:

- -
- -
- -
- -
$ git checkout -b update-readme
- -
- -
- -
- -

Make a change to the README.md file: for example, add a URL to the end of the file. Run git diff to see what your - -changes look like:

- -
- -
- -
- -
$ git diff
-
-diff --git a/README.md b/README.md
-
-index 843bd01..ad75c5e 100644
-
---- a/README.md
-
-+++ b/README.md
-
-@@ -1,3 +1,5 @@
-
- # Fundamentals of DevOps and Software Delivery Examples
-
-
-
- Code examples for the book _Fundamentals of DevOps and Software Delivery_.
-
-+
-
-+https://www.fundamentals-of-devops.com/
- -
- -
- -
- -

If the changes look good, add and commit them:

- -
- -
- -
- -
$ git add README.md
-
-$ git commit -m "Add URL to README"
- -
- -
- -
- -

Next, push your update-readme branch to the remote repo:

- -
- -
- -
- -
$ git push origin update-readme
- -
- -
- -
- -

You should see log output that looks something like this:

- -
- -
- -
- -
remote:
-
-remote: Create a pull request for 'update-readme' on GitHub by visiting:
-
-remote:      https://github.com/<USERNAME>/<REPO>/pull/new/update-readme
-
-remote:
- -
- -
- -
- -

In the log output, GitHub conveniently shows you a URL for creating a pull request (you can also create PRs by going to - -the Pull Requests tab of your repo in a web browser and clicking the New Pull Request button). Open that URL in your - -web browser, and you should see a page that looks like Figure 36:

- -
- -
- -
- -Opening a pull request in GitHub - -
- -
Figure 36. Opening a pull request in GitHub
- -
- -
- -

Fill in a title and description for the PR, then scroll down to see the changes between your branch and main, - -which should be the same ones you saw when running git diff. If those changes look OK, click the "Create pull request" - -button, and you’ll end up on the GitHub PR UI, as shown in Figure 37:

- -
- -
- -
- -An open pull request in GitHub - -
- -
Figure 37. An open pull request in GitHub
- -
- -
- -

You and all your team members can use this PR page to see the code changes (try clicking the "Files changed" tab - -to get a view similar to git diff), discuss the changes, request reviewers, request changes, and so on. All of this - -discussion gets stored in GitHub, so if later on, you’re trying to debug an issue or figure out why some code is the way - -it is, these PR pages serve as an invaluable source of history and context. As you’ll see in Part 5, - -this is also the place where a lot of the CI / CD integration will happen.

- -
- -
- -

If the PR looks good, click "Merge pull request," and then "Confirm merge," to merge the changes in.

- -
- -
- -
- -

Version Control Best Practices

- -
- -

Now that you understand the basics of version control, let’s discuss the best practices:

- -
- -
- -
    - -
  • - -

    Always use version control

    - -
  • - -
  • - -

    Write good commit messages

    - -
  • - -
  • - -

    Commit early and often

    - -
  • - -
  • - -

    Use a code review process

    - -
  • - -
  • - -

    Protect your code

    - -
  • - -
- -
- -
- -

Always use version control

- -
- -

The single most important best practice with version control is: use it.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #1
- -
- -

Always manage your code with a version control system.

- -
- -
- -
- -
- -

It’s easy, it’s cheap or free, and the benefits for software engineering are massive. If you’re writing code, always - -store that code in version control. No excuses.

- -
- -
- -
- -

Write good commit messages

- -
- -

Commit messages are important. When you’re trying to figure out what caused a bug or an outage, or staring at a - -confusing piece of code, git log and git blame can be your best friends—but only if the commit messages are well - -written. Good commit messages consist of two ingredients:

- -
- -
- -
- -
Summary
- -
- -

The first line of the message should be a short (less than 50 characters), clear summary of the - -change.

- -
- -
Context
- -
- -

If it’s a trivial change, a summary line can be enough, but for anything larger, put a new line - -after the summary line, and then provide more information to help future coders (including a future you!) understand - -the context. In particular, focus on what changed and why it changed, which is context that you can’t always get - -just by reading the code, rather than how, which should be clear from the code itself.

- -
- -
- -
- -
- -

Here’s an example of such a commit message:

- -
- -
- -
- -
Fix bug with search auto complete
-
-
-
-A more detailed explaination of the fix, if necessary. Provide
-
-additional context that may not be obvious from just reading the
-
-code.
-
-
-
-- Use bullet points
-
-- If appropriate
-
-
-
-Fixes #123. Jira #456.
- -
- -
- -
- -

Just adding these two simple ingredients, summary and context, will make your commit messages already considerably - -better. If you’re able to follow these two rules consistently, you can level up your commit messages even further by - -following the instructions in How to Write a Good Commit Message. And for especially - -large projects and teams, you can also consider adopting Conventional Commits as - -a way to enforce even more structure in your commit messages.

- -
- -
- -
- -

Commit early and often

- -
- -

One of the keys to being a more effective programmer is learning how to take a large problem and break it down into - -small, manageable parts. As it turns out, one of the keys to using version control more effectively is learning to - -break down large changes into small, frequent commits.

- -
- -
- -

In fact, there are two ideals to aim for:

- -
- -
- -
- -
Atomic commits
- -
- -

Each commit should do exactly one, small, relatively self-contained thing. You should be able to - -describe that thing in one short sentence—which, conveniently, you can use as the commit message summary. If you - -can’t fit everything into one sentence, then the commit is likely doing too many things at once, and should be broken - -down into multiple commits. For example, instead of a single, massive commit that implements an entire large feature, - -aim for a series of smaller commits, where each one implements some logical slice of that feature: e.g., the backend - -logic in one commit, the UI logic in another commit, the search logic in another commit, and so on.

- -
- -
Atomic PRs
- -
- -

Each pull request does exactly one small, relatively self-contained thing. A single PR can contain - -multiple commits, so it’ll naturally be larger in scope than any one commit, but it should still represent a single - -set of cohesive changes: that is, changes that naturally and logically go together. If you find that your PR - -contains a list of somewhat unrelated changes, that’s usually a sign you should break it up into multiple PRs. A - -classic example of this is a PR that contains a new feature, but along the way, the author of the PR also fixed a - -couple bugs they came across, and refactored a bunch of code. Leaving the code cleaner than how you found it (the Boy - -Scout Rule) is a good idea, but for the sanity of the developers who will be reviewing your PR and the commit log, - -put each of these changes into its own PR: that is, the refactor should go in one PR, the bug fixes each in their own - -PRs, and finally, the new feature in its own PR.

- -
- -
- -
- -
- -

Atomic commits and atomic PRs are ideals, and sometimes you’ll fall short of them, but it’s always a good idea to - -strive towards these ideals, as they give you a number of benefits:

- -
- -
- -
- -
More useful Git history
- -
- -

When you’re scanning your Git history, commits and PRs that do one thing are easier to understand than those that do - -many things.

- -
- -
Less risk
- -
- -

A commit or PR that makes one atomic change is typically less risky, as it’s often self-contained enough - -that you could revert it, whereas commits and PRs that contain dozens of changes can be harder to revert, and - -therefore, riskier to merge in the first place.

- -
- -
Cleaner mental model
- -
- -

To work in atomic units, you typically have to break the work down ahead of time. This often - -produces a cleaner mental model of the problem, and ultimately, better results.

- -
- -
Easier code reviews
- -
- -

Reviewing small, self-contained changes is easy. Reviewing massive PRs with thousands of lines - -of unrelated changes is hard.

- -
- -
Lower risk of data loss
- -
- -

Doing more frequent commits can be a lifesaver. For example, if you commit (and push) your - -changes hourly, then if your laptop dies, it’s an annoying, but minor loss, whereas if you commit only once every few - -days, it’s a huge setback.

- -
- -
Less risky refactors
- -
- -

Committing more frequently gives you the ability to quickly and safely explore new directions. - -For example, you might try a major refactor, and after many hours of work, realize it’s not working; if you made small - -commits all along the way, you can revert to any previous point instantly, whereas if you didn’t, you may have to - -undo your refactor manually, which is can be more time-consuming and error-prone.

- -
- -
More frequent integration
- -
- -

As you’ll see in Part 5, one of the keys to working effectively as a - -team is to integrate your changes together regularly, and this tends to be easier if everyone is doing small, - -frequent commits.

- -
- -
- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

It’s normal not to get your commits and commit messages quite right initially: often, you don’t know how to break - -something up into smaller, atomic parts until after you’ve done the whole thing. That’s OK! Learn to use the following - -Git tools to update your commit history and clean things up before sharing them with your team:

- -
- -
- -
    - -
  • - -

    Amend commits: git commit --amend

    - -
  • - -
  • - -

    Squash commits: git merge --squash or git rebase

    - -
  • - -
- -
- -
- -
- -
- -
- -

Use a code review process

- -
- -
- -
- -

Every page in this book has been checked over by an editor. Why? Because even if you’re the smartest, most capable, - -most experienced writer, you can’t proofread your own work. You’re too close to the concepts, and you’ve rolled the - -words around your head for so long you can’t put yourself in the shoes of someone who is hearing them for the first - -time. Writing code is no different. In fact, if it’s impossible to write prose without independent scrutiny, surely - -it’s also impossible to write code in isolation; code has to be correct to the minutest detail, plus it includes prose - -for humans as well!

- -
- -
- -
- -— Jason Cohen
- -Making Software: What Really Works, and Why We Believe It by Andy Oram and Greg Wilson (O’Reilly Media) - -
- -
- -
- -

Having your code reviewed by someone else is a highly effective way to catch bugs, reducing defect rates by as much as - -50-80%.[25] Code reviews - -are also an efficient mechanism to spread knowledge, culture, training, and a sense of ownership throughout the team.

- -
- -
- -

There are different ways of doing code reviews:

- -
- -
- -
- -
Enforce a pull request workflow
- -
- -

One option is to enforce that all changes are done through pull requests (you’ll - -see a way to do that in the next section), so that the maintainers of each repo can asynchronously review each change - -before it gets merged.

- -
- -
Use pair programming
- -
- -

Another option is to use pair programming, a development technique where two programmers - -work together at one computer, with one person as the driver, responsible for writing the code, and the other as the - -observer, responsible for reviewing the code and thinking about the program at a higher level (the programmers - -regularly switch roles). The result is a constant code review process. It takes some time to get used to - -it, but with another developer nearby, you are always focused on how to make it clear what your code is doing, and - -you have a second set of eyes to catch bugs. Some companies use pair programming for all their coding, while others - -use it on an as-needed basis (e.g., for really complex tasks or ramping up a new hire).

- -
- -
Use formal inspections
- -
- -

A third option is to schedule a live meeting for a code review where you present the code - -to multiple developers, and go through it together, line-by-line. You can’t do this degree of scrutiny for every line - -of code, but for mission critical parts of your systems, this can be a very effective way to catch bugs and get - -everyone on the same page.

- -
- -
- -
- -
- -

Whatever process you pick for code reviews, you should define your code review guidelines up front, so you have a - -process that is consistent and repeatable across the entire team: that is, everyone knows what sorts of things to look - -for (e.g., automated tests), what sorts of things not to look for (e.g., code formatting, which should be automated), - -and how to communicate feedback effectively. For an example, have a look at - -Google’s Code Review Guidelines.

- -
- -
- -
- -

Protect your code

- -
- -

For many companies these days, the code you write is your most important asset—your secret sauce. Moreover, it’s also a - -highly sensitive asset: if someone can slip some malicious code into your codebase, it can be devastating, as that will - -bypass most other security protections you have in place.

- -
- -
- -

Therefore, you should consider enabling the following security measures to protect your code:

- -
- -
- -
- -
Signed commits
- -
- -

By default, Git allows you to set your name and email address to any value you want, as shown in - -Example 64:

- -
- -
Example 64. Git allows you to set your username and email to any values you want
- -
- -
- -
- -
$ git config user.name "Any name you want"
-
-$ git config user.email "Any email you want"
- -
- -
- -
- -
- -
- -

Git doesn’t enforce any checking around these values, so you could make commits pretending to be someone else! - -Fortunately, most VCS hosts (GitHub, GitLab, etc.) allow you to enforce signed commits on your repos, where they - -reject any commit that doesn’t have a valid cryptographic signature. Typically, the way that it works is you create a - -GPG key, which consists of a public and private key pair. You store the private key on your own computer, where only - -you can access it, and you - -configure Git to use - -the private key to sign your commits. Next, you upload the public key to your GitHub account, enable - -GitHub’s commit signature verification, - -and then GitHub will use this public key to check that any commit that claims to be from you actually has a valid - -signature, rejecting any commits that don’t.

- -
- -
- -
Branch protection
- -
- -

Most VCS hosts (GitHub, GitLab, etc.) allow you to enable branch protection, where you can - -enforce certain requirements before code can be pushed to certain branches (e.g., main). For example, you could use - -GitHub’s protected branches - -to require that all code changes to the main branch are (a) submitted via pull requests, (b) those pull - -requests are reviewed by at least N other developers, and (c) certain checks, such as security scans, pass before - -those pull requests can be merged. This way, even if an attacker compromises one of your developer accounts, they - -still won’t be able to get code merged into main without other developers seeing it and security scanners checking - -it.

- -
- -
- -
- -
- -

Now that you know how to use a version control system to help everyone on your team work on the same code, the next - -step is ensure that you’re all working on that code in the same way: that is, building the code the same way, - -running the code the same way, using the same dependencies, and so on. This is where build system can come in handy, - -which is the focus of the next section.

- -
- -
- -
- -
- -
- -

Build System

- -
- -

Most software projects use a build system to automate important operations, such as compiling the code, downloading - -dependencies, packaging the app for deployment, running automated tests, and so on. The build system serves two - -audiences: the developers on your team, who run the build steps as part of local development, and various - -scripts, which run the build steps as part of automating your software delivery process.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #2
- -
- -

Use a build system to capture, as code, important operations and knowledge for your project, in a way that can be - -used both by developers and automated tools.

- -
- -
- -
- -
- -

The reality is that for most software projects, you can’t not have a build system: either you use an off-the-shelf - -build system, or you end up creating your own out of ad hoc scripts, duct tape, and glue. I would recommend the former.

- -
- -
- -

There are many off-the-shelf build tools out there. Some were originally designed for use with a specific programming - -language or framework: for example, Rake for Ruby, Gradle and - -Maven for Java, SBT for Scala, and NPM - -for JavaScript (Node.js). There are also some build tools that are largely language agnostic, such as - -Bazel, and the grandaddy of all build systems, Make.

- -
- -
- -

Usually, the language-specific tools will give you the best experience with that language; I’d only go with the - -language-agnostic ones like Bazel in specific circumstances, such as massive teams that use dozens of different - -languages in a single repo (and these days, I wouldn’t recommend Make at all). For the purposes of the - -blog post series, since the sample app you’ve used in previous parts is JavaScript (Node.js), let’s give - -NPM a shot, as per the next section.

- -
- -
- -

Example: Configure your Build Using NPM

- -
- - - - - - - - - - - -
- -
Note
- -
- -
Example Code
- -
- -

As a reminder, you can find all the code examples in the blog post series’s sample - -code repo in GitHub.

- -
- -
- -
- -
- -

Let’s set up NPM as the build system for the Node.js sample app you’ve been using throughout the blog post series. Head - -into the folder you created for running examples in this series, and create a new subfolder for this - -blog post and the sample app:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch4/sample-app
-
-$ cd ch4/sample-app
- -
- -
- -
- -

Copy the app.js file you first saw in Section 1.2.1 into the sample-app folder:

- -
- -
- -
- -
$ cp ../../ch1/sample-app/app.js .
- -
- -
- -
- -

Next, make sure you have Node.js installed, which should also install NPM for you. To use - -NPM as a build system, you must first configure the build in a package.json file. You can create this file by hand, - -or you can let NPM scaffold out an initial version of this file for you by running npm init:

- -
- -
- -
- -
$ npm init
- -
- -
- -
- -

NPM will prompt you for information such as the package name, version, description, and so on. You can enter - -whatever data you want here, or hit ENTER to accept the defaults. When you’re done, you should have a package.json - -file that looks similar to Example 65:

- -
- -
- -
Example 65. The generated NPM build file (ch4/sample-app/package.json)
- -
- -
- -
- -
{
-
-  "name": "sample-app",
-
-  "version": "1.0.0",
-
-  "description": "Sample app for 'Fundamentals of DevOps and Software Delivery'",
-
-  "scripts": {
-
-    "test": "echo \"Error: no test specified\" && exit 1"
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

Most of this initial data is metadata about the project. The part to focus on is the scripts object. NPM has a number - -of built-in commands, such as npm install, npm start, npm test, - -and so on. All of these have default behaviors, but in most cases, you can define what these commands should do by - -adding them to the scripts block. For example, npm init gives you an initial test command in the scripts block - -that just exits with an error; you’ll change this value later in the blog post, when we discuss - -automated testing.

- -
- -
- -

For now, update the scripts block with a start command, which will define how to start your app, as shown in - -Example 66:

- -
- -
- -
Example 66. Add a start command to the scripts block (ch4/sample-app/package.json)
- -
- -
- -
- -
  "scripts": {
-
-    "start": "node app.js",
-
-  },
- -
- -
- -
- -
- -
- -

Now you can use the npm start command to run your app:

- -
- -
- -
- -
$ npm start
-
-
-
-> sample-app@1.0.0 start
-
-> node app.js
-
-
-
-Listening on port 8080
- -
- -
- -
- -

Being able to use npm start over node app.js may not seem like much of a win, but there’s a big difference: - -npm start is a well-known convention. Most Node.js and NPM users know to use npm start on a project. Most tools - -that work with Node.js know about it as well: e.g., if you had this package.json with a start command back in - -Part 1, Fly.io would’ve automatically used it to start the app, without you having to tell it what - -command to run.

- -
- -
- -

You might know to run node app.js to start this app, but the other members of your team might not—especially as the - -project grows larger, and instead of a single app.js file, there are thousands of source files, and it’s not - -obvious which one to run. You could document the command in a README, but there’s a good risk it’ll go out of date. - -By capturing this in your build system, which you run regularly, you are capturing this information in a way that is - -more likely to be kept up-to-date. And as a bonus, you’re capturing in a way that both other developers (humans) and - -other tools (automation) can leverage.

- -
- -
- -

Of course, start isn’t the only command you would add. The idea would be to add all the common operations on your - -project to the build. For example, in Section 3.4.1, you created a Dockerfile to package the app as - -a Docker image, and in order to build that Docker image for multiple CPU architectures (e.g., ARM64, AMD64), you had to - -use a relatively complicated docker buildx command. This is a great thing to capture in your build.

- -
- -
- -

First, copy the Dockerfile shown in Example 67 into the sample-app folder:

- -
- -
- -
Example 67. Updated Dockerfile for the app (ch4/sample-app/Dockerfile)
- -
- -
- -
- -
FROM node:21.7
-
-
-
-WORKDIR /home/node/app
-
-
-
-# (1)
-
-COPY package.json .
-
-COPY app.js .
-
-
-
-EXPOSE 8080
-
-
-
-USER node
-
-
-
-# (2)
-
-CMD ["npm", "start"]
- -
- -
- -
- -
- -
- -

This is identical to the Dockerfile you saw in Section 3.4.1, except for two changes:

- -
- -
- -
    - -
  1. - -

    Copy the package.json file into the Docker image, in addition to app.js.

    - -
  2. - -
  3. - -

    Use npm start to start the app, rather than hard-code node app.js. This way, if you ever change how you run the - -app—which you will later in this blog post—the only thing you’ll need to update is package.json.

    - -
  4. - -
- -
- -
- -

Second, create a script called build-docker-image.sh with the contents shown in Example 68:

- -
- -
- -
Example 68. A script to build a Docker image (ch4/sample-app/build-docker-image.sh)
- -
- -
- -
- -
#!/usr/bin/env bash
-
-
-
-set -e
-
-
-
-# (1)
-
-version=$(npm pkg get version | tr -d '"')
-
-
-
-# (2)
-
-docker buildx build \
-
-  --platform=linux/amd64,linux/arm64 \
-
-  -t sample-app:"$version" \
-
-  .
- -
- -
- -
- -
- -
- -

This script does the following:

- -
- -
- -
    - -
  1. - -

    Run npm pkg get version to get the value of the version parameter in package.json. This ensures - -package.json is the single location where you manage the version of your app.

    - -
  2. - -
  3. - -

    Run the same docker buildx command as before, setting the version to the value from (1).

    - -
  4. - -
- -
- -
- -

Next, make the script executable:

- -
- -
- -
- -
$ chmod u+x build-docker-image.sh
- -
- -
- -
- -

Finally, add a dockerize command to the scripts block in package.json that executes build-docker-image.sh, as - -shown in Example 69:

- -
- -
- -
Example 69. Add a dockerize command to the scripts block (ch4/sample-app/package.json)
- -
- -
- -
- -
  "scripts": {
-
-    "start": "node app.js",
-
-    "dockerize": "./build-docker-image.sh",
-
-  },
- -
- -
- -
- -
- -
- -

Now, instead of trying to figure out a long, esoteric docker buildx command, members of your team can execute - -npm run dockerize (note that you need npm run dockerize and not just npm dockerize as dockerize is custom - -command, and not one of the ones built-into NPM):

- -
- -
- -
- -
$ npm run dockerize
-
-
-
-> sample-app@v4 dockerize
-
-> docker buildx build --platform=linux/amd64,linux/arm64 -t sample-app:$(npm pkg get version | tr -d '"') .
-
-
-
-[+] Building 0.5s (14/14) FINISHED
-
- => [internal] load build definition from Dockerfile
-
-(... truncated ...)
-
- => [linux/amd64 4/4] COPY app.js .
-
- => [linux/arm64 4/4] COPY app.js .
- -
- -
- -
- -

Now that you know how to use a build system to automate parts of your workflow, let’s talk about another key - -responsibility of most built systems: managing dependencies.

- -
- -
- -
- -

Dependency Management

- -
- -

Most software projects these days rely on a large number of dependencies: that is, other software packages and - -libraries that your code uses. There are many kinds of dependencies:

- -
- -
- -
- -
Code in the same repo
- -
- -

You may choose to break up the code in a single repo into multiple modules or packages - -(depending on the programming language you’re using), and to have these modules depend on each other. This lets you - -develop different parts of your codebase in isolation from the others, possibly with completely separate teams - -working on each part.

- -
- -
Code in different repos
- -
- -

Your company may store code across multiple repos. This gives you even more isolation - -between the different parts of your software and makes it even easier for separate teams to take ownership for each - -part. Typically, when repo A depends on code in repo B, you depend on a specific version of that code. This version - -may correspond to a specific Git tag, or it could depend on a versioned artifact published from that repo: e.g., a - -Jar file in the Java world or a Ruby Gem in the Ruby world.

- -
- -
Open source code
- -
- -

Perhaps the most common type of dependency these days is a dependency on open source code. The - -2024 Open Source Security - -and Risk Analysis Report by Synopsis found that 96% of codebases rely on open source and that 70% of all the code - -in those codebases originates from open source! The open source code almost always lives in separate repos, so again, - -you’ll typically depend on a specific version of that code.

- -
- -
- -
- -
- -

Whatever type of dependency you have, there’s a common theme here: you use a dependency so that you can rely on someone - -else to solve certain problems for you, instead of having to solve everything yourself from scratch (and maintain it - -all). If you want to maximize that leverage, make sure to never copy & paste dependencies into your codebase. If you - -copy & paste a dependency, you run into a variety of problems:

- -
- -
- -
- -
Transitive dependencies
- -
- -

Copy/pasting a single dependency is easy, but if that dependency has its own dependencies, - -and those dependencies have their own dependencies, and so on (collectively known as transitive dependencies), - -then copy/pasting becomes rather hard.

- -
- -
Licensing
- -
- -

Copy/pasting may violate the license terms of that dependency, especially if you end up modifying that - -code because it now sits in your own repo. Be especially aware of dependencies that uses GPL-style licenses (known as - -copyleft or viral licenses), for if you modify the code in those dependencies, that may trigger a clause in the - -license that requires you to release your own code under the same license (i.e., you’ll be forced to open source your - -company’s proprietary code!).

- -
- -
Staying up to date
- -
- -

If you copy/paste the code, to get any future updates, you’ll have to copy/paste new code, and - -new transitive dependencies, and make sure you don’t lose any changes your team members made along the way.

- -
- -
Private APIs
- -
- -

You may end up using private APIs (since you can access those files locally) instead of the public - -ones that were actually designed to be used, which can lead to unexpected behavior, and make staying up to date even - -harder.

- -
- -
Bloating your repo
- -
- -

Every dependency you copy/paste into your version control system makes it larger and slower.

- -
- -
- -
- -
- -

The proper way to use dependencies is with a dependency management tool. Most build systems have dependency management - -tools built in, and the way they typically work is you define your dependencies as code, in the build configuration, - -including the version of the dependency you’re using, and the dependency management tool is then responsible for - -downloading that dependency, plus any transitive dependencies, and making it available to your code.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #3
- -
- -

Use a dependency management tool to pull in dependencies—not copy & paste.

- -
- -
- -
- -
- -

Let’s try out an example with the Node.js sample app and NPM.

- -
- -
- -
- -

Example: Add Dependencies in NPM

- -
- -

So far, the Node.js sample app you’ve been using has not had any dependencies other than the http standard library - -built into Node.js itself. Although you can build web apps this way, the more common approach is to use some sort of - -web framework. For example, Express is a popular web framework for Node.js. To use it, - -you can run:

- -
- -
- -
- -
$ npm install express --save
- -
- -
- -
- -

If you look into package.json, you will now have a new dependencies section, as shown in - -Example 70:

- -
- -
- -
Example 70. NPM managed dependencies (ch4/sample-app/package.json)
- -
- -
- -
- -
  "dependencies": {
-
-    "express": "^4.19.2"
-
-  }
- -
- -
- -
- -
- -
- -

You should also see two other changes in the folder with the package.json file:

- -
- -
- -
- -
node_modules
- -
- -

This is a scratch directory where NPM downloads dependencies. This folder should be in your - -.gitignore file so you do not check it into version control. Instead, whenever anyone checks out the repo the - -first time, they can run npm install, and NPM will install all the dependencies they need automatically.

- -
- -
package-lock.json
- -
- -

This is a dependency lock file: it captures the exact dependencies that were installed. - -This is useful because in package.json, you can specify a version range instead of a specific version to install. - -For example, you may have noticed that npm install set the version of Express to ^4.19.2. Note the caret (^) at - -the front: this is called a caret version range, and it allows NPM to install any version of Express at or above - -4.19.2 (so 4.20.0 would be OK, but not 5.0.0). So every time you run npm install, you may get a new - -version of Express. This can be a good thing, as you may be picking up bug fixes or security patches. But it can also - -be frustrating in an automated environment, as your builds may not be reproducible. With a lock file, you can use - -the npm ci command instead of npm install to tell NPM to install the exact versions in the lock file, so the - -build output is exactly the same every time. You’ll see an example of this shortly.

- -
- -
- -
- -
- -

Now that Express is installed, you can rewrite the code in app.js to use the Express framework, as shown in - -Example 71:

- -
- -
- -
Example 71. The sample app rewritten using the Express framework (ch4/sample-app/app.js)
- -
- -
- -
- -
const express = require('express');
-
-
-
-const app = express();
-
-const port = 8080;
-
-
-
-app.get('/', (req, res) => {
-
-  res.send('Hello, World!');
-
-});
-
-
-
-app.listen(port, () => {
-
-  console.log(`Example app listening on port ${port}`);
-
-});
- -
- -
- -
- -
- -
- -

This app listens on port 8080 and responds with "Hello, World!" just as before, but because you’re using a framework, - -it’ll be a lot easier to evolve this code into a real app by leveraging all the features built into Express: e.g., - -routing, templating, error-handling, middleware, security, and so on.

- -
- -
- -

There’s one more thing you need to do now that the app has dependencies: you need to update the Dockerfile to - -install dependencies, as shown in Example 72:

- -
- -
- -
Example 72. Update the Docker file to run npm install (ch4/sample-app/Dockerfile)
- -
- -
- -
- -
FROM node:21.7
-
-
-
-WORKDIR /home/node/app
-
-
-
-# (1)
-
-COPY package.json .
-
-COPY package-lock.json .
-
-
-
-# (2)
-
-RUN npm ci --only=production
-
-
-
-COPY app.js .
-
-
-
-EXPOSE 8080
-
-
-
-USER node
-
-
-
-CMD ["npm", "start"]
- -
- -
- -
- -
- -
- -

You need to make two changes to the Dockerfile:

- -
- -
- -
    - -
  1. - -

    Copy not only package.json, but also package-lock.json into the Docker image.

    - -
  2. - -
  3. - -

    Run npm ci, which, as mentioned earlier, is very similar to npm install, except it’s designed to do a - -clean install, where it installs the exact dependencies in the lock file, without any changes. This is meant to - -be used in automated environments, where you want repeatable builds. Note also the use of the --only=production - -flag to tell NPM to only install the production dependencies. You can have a devDependencies block on - -package.json where you define dependencies only used in the dev environment (e.g., tooling for automated testing, - -as you’ll see in the next section), and there’s no need to bloat the Docker image with these dependencies.

    - -
  4. - -
- -
- -
- -

You can now try running npm start to check that the app runs with its use of the Express framework as a dependency, - -or npm run dockerize to check that the Docker image still builds correctly.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

To avoid introducing too many new tools, I used NPM as a build system in this blog post, as it comes - -natively with Node.js. However, for production use cases, you may want to try out one of these more modern and robust - -build systems:

- -
- -
- - - -
- -
- -
- -
- -

Now that you’ve seen how a version control system allows your team members to work on the same code, and a build system - -allows your team members to work the same way, let’s turn our attention to one of the most important tools for allowing - -your team members to get work done quickly: automated tests.

- -
- -
- -
- -
- -

Automated Testing

- -
- -

Programming can be scary. One of the underappreciated costs of technical debt is the psychological impact it has on - -developers. There are thousands of programmers out there who are scared of doing their jobs. Perhaps you’re one of - -them.

- -
- -
- -

You get a bug report at three in the morning and after digging around, you isolate it to a tangled mess of spaghetti - -code. There is no documentation. The developer who originally wrote the code no longer works at the company. You don’t - -understand what the code is doing. You don’t know all the places it gets used. What you have here is legacy code.

- -
- -
- -
- -
- -

Legacy code. The phrase strikes disgust in the hearts of programmers. It conjures images of slogging through a murky - -swamp of tangled undergrowth with leaches beneath and stinging flies above. It conjures odors of murk, slime, - -stagnancy, and offal. Although our first joy of programming may have been intense, the misery of dealing with legacy - -code is often sufficient to extinguish that flame.

- -
- -
- -
- -— Michael Feathers
- -Working Effectively with Legacy Code (Pearson) - -
- -
- -
- -

Legacy code is scary. You’re afraid because you still have scars from the time you tried to fix one bug only to reveal - -three more; the "trivial" change that took two months; the tiny performance tweak that brought the whole system down - -and pissed off all of your coworkers. So now you’re afraid of your own codebase. That’s a tough place to be.

- -
- -
- -

Fortunately, there is a solution: automated testing, where you write test code to validate that your production - -code works the way you expect it to. The main reason to write automated tests is not that tests prove the - -correctness of your code (they don’t) or that you’ll catch all bugs with tests (you won’t), but that a good suite of - -automated tests gives you the confidence to make changes quickly.

- -
- -
- -

The key word is confidence: tests provide a psychological benefit as much as a technical one. If you have a good test - -suite, you don’t have to keep the state of the whole program in your head. You don’t have to worry about breaking other - -people’s code. You don’t have to repeat the same boring, error-prone manual testing over and over again. You just run a - -single test command and get rapid feedback on whether things are working.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #4
- -
- -

Use automated tests to give your team the confidence to make changes quickly.

- -
- -
- -
- -
- -

There are many types of automated tests:

- -
- -
- -
- -
Compiler
- -
- -

If you’re using a statically-typed language (e.g., Java, Scala, Haskell, Go, TypeScript), you can - -compile the code to automatically identify (a) syntactic issues and (b) type errors. If you’re using a - -dynamically-typed language (e.g., Ruby, Python, JavaScript), you can pass the code through the interpreter to - -identify syntactic issues.

- -
- -
Static analysis / linting
- -
- -

These are tools that read and check your code "statically"—that is, without executing - -it—to automatically identify potential issues. Examples: ShellCheck for Bash, - -ESLint for JavaScript, SpotBugs for Java, - -RuboCop for Ruby.

- -
- -
Policy tests
- -
- -

In the last few years, policy as code tools have become more popular as a way to define and enforce - -company policies and legal regulations in code. Examples: Open Policy Agent, - -Sentinel, Intercept. Many of these tools are based on - -static analysis, except they give you flexible languages to define what sorts of rules you want to check. Some rely - -on plan testing, as described next.

- -
- -
Plan tests
- -
- -

Whereas static analysis is a way to test your code without executing it at all, plan testing is a way - -to partially execute your code. This typically only applies to tools that can generate an execution plan without - -actually executing the code. For example, OpenTofu has a plan command that shows you what changes the code would - -make to your infrastructure without actually making those changes: so in effect, you are running all the read - -operations of your code, but none of the write operations. You can write automated tests against this sort of plan - -output using tools such as Open Policy Agent and - -Terratest.

- -
- -
Unit tests
- -
- -

This is the first of the test types that fully execute your code to test it. The idea with unit tests - -is to execute only a single "unit" of your code: what a unit is depends on the programming language, but it’s - -typically a small part of the code, such as one function or one class. You typically mock any dependencies outside - -of that unit (e.g., databases, other services, the file system), so that the test solely executes the unit in - -question. Some programming languages have unit testing tools built in, such as - -testing for Go and unittest for - -Python, whereas other languages rely on 3rd party tools for unit testing, such as JUnit - -for Java and Jest for JavaScript.

- -
- -
Integration tests
- -
- -

Just because you’ve tested a unit in isolation and it works, doesn’t mean that multiple units - -will work when you put them together. That’s where integration testing comes in. Here, you test multiple units of - -your code (e.g., multiple functions or classes), often with a mix of real dependencies (e.g., a database) and mocked - -dependencies (e.g., a mock remote service).

- -
- -
End-to-end (E2E) tests
- -
- -

End-to-end tests verify that your entire product works as a whole: that is, your run your - -app, all the other services you rely on, all your databases and caches, and so on, and test them all together. These - -often overlap with the idea of acceptance tests, which verify your product works from the perspective of the user - -or customer ("does the product solve the problem the user cares about").

- -
- -
Performance tests
- -
- -

Most unit, integration, and E2E tests verify the correctness of a system under ideal conditions: - -one user, low system load, and no failures. Performance tests verify the stability and responsiveness of a system in - -the face of heavy load and failures.

- -
- -
- -
- -
- -

Automated tests are how you fight your fear. They are how you fight legacy code. In fact, in the same book I - -quoted earlier, Michael Feathers writes, "to me, legacy code is simply code without tests." I don’t know about you, but - -I don’t want to add more legacy code to this world, so that means it’s time to write some tests!

- -
- -
- -

Example: Add Automated Tests for the Node.js App

- -
- -

Consider the Node.js sample app you’ve been using in this blog post, as shown in - -Example 73:

- -
- -
- -
Example 73. The Node.js sample app (ch4/sample-app/app.js)
- -
- -
- -
- -
const express = require('express');
-
-
-
-const app = express();
-
-const port = 8080;
-
-
-
-app.get('/', (req, res) => {
-
-  res.send('Hello, World!');
-
-});
-
-
-
-app.listen(port, () => {
-
-  console.log(`Example app listening on port ${port}`);
-
-});
- -
- -
- -
- -
- -
- -

Stop for a second and ask yourself, how do you know this code actually works? So far, the way you’ve answered that - -question is through manual testing, where you manually ran the app with npm start and checked URLs in your browser. - -This works fine for a tiny, simple app, but once the app grows larger (hundreds of URLs to check) and your team grows - -larger (hundreds of developers making changes), manual testing will become too time-consuming and error-prone.

- -
- -
- -

The idea with automated testing is to write code that performs the testing steps for you, taking advantage of the fact - -that computers can perform these checks far faster and more reliably than a person. To get a feel for automated - -testing, let’s start with a simple example: a unit test.

- -
- -
- -

Add unit tests for the Node.js App

- -
- -

To create a unit test, you need a unit of code. Let’s create a basic one just for learning in a new file called - -reverse.js with the contents shown in Example 74:

- -
- -
- -
Example 74. Example module that can reverse characters and words in strings (ch4/sample-app/reverse.js)
- -
- -
- -
- -
// (1)
-
-function reverseWords(str) {
-
-  return str
-
-    .split(' ')
-
-    .reverse()
-
-    .join(' ');
-
-}
-
-
-
-// (2)
-
-function reverseCharacters(str) {
-
-  return str
-
-    .split('')
-
-    .reverse()
-
-    .join('');
-
-}
-
-
-
-module.exports = {reverseCharacters, reverseWords};
- -
- -
- -
- -
- -
- -

This code contains two functions:

- -
- -
- -
    - -
  1. - -

    reverseWords reverses the words in a string. For example, if you pass in "hello world", you should get back "world - -hello".

    - -
  2. - -
  3. - -

    reverseCharacters reverses the characters in a string. For example, if you pass in "abcd", you should get back - -"dcba".

    - -
  4. - -
- -
- -
- -

Let me ask the same question again: how do you know this code actually works? I suppose you could stare at the code for - -a while, simulate what it does in your head, and declare it as either working or not. But if you’ve ever written code, - -you’ve written buggy code, so you know that relying on the simulator in your head isn’t enough. You’ve got to test the - -code.

- -
- -
- -

One option is to test the code manually. For example, you could fire up a REPL (read-eval-print-loop), which is an - -interactive shell where you can manually execute code. For Node.js, you can get a REPL by running the node executable - -with no arguments:

- -
- -
- -
- -
$ node
-
-Welcome to Node.js v21.7.1.
-
-Type ".help" for more information.
-
->
- -
- -
- -
- -

You can now type code into this REPL, hit ENTER, and Node.js will execute the and show you the result:

- -
- -
- -
- -
> 2 + 2
-
-4
- -
- -
- -
- -

You could use this to test the reverseWords function as follows:

- -
- -
- -
- -
> const reverse = require('./reverse')
-
-undefined
-
-> reverse.reverseWords('hello world')
-
-'world hello'
- -
- -
- -
- -

(When you’re done experimenting with the REPL, use Ctrl+D to exit).

- -
- -
- -

Hey, that seems to work! But this is hardly a thorough test, and doing this manually every time is time-consuming and - -error-prone. So let’s capture the steps you did in a REPL in an automated test.

- -
- -
- -

First, you need to install some testing libraries: you’ll use Jest as a testing framework and, a - -little later on, SuperTest as a library for testing HTTP apps. Use - -npm install to add these dependencies, but this time, use the --save-dev flag to save them as dev dependencies; - -this way, they’ll be available during development (where you run tests), but won’t be packaged into your app for - -production deployments (where you don’t run tests):

- -
- -
- -
- -
$ npm install --save-dev jest supertest
- -
- -
- -
- -

This will update package.json with a new devDependencies section, as shown in Example 75:

- -
- -
- -
Example 75. Your package.json file should now contain dev dependencies (ch4/sample-app/package.json)
- -
- -
- -
- -
{
-
-  "dependencies": {
-
-    "express": "^4.19.2"
-
-  },
-
-  "devDependencies": {
-
-    "jest": "^29.7.0",
-
-    "supertest": "^7.0.0"
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

Next, update the test command in package.json to run Jest, as shown in Example 76:

- -
- -
- -
Example 76. Update the test command to run Jest (ch4/sample-app/package.json)
- -
- -
- -
- -
"scripts": {
-
-  "test": "jest --verbose"
-
-}
- -
- -
- -
- -
- -
- -

Now you can start writing tests. Create a file called reverse.test.js with the contents shown in - -Example 77:

- -
- -
- -
Example 77. Example unit test for the reverseWords function (ch4/sample-app/reverse.test.js)
- -
- -
- -
- -
const reverse = require('./reverse');
-
-
-
-describe('test reverseWords', () => {                   // (1)
-
-  test('hello world => world hello', () => {            // (2)
-
-    const result = reverse.reverseWords('hello world'); // (3)
-
-    expect(result).toBe('world hello');                 // (4)
-
-  });
-
-});
- -
- -
- -
- -
- -
- -

Here’s how this code works:

- -
- -
- -
    - -
  1. - -

    You use the describe function to group several tests together. The first argument to describe is the - -description of this group of tests and the second argument is a function that will run the tests for this group.

    - -
  2. - -
  3. - -

    You use the test function to define individual tests. The first argument is the description of the test and the - -second argument is the function that will run the test.

    - -
  4. - -
  5. - -

    Call the reverseWords function and store the result in the variable result, just as you did in the REPL.

    - -
  6. - -
  7. - -

    Use the expect matcher to check that the result matches "world hello". If it doesn’t match, fail the test.

    - -
  8. - -
- -
- -
- -

Use npm test to run this test:

- -
- -
- -
- -
$ npm test
-
-
-
-> sample-app@v4 test
-
-> jest --verbose
-
-
-
- PASS  ./reverse.test.js
-
-  test reverseWords
-
-    ✓ hello world => world hello (1 ms)
-
-
-
-Test Suites: 1 passed, 1 total
-
-Tests:       1 passed, 1 total
-
-Snapshots:   0 total
-
-Time:        0.192 s, estimated 1 s
-
-Ran all test suites.
- -
- -
- -
- -

The test passed! And it took all of 0.192 seconds, which is a whole lot faster than manually typing in a REPL.

- -
- -
- -

Add a second test for reverseWords as shown in Example 78:

- -
- -
- -
Example 78. A second unit test for the reverseWords function (ch4/sample-app/reverse.test.js)
- -
- -
- -
- -
  test('trailing whitespace   => whitespace trailing', () => {
-
-    const result = reverse.reverseWords('trailing whitespace   ');
-
-    expect(result).toBe('whitespace trailing');
-
-  });
- -
- -
- -
- -
- -
- -

Re-run npm test:

- -
- -
- -
- -
$ npm test
-
-
-
- FAIL  ./reverse.test.js
-
-  test reverseWords
-
-    ✓ hello world => world hello (1 ms)
-
-    ✕ trailing whitespace   => whitespace trailing (1 ms)
-
-
-
-  ● test reverseWords › trailing whitespace   => whitespace trailing
-
-
-
-    expect(received).toBe(expected) // Object.is equality
-
-
-
-    Expected: "whitespace trailing"
-
-    Received: " whitespace trailing"
-
-
-
-      17 |   test('trailing whitespace   => whitespace trailing', () => {
-
-      18 |     const result = reverse.reverseWords('trailing whitespace   ');
-
-    > 19 |     expect(result).toBe('whitespace trailing');
-
-         |                    ^
-
-      20 |   });
-
-
-
-      at Object.toBe (reverse.test.js:19:20)
- -
- -
- -
- -

Oops. Looks like the code has a bug after all: it doesn’t handle trailing whitespace correctly. A powerful benefit of - -automated testing is that you can create tests for all the various corner cases and find out if your code really does - -what you expect. The fix for this issue shown in Example 79:

- -
- -
- -
Example 79. Fix whitespace handling in reverseWords (ch4/sample-app/reverse.js)
- -
- -
- -
- -
function reverseWords(str) {
-
-  return str
-
-    .trim() // (1)
-
-    .split(' ')
-
-    .reverse()
-
-    .join(' ');
-
-}
- -
- -
- -
- -
- -
- -
    - -
  1. - -

    The fix is to use the trim function to strip leading and trailing whitespace.

    - -
  2. - -
- -
- -
- -

How can you be sure that this fix works? Re-run the tests!

- -
- -
- -
- -
$ npm test
-
-
-
- PASS  ./reverse.test.js
-
-  test reverseWords
-
-    ✓ hello world => world hello (1 ms)
-
-    ✓ trailing whitespace   => whitespace trailing
- -
- -
- -
- -

This is a good example of the typical way you write code when you have a good suite of automated test to lean on: - -you make a change, you re-run the tests, you make another change, you rerun the tests again, and so on, adding new tests - -as necessary. With each iteration, your test suite gradually improves, you build more and more confidence in your - -code, and you can go faster and faster.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #5
- -
- -

Automated testing makes you more productive while coding by providing a rapid feedback loop: make a change, run the - -tests, make another change, re-run the tests, and so on.

- -
- -
- -
- -
- -

Rapid feedback loops are a big part of the DevOps methodology, and a big part of being more productive as a programmer. - -And this not only helps you fix the bug with whitespace faster, but now you also have a regression test in place that - -will prevent that bug from coming back. This is a massive boost to productivity that often gets overlooked.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #6
- -
- -

Automated testing makes you more productive in the future, too: you save a huge amount of time not having to fix - -bugs because the tests prevented those bugs from slipping through in the first place.

- -
- -
- -
- -
- -
- -

Using code coverage tools to improve unit tests

- -
- -

A useful feature available with some automated testing tools is the ability to measure code coverage: that is, what - -percent of your code got executed by your tests. If your tests are only executing 10% of your code, then how much - -confidence can you have that your code really works, and that there aren’t bugs hiding in the other 90%? To have Jest - -measure code coverage, add the --coverage flag to the test command in package.json, as shown in - -Example 80:

- -
- -
- -
Example 80. Update the test command to measure code coverage (ch4/sample-app/package.json)
- -
- -
- -
- -
    "test": "jest --verbose --coverage"
- -
- -
- -
- -
- -
- -

Run the tests one more time:

- -
- -
- -
- -
$ npm test
-
-
-
- PASS  ./reverse.test.js
-
-  test reverseWords
-
-    ✓ hello world => world hello (1 ms)
-
-    ✓ trailing whitespace   => whitespace trailing
-
-
-
-------------|---------|----------|---------|---------|-------------------
-
-File        | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-
-------------|---------|----------|---------|---------|-------------------
-
-All files   |   66.66 |      100 |      50 |   66.66 |
-
- reverse.js |   66.66 |      100 |      50 |   66.66 | 22
-
-------------|---------|----------|---------|---------|-------------------
- -
- -
- -
- -

You now get a table at the end of the output that shows each file and what percentage of the code was executed during - -the automated tests. You should also see a new coverage folder that contains even more information, including some - -HTML reports within coverage/lcov-report/index.html. Try opening this file in a browser:

- -
- -
- -
- -
$ open coverage/lcov-report/index.html
- -
- -
- -
- -

You should see a page that looks similar to Figure 38:

- -
- -
- -
- -Code coverage output - -
- -
Figure 38. Code coverage output (coverage/lcov-report/index.html)
- -
- -
- -

As you can see, you’re only testing about two-thirds of your code. To get more details into what you missed, click on - -reverse.js, and you should see something similar to Figure 39:

- -
- -
- -
- -Code coverage output for reverse.js - -
- -
Figure 39. Code coverage output for reverse.js (coverage/lcov-report/index.html)
- -
- -
- -

This page shows you your own code: the green "2x" and "1x" indicate those parts of the code were executed during - -testing twice or once, respectively. The highlighted code in red tells you code that wasn’t executed at all: of course, - -there are no tests for the reverseCharacters function!

- -
- -
- -

Now that code coverage has helped you see where your tests are lacking, head into reverse.test.js, and add a new unit - -test for reverseCharacters, as shown in Example 81:

- -
- -
- -
Example 81. Add a unit test for reverseCharacters (ch4/sample-app/reverse.test.js)
- -
- -
- -
- -
describe('test reverseCharacters', () => {
-
-  test('abcd => dcba', () => {
-
-    const result = reverse.reverseCharacters('abcd');
-
-    expect(result).toBe('dcba');
-
-  });
-
-});
- -
- -
- -
- -
- -
- -

Run the tests one more time:

- -
- -
- -
- -
$ npm test
-
-
-
- PASS  ./reverse.test.js
-
-  test reverseWords
-
-    ✓ hello world => world hello (1 ms)
-
-    ✓ trailing whitespace   => whitespace trailing (1 ms)
-
-  test reverseCharacters
-
-    ✓ abcd => dcba
-
-
-
-------------|---------|----------|---------|---------|-------------------
-
-File        | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-
-------------|---------|----------|---------|---------|-------------------
-
-All files   |     100 |      100 |     100 |     100 |
-
- reverse.js |     100 |      100 |     100 |     100 |
-
-------------|---------|----------|---------|---------|-------------------
- -
- -
- -
- -

And there you go, all tests are passing, and code coverage is now at 100%.

- -
- -
- -
- -

Add end-to-end tests for the Node.js App

- -
- -

Now that you have a feel for unit testing, let’s go back to the original problem of testing app.js, and add an - -end-to-end test for the app: that is, a test that makes an HTTP request to the app, and checks the response. To do - -that, you first need to split out the part of app.js that listens on a port into a separate file called server.js. - -That way, you’ll be able to run multiple copies of your app concurrently during automated testing without getting - -errors due to trying to listen on the same port.

- -
- -
- -

First, update app.js to solely configure the Express app, and to export it, as shown in Example 82:

- -
- -
- -
Example 82. Update app.js to only create the app, but not listen on a port (ch4/sample-app/app.js)
- -
- -
- -
- -
const express = require('express');
-
-
-
-const app = express();
-
-
-
-app.get('/', (req, res) => {
-
-  res.send('Hello, World!');
-
-});
-
-
-
-module.exports = app;
- -
- -
- -
- -
- -
- -

Next, create a new file called server.js that imports the code from app.js and has it listen on a port, as shown in - -Example 83:

- -
- -
- -
Example 83. Create server.js to listen on a port (ch4/sample-app/server.js)
- -
- -
- -
- -
const app = require('./app');
-
-
-
-const port = 8080;
-
-
-
-app.listen(port, () => {
-
-  console.log(`Example app listening on port ${port}`);
-
-});
- -
- -
- -
- -
- -
- -

Make sure to update the start command in package.json to now use server.js instead of app.js, as shown in - -Example 84:

- -
- -
- -
Example 84. Update the start command to run server.js (ch4/sample-app/package.json)
- -
- -
- -
- -
    "start": "node server.js",
- -
- -
- -
- -
- -
- -

Now, finally, you can add a test for the app in a new file called app.test.js, as shown in Example 85:

- -
- -
- -
Example 85. Add an automated test for the app (ch4/sample-app/app.test.js)
- -
- -
- -
- -
const request = require('supertest');
-
-const app = require('./app');                     // (1)
-
-
-
-describe('Test the app', () => {
-
-  test('Get / should return Hello, World!', async () => {
-
-    const response = await request(app).get('/'); // (2)
-
-    expect(response.statusCode).toBe(200);        // (3)
-
-    expect(response.text).toBe('Hello, World!');  // (4)
-
-  });
-
-});
- -
- -
- -
- -
- -
- -

Here’s how this test works:

- -
- -
- -
    - -
  1. - -

    Import the app code from app.js.

    - -
  2. - -
  3. - -

    Use the SuperTest library (imported under the name request) to fire up the app and make an HTTP GET request to - -it at the "/" URL.

    - -
  4. - -
  5. - -

    Check that the response status code from the app is a 200 OK.

    - -
  6. - -
  7. - -

    Check that the response body from the app is the text "Hello, World!"

    - -
  8. - -
- -
- -
- -

Re-run the tests one more time:

- -
- -
- -
- -
$ npm test
-
-
-
- PASS  ./app.test.js
-
-  Test the app
-
-    ✓ Get / should return Hello, World! (14 ms)
-
-
-
- PASS  ./reverse.test.js
-
-  test reverseWords
-
-    ✓ hello world => world hello
-
-    ✓ trailing whitespace   => whitespace trailing
-
-  test reverseCharacters
-
-    ✓ abcd => dcba (1 ms)
-
-
-
-------------|---------|----------|---------|---------|-------------------
-
-File        | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-
-------------|---------|----------|---------|---------|-------------------
-
-All files   |     100 |      100 |     100 |     100 |
-
- app.js     |     100 |      100 |     100 |     100 |
-
- reverse.js |     100 |      100 |     100 |     100 |
-
-------------|---------|----------|---------|---------|-------------------
-
-Test Suites: 2 passed, 2 total
-
-Tests:       4 passed, 4 total
-
-Snapshots:   0 total
-
-Time:        0.345 s, estimated 1 s
- -
- -
- -
- -

Excellent! All your tests are passing, you have 100% code coverage, and all of this runs in just 0.345 seconds.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here is an exercise you can try at home to get a better feel for writing automated tests for app code:

- -
- -
- -
    - -
  • - -

    Add a new endpoint to the sample app and add a new automated test to validate the endpoint works as - -expected.

    - -
  • - -
- -
- -
- -
- -
- -
- -
- -

Example: Add Automated Tests for the OpenTofu Code

- -
- -

It’s a good idea to write automated tests not only for app code, but for your infrastructure code, too. The tooling - -for infrastructure tests isn’t as mature and the tests take longer to run, but they give all the same benefits.

- -
- -
- -

As an example, let’s add automated tests for the lambda-sample OpenTofu module you built in - -Part 3. Copy that module, unchanged, from your work in that blog post into a - -folder for this blog post:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch4/tofu/live
-
-$ cp -r ch3/tofu/live/lambda-sample ch4/tofu/live
-
-$ cd ch4/tofu/live/lambda-sample
- -
- -
- -
- -

There are several approaches to testing OpenTofu code, including the following:

- -
- -
- -
- -
Static analysis
- -
- -

Using tools such as Terrascan, - -Trivy, and tflint.

- -
- -
Policy enforcement
- -
- -

Using tools such as Open Policy Agent and - -Sentinel.

- -
- -
Plan testing
- -
- -

Using tools such as the built-in test command, - -Open Policy Agent, and Terratest.

- -
- -
Unit, integration, and end-to-end testing
- -
- -

Using the built-in test - -command (which works for simple modules and tests) and Terratest (which is a better - -option for more complex modules and tests).

- -
- -
- -
- -
- -

Any testing is better than none, so at an absolute bare minimum, you should set up static analysis, as it takes very - -little effort, runs quickly, and will catch certain types of bugs and security issues. The next section shows you an - -example of how to do that.

- -
- -
- -

Add static analysis for your OpenTofu code using Terrascan

- -
- -

As an example, let’s use Terrascan as a static analysis tool for OpenTofu. First, create a config file for Terrascan - -called terrascan.toml, with the contents shown in Example 86:

- -
- -
- -
Example 86. Config file for Terrascan (ch4/tofu/live/lambda-sample/terrascan.toml)
- -
- -
- -
- -
[severity]
-
-level = "high"
- -
- -
- -
- -
- -
- -

This file supports a number of configuration settings for Terrascan, but the only one you need for now is to - -configure Terrascan to only show high severity errors. The lower severity ones aren’t relevant for our simple - -example here, but you may wish to look at them for production code.

- -
- -
- -

Next, install Terrascan, and run it in the - -lambda-sample folder as follows:

- -
- -
- -
- -
$ terrascan scan \
-
-  --iac-type terraform \
-
-  --non-recursive \
-
-  --verbose \
-
-  -c terrascan.toml
- -
- -
- -
- -

The preceding command uses the following flags:

- -
- -
- -
- -
--iac-type terraform
- -
- -

Analyze only Terraform or OpenTofu code.

- -
- -
--non-recursive
- -
- -

By default, Terrascan tries to scan everything in the current folder and all subfolders. This flag avoids Terrascan - -scanning the src folder within lambda-sample and complaining that folder doesn’t contain OpenTofu code.

- -
- -
--verbose
- -
- -

This gives a bit of extra log output, including Rule IDs for any policies that have been violated.

- -
- -
-c terrascan.toml
- -
- -

Use the settings in the configuration file terrascan.toml you created.

- -
- -
- -
- -
- -

When you run Terrascan, it should identify one policy violation:

- -
- -
- -
- -
Violation Details -
-
-
-
-Description  :	Lambda does not use KMS CMK key to protect environment variables.
-
-File         :	main.tf
-
-Module Name  :	root
-
-Plan Root    :	./
-
-Line         :	7
-
-Severity     :	HIGH
-
-Rule Name    :	lambdaNotEncryptedWithKms
-
-Rule ID      :	AC_AWS_0483
-
-Resource Name:	function
-
-Resource Type:	aws_lambda_function
-
-Category     :	Data Protection
- -
- -
- -
- -

Terrascan has found that the environment variables you’re passing to the Lambda function are not encrypted. If those - -environment variables contained any secrets, this would be a serious issue, so it’s great to have that flagged for us. - -That said, in this simple example, you’re not passing any secrets around, so you can tell Terrascan to skip this check - -by adding its Rule ID to the skip-rules section of your Terrascan configuration file as shown in - -Example 87:

- -
- -
- -
Example 87. Configure Terrascan to skip a policy check (ch4/tofu/live/lambda-sample/terrascan.toml)
- -
- -
- -
- -
[rules]
-
-    skip-rules = [
-
-        # We are not passing any secrets to Lambda via env vars
-
-        "AC_AWS_0483"
-
-    ]
- -
- -
- -
- -
- -
- -

If you re-run Terrascan, it’ll still show the policy violation, but this time, it won’t cause the check to fail.

- -
- -
- -

Static analysis is good, but a unit test is even better, as it actually executes your code and checks its - -functionality, which allows you to catch a much wider variety of errors.

- -
- -
- -
- -

Add unit tests for your OpenTofu code using the test command

- -
- -

As an example, let’s add a unit test that uses OpenTofu’s built-in test command. Note that these tests will deploy - -real resources into your AWS account, so in some sense, they are closer to integration tests, but because you’re going - -to be testing just a single unit—a single module—I’ll stick with the term unit test to disambiguate from tests that - -test the integration of multiple modules together.

- -
- -
- -

First, you need to add a small helper module for testing HTTP endpoints. The blog post series’s - -sample code repo includes a module called test-endpoint in the - -ch4/tofu/modules/test-endpoint folder that can make an HTTP request to an endpoint you specify. Normally, you could - -use this module directly from GitHub, but currently, the test command has a limitation where it can only use local - -modules, so git clone the sample code repo (if you haven’t already) to the devops-book folder and - -make a copy of the test-endpoint module:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch4/tofu/modules
-
-$ cp -r ../devops-book/ch4/tofu/modules/test-endpoint ch4/tofu/modules
- -
- -
- -
- -

Next, in the lambda-sample module, create a file called deploy.tftest.hcl, with the contents shown in - -Example 88:

- -
- -
- -
Example 88. Automated test for the lambda-sample module (ch4/tofu/live/lambda-sample/deploy.tftest.hcl)
- -
- -
- -
- -
# (1)
-
-run "deploy" {
-
-  command = apply
-
-}
-
-
-
-# (2)
-
-run "validate" {
-
-  command = apply
-
-
-
-  # (3)
-
-  module {
-
-    source = "../../modules/test-endpoint"
-
-  }
-
-
-
-  # (4)
-
-  variables {
-
-    endpoint = run.deploy.api_endpoint
-
-  }
-
-
-
-  # (5)
-
-  assert {
-
-    condition     = data.http.test_endpoint.status_code == 200
-
-    error_message = "Unexpected status: ${data.http.test_endpoint.status_code}"
-
-  }
-
-
-
-  # (6)
-
-  assert {
-
-    condition     = data.http.test_endpoint.response_body == "Hello, World!"
-
-    error_message = "Unexpected body: ${data.http.test_endpoint.response_body}"
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

This automated test is written in the same language (HCL) as the rest of OpenTofu code. You put these tests into - -files with the .tftest.hcl extension, and they primarily consist of run blocks that OpenTofu executes - -sequentially:

- -
- -
- -
    - -
  1. - -

    The first run block will run apply on the lambda-sample module itself.

    - -
  2. - -
  3. - -

    The second run block will run apply as well, but this time on a test-endpoint module, as described in (3).

    - -
  4. - -
  5. - -

    This module block is how you tell the run block to run apply on the test-endpoint module, which is the - -module you copied from the blog post series’s sample code repo.

    - -
  6. - -
  7. - -

    Read the API Gateway endpoint output from the lambda-sample module and pass it in as the endpoint input - -variable for the test-endpoint module.

    - -
  8. - -
  9. - -

    assert blocks are used to check if the code actually works as you expect. This first assert block checks that - -the test-endpoint module’s HTTP request got a response status code of 200 OK.

    - -
  10. - -
  11. - -

    The second assert block checks that the test-endpoint module’s HTTP request got a response body with the text - -"Hello, World!"

    - -
  12. - -
- -
- -
- -

To run this test, authenticate to AWS as described in Authenticating to AWS on the command line, and use the tofu test - -command:

- -
- -
- -
- -
$ tofu test
-
-deploy.tftest.hcl... pass
-
-  run "deploy"... pass
-
-  run "validate"... pass
-
-
-
-Success! 2 passed, 0 failed.
- -
- -
- -
- -

OpenTofu will run apply, deploy your real resources, and then, at the end of the test, run destroy to clean - -everything up again. These tests take several minutes to run, so be patient. But when they are done, you can have - -reasonable confidence that your module deploys infrastructure that really works.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for writing automated tests for infrastructure code:

- -
- -
- -
    - -
  • - -

    Figure out how to encrypt the environment variables in the lambda module, which is a better fix for the Terrascan - -error.

    - -
  • - -
  • - -

    Add a new endpoint in your lambda module and add a new automated test to validate the endpoint works as - -expected.

    - -
  • - -
- -
- -
- -
- -
- -
- -
- -

Testing Best Practices

- -
- -

Now that you understand the basics of automated testing, let’s discuss the best practices:

- -
- -
- -
    - -
  • - -

    The test pyramid

    - -
  • - -
  • - -

    What to test

    - -
  • - -
  • - -

    Test-Driven Development (TDD)

    - -
  • - -
- -
- -
- -

The test pyramid

- -
- -

One question that comes up often is, which testing approach should you use? Unit tests? Integration tests? E2E tests?

- -
- -
- -

The answer is: a mix of all of them! Each type of test has different types of errors they can catch, plus different - -strengths and weaknesses, as summarized in Table 8:

- -
- - - - - -- -- -- -- -- -- -- -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 8. A comparison of different types of automated tests
CompilerStatic analysisPolicy testsPlan testsUnit testsIntegration testsE2E testsPerf tests

Syntax errors

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Type errors

Yes Yes

No No

No No

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Compliance errors

No No

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Unit functionality

No No

No No

No No

Partial Partial

Yes Yes

Yes Yes

Yes Yes

Yes Yes

Interaction of units

No No

No No

No No

No No

No No

Yes Yes

Yes Yes

Yes Yes

System functionality

No No

No No

No No

No No

No No

No No

Yes Yes

Yes Yes

Functionality under load

No No

No No

No No

No No

No No

No No

No No

Yes Yes

Speed

Very fast Very fast

Very fast Very fast

Very fast Very fast

Fast Fast

Fast Fast [26]

Slow Slow

Very slow Very slow

Very slow Very slow

Stability

Very stable Very stable

Very stable Very stable

Very stable Very stable

Stable Stable

Stable Stable

Flaky Flaky

Very flaky Very flaky

Very flaky Very flaky

Ease of use

Easy Easy

Easy Easy

Easy Easy

Easy Easy

Moderate Moderate

Hard Hard

Very hard Very hard

Very hard Very hard

- -
- -

The only way to be confident your code works as expected is to combine multiple types of tests. That doesn’t mean that - -you use all the different types of tests in equal proportion. In most cases, you want the proportion of tests to follow - -the test pyramid shown in Figure 40:

- -
- -
- -
- -The test pyramid - -
- -
Figure 40. The test pyramid
- -
- -
- -

The idea of the test pyramid is that, as you go up the pyramid, the cost and complexity of writing the tests, the - -brittleness of the tests, and the runtime of the tests all increase. Therefore, you typically want to do as much - -testing as you can with the types of tests that are fast to write, fast to run, and stable, which means the majority - -of your testing (the base of the pyramid), should leverage the compiler, static analysis, plan tests, policy tests, - -and unit tests. You then have a smaller number of integration tests (the middle of the pyramid), and an even smaller - -number of very high-value end-to-end and performance tests (the top of the pyramid).

- -
- -
- -

Moreover, you don’t have to add all the different types of tests at once. Instead, pick the ones that give you the best - -bang for your buck and add those first. Almost any testing is better than none. If all you can add for now is - -static analysis or unit tests, then that’s still better than no tests. Or maybe the highest value in your use case is - -a single end-to-end test that verifies your system really works: that’s a perfectly fine starting point, too. Start - -with something, anything that gives you value, and then add more and more tests incrementally.

- -
- -
- -
- -

What to test

- -
- -

Another question that comes up often is, what should you test? There are some testing purists out there who believe - -that every line of code must be tested and that your tests must achieve 100% code coverage. I am not one of them.

- -
- -
- -

There is no doubt that tests offer a huge amount of value. But they also have a cost. Writing tests, maintaining them, - -and ensuring they run quickly and reliably can take a lot of time. In many cases, this overhead is worth it. In some - -cases, it’s not. In practice, I’ve found that deciding if you should invest in adding automated tests for a certain part - -of your code comes down to continuously evaluating your testing strategy and making trade-offs between the following - -factors:

- -
- -
- -
- -
The cost of bugs
- -
- -

If you’re building a prototype that you’ll most likely throw away in a week, the cost of bugs is low. If you’re - -building a payment processing system, the cost of bugs is very high—you don’t want to charge a customer’s - -credit card twice or for the wrong amount. Bugs are also costly in any system that touches data storage (i.e., any - -code that can delete or corrupt user data) and any code related to security (e.g., authentication, authorization, - -encryption). If you have some part of your system that simply cannot be allowed to break, you should invest in - -automated tests.

- -
- -
The likelihood of bugs
- -
- -

As a codebase gets larger, it is less likely that you can keep it working solely through manual testing. Similarly, - -as you increase the number of people working on the same code, automated tests become crucial to avoid integration - -bugs and as a way to document what the code should do. It’s also worth mentioning that some technical problems - -are inherently more complicated, so you’ll need more tests to solve them correctly. For example, you might want to - -write automated tests if you’re solving complicated math problems or writing your own distributed consensus - -algorithms.

- -
- -
The cost of testing
- -
- -

With most languages and tools, setting up unit tests is so easy, the tests run so fast, and the improvement to code - -quality and correctness is so high that it is almost always worth writing unit tests. On the other hand, - -integration tests, end-to-end tests, and performance tests are each progressively more expensive to set up, so - -whether it’s worth paying the cost depends on just how high that cost is, and what you’ll get in return.

- -
- -
The cost of not having tests
- -
- -

It’s possible to get lost in an analytical cost/benefit analysis and conclude that tests aren’t worth it. Many - -companies do just that. But you have to remember that this has a cost, too: fear. When you work in a codebase without - -tests, you end up with a bunch of developers who are afraid to make changes. So if every time you go to add a new - -feature or deploy something to production, you find your team hesitating and stalling, then you are paying a high - -cost for not having tests, and it can cause your company to grind to a halt. In those cases, the cost of automated - -tests is far lower than the cost of having a paralyzed dev team.

- -
- -
- -
- -
- -

One thing that impacts both the cost of writing tests and the benefits you get from those tests is when you write - -those tests: trying to add tests several years after you write the code tends to be much more expensive - -and not as beneficial; adding tests a day after you write the code tends to be cheaper and have more benefits; and as - -it turns out, adding tests before you write the code may be the lowest cost and most beneficial option of all, as - -discussed in the next section.

- -
- -
- -
- -

Test-Driven Development (TDD)

- -
- -

The mere act of trying to write tests for your code will force you to take a step back and ask some important - -questions: How do I structure the code so I can test it? What dependencies do I have? What are the common use cases? - -What are the corner cases?

- -
- -
- -

If you find that your code is hard to test, it’s almost always a sign that it needs to be refactored for other reasons, - -too. For example, if the code uses lots of mutable state and side effects, it will not only be hard to test but also - -hard to reuse and reason about the code. If the code is difficult to test because it has many complex interactions with - -its dependencies, then it’s likely that the code is too tightly coupled and will be difficult to change. If the code is - -hard to test because there are too many use cases to cover, then that’s a sign that the code is doing too much and - -needs to be broken up.

- -
- -
- -

In other words, tests not only help you write correct code, they also provide feedback that leads to a better design. - -You get the most benefit from this feedback if you write the test code before you write the implementation code. This - -is known as test-driven development (TDD).

- -
- -
- -

The TDD cycle is:

- -
- -
- -
    - -
  1. - -

    Add basic placeholders for the new functionality (e.g., the function signatures), just enough for the code to compile, - -but don’t actually implement the functionality.

    - -
  2. - -
  3. - -

    Add tests for the new functionality.

    - -
  4. - -
  5. - -

    Run all the tests. The new tests should fail, but all other tests should pass.

    - -
  6. - -
  7. - -

    Implement the new functionality.

    - -
  8. - -
  9. - -

    Rerun the tests. Everything should now pass.

    - -
  10. - -
  11. - -

    Refactor the code until you have a clean design, re-running the tests regularly to check everything is still working.

    - -
  12. - -
- -
- -
- -

One of the unexpected consequences of using TDD is that the design of your code emerges as a result of a repeated - -test-code-test cycle. Without TDD, you often end up shipping the first design you can think of; with TDD, the very act - -of trying to figure out how to write tests forces you to iterate on your design, and you often ship something more - -effective.

- -
- -
- -

In fact, TDD affects not only the design of small parts of your code, but also the design of your entire system. Some - -TDD practitioners use TDD only for writing unit tests up front, but you can also use TDD with integration tests, - -end-to-end tests, and performance tests. Thinking about integration tests up front forces you to consider how the - -different parts of your system will communicate with one another. Thinking about end-to-end tests up front forces you to - -think through how to deploy everything. Thinking about performance tests up front forces you to think about where your - -bottlenecks are and what metrics you need to gather to identify them.

- -
- -
- -

Being forced to think through all of this up front, simply because you try to write tests first, can have a profoundly - -positive impact on the final design. If you want to see some concrete examples of how TDD leads to emerging design, see - -Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce (Addison-Wesley Professional), as - -well as my previous book, Hello, Startup: A Programmer’s Guide to Building Products, Technologies, and Teams - -(O’Reilly).

- -
- -
- -

It’s also worth mentioning that writing tests up front increases the chances that you’ll have thorough test coverage, - -because it forces you to write code incrementally. Tests can be tedious to write, so it’s easier if you only have to do - -a few at a time: write a few tests and then a little bit of implementation, then a few more tests, then a little more - -implementation, and so on. It’s less effective to spend weeks writing thousands of lines of implementation code and - -then try to go back and do a marathon session of writing test cases for all of it. You’ll get bored and end up with - -far less code coverage. You’ll also miss many corner cases because you’ll forget the nuances of implementation code you - -wrote weeks ago.

- -
- -
- -

Note that not all types of coding are a good fit for TDD. For example, if you’re doing exploratory coding, where you - -don’t yet know exactly what you’re building, and you’re just exploring the problem space by coding and messing with - -data, TDD might not be a good fit. If you don’t know what result you’re looking for, you can’t write a test for it. - -In that case, writing tests shortly after you write the code is still valuable.

- -
- -
- -

Also, if you’re working on an existing codebase that doesn’t have any tests (a legacy codebase), then you might feel - -like TDD doesn’t apply, as the development is already done. However, you can still use TDD for any changes you make to - -the codebase. It’s very similar to the standard TDD process, but with a couple steps at the front:

- -
- -
- -
    - -
  1. - -

    Write a test for the functionality you’re about to modify.

    - -
  2. - -
  3. - -

    Run all the tests. They should all pass.

    - -
  4. - -
  5. - -

    Now use the standard TDD process for any new functionality or changes you’re about to make.

    - -
  6. - -
- -
- -
- -

This way, you incrementally build out the test coverage for the codebase, specifically in those parts of the code that - -you’re modifying. Each test you add for the existing functionality gives you a way to prove to yourself that you truly - -understand how that code works, which can make it less scary to start making changes; and each test you add for new - -functionality gives you all the standard benefits of TDD. And when you’re done, you leave the codebase with at least a - -few tests in place, which will make it less scary—make it feel less like legacy code—for the next developer.

- -
- -
- -

TDD is also useful for bug fixing. If you found a bug in production, that means there was no test that caught the - -problem, so a good way to start on the fix is, as a first step, to write a failing test that reproduces the bug - -(test-driven bug fixing). That proves you understand the cause of the bug and, after you fix it, leaves you with a - -regression test that will prevent the bug from coming back.

- -
- -
- -
- -
- -
- -

Conclusion

- -
- - - - - - - - - - - -
- -
Note
- -
- -
Reminder: commit your code!
- -
- -

While working through this blog post, you’ve probably made a lot of code changes in the ch4 folder: - -e.g., updating package.json with build steps and dependencies, switching to an Express app, adding automated tests - -for the app and infrastructure code, and so on. If you haven’t already, make sure to commit all this code—especially - -changes in the sample-app and tofu folders—so you don’t lose it and can iterate on it in future - -posts:

- -
- -
- -
- -
$ cd fundamentals-of-devops/ch4
-
-$ git add sample-app tofu
-
-$ git commit -m "Add ch4 sample code"
-
-$ git push origin main
- -
- -
- -
- -
- -
- -

You’ve now taken a big step forward in allowing your team members to collaborate on your code by following the - -6 key takeaways from this Part:

- -
- -
- -
    - -
  • - -

    Always manage your code with a version control system.

    - -
  • - -
  • - -

    Use a build system to capture, as code, important operations and knowledge for your project, in a way that can be - -used both by developers and automated tools.

    - -
  • - -
  • - -

    Use a dependency management tool to pull in dependencies—not copy & paste.

    - -
  • - -
  • - -

    Use automated tests to give your team the confidence to make changes quickly.

    - -
  • - -
  • - -

    Automated testing makes you more productive while coding by providing a rapid feedback loop: make a change, run the - -tests, make another change, re-run the tests, and so on.

    - -
  • - -
  • - -

    Automated testing makes you more productive in the future, too: you save a huge amount of time not having to fix - -bugs because the tests prevented those bugs from slipping through in the first place.

    - -
  • - -
- -
- -
- -

This is terrific progress, but it doesn’t solve the collaboration problem fully. You have a version control system, but - -if teams go off and work in branches for months, it becomes incredibly hard to merge their work back together; you have - -automated tests, but developers don’t always remember to run them, so broken code still slips by; and you have a build - -system that automates some operations, but deployments are still largely manual. To implement a full, effective SDLC, - -you need two more ingredients: continuous integration (CI) and continuous delivery (CD), which are the topics of - -Part 5.

- -
- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/06.html b/docs/06.html deleted file mode 100644 index 941c4c1..0000000 --- a/docs/06.html +++ /dev/null @@ -1,7530 +0,0 @@ - - - - - - - - - - - - - - -Part 5. How to Set Up Continuous Integration (CI) and Continuous Delivery (CD) - - - - - - - - - - - - - -
-
- -
- -
-
- -

Part 5. How to Set Up Continuous Integration (CI) and Continuous Delivery (CD)

- -
- -
- -

In Part 4, you learned several key tools and techniques that help developers work together, - -including version control, build systems, and automated tests. But merely having a collection of tools and - -techniques is not enough: you also need to know how to put them together into an effective software delivery lifecycle - -(SDLC). As a reminder, the SDLC needs to solve the following problems:

- -
- -
- -
- -
Code access
- -
- -

All the developers on your team need a way to access the same code so they can all collaborate on it.

- -
- -
Integration
- -
- -

As multiple developers make changes to the same code base, you need some way to integrate their - -changes, handling any conflicts that arise, and ensuring that no one’s work is accidentally lost or overwritten.

- -
- -
Correctness
- -
- -

It’s hard enough to make your own code work, but when multiple people are modifying that code at - -the same time, you need to find a way to prevent constant bugs and breakages from slipping in.

- -
- -
Release
- -
- -

Getting a codebase working is great, but as you may remember from the Preface, code isn’t done until - -it’s generating value for your users and your company, which means you need a way to release the changes in your - -codebase on a periodic basis.

- -
- -
- -
- -
- -

Now that you have the ingredients for solving these problems, in this blog post, you’ll learn how to - -put these ingredients together. To do this, you will first learn about continuous integration (CI) and then continuous - -delivery (CD). The combination of the two, CI/CD, is a central part of the SDLC of all the companies you read about in - -Section 1.1 that have world-class software delivery practices.

- -
- -
- -

Let’s start with CI.

- -
- -
- -

Continuous Integration (CI)

- -
- -

What is continuous integration? It may be easier to understand it by comparing it with its opposite, late integration.

- -
- -
- -

Imagine you’re responsible for building the International Space Station (ISS), which consists of dozens of components, - -as shown in Figure 41.

- -
- -
- -
- -International Space Station - -
- -
Figure 41. International Space Station [27]
- -
- -
- -

Each component will be assigned to a team from a different country, and it’s up to you to decide how you will organize - -these teams. You have two options:

- -
- -
- -
- -
Option 1: late integration
- -
- -

Come up with a design for all the components up front and then have each team go off - -and work on their component in complete isolation until it’s finished. When all the teams are done, launch all the - -components into outer space, and try to put them together at the same time.

- -
- -
Option 2: continuous integration
- -
- -

Come up with an initial design for all the components and then have each team go - -off and start working. As they make progress, they regularly test each component with all the other components and - -update the design if there are any problems. As components are completed, you launch them one at a time into outer - -space, and assemble them incrementally.

- -
- -
- -
- -
- -

How do you think option #1 is going to work out? In all likelihood, attempting to assemble the entire ISS at the last - -minute will expose a vast number of conflicts and design problems. Team A thought team B would handle the wiring while - -team B thought team A would do it; all the teams used the metric system, except one; no one remembered to install a - -toilet. Unfortunately, as everything has been fully built and is already floating in outer space, it will be expensive - -and difficult to go back and fix things.

- -
- -
- -

Option 1 may sound ridiculous, but this is exactly the way in which many companies build software. Developers - -work in totally isolated feature branches in their version control system for weeks or months at a time and then, at - -the very last minute, when a release rolls around, they try to merge all the feature branches together. This process is - -known as late integration, and it often leads to disaster, as shown in Figure 42.

- -
- -
- -
- -The huge merge conflicts that you get as a result of late integration - -
- -
Figure 42. The huge merge conflicts that you get as a result of late integration
- -
- -
- -

When you don’t merge your code together for long periods of time, you end up with horrible merge conflicts: two teams - -modified the same file, but in incompatible ways; one team has made changes in a file that another team deleted - -entirely; one team did a giant refactor to remove all usages of a deprecated service, but the other teams have - -introduced dozens of new usages of that service; and so on. All of these conflicts lead to bugs and problems that take - -days or weeks to stabilize, turning the release process into a long, drawn-out nightmare.

- -
- -
- -

A better approach, as described in option #2, is continuous integration (CI), which is software development practice - -where every developer on your team merges their work together on a very regular basis: typically daily or multiple - -times per day. The key benefit of CI is that it exposes problems with your work earlier in the process, before you’ve - -gone too far in the wrong direction, and allows you to make improvements incrementally.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #1
- -
- -

Ensure all developers merge all their work together on a regular basis: typically daily or multiple times per day.

- -
- -
- -
- -
- -

The most common way to implement continuous integration is to use a trunk-based development model, where developers - -do all of their work on the same branch, typically main or master or trunk, depending on what - -your VCS calls it; I’ll mostly refer to this branch as main in this blog post series. With trunk-based development, - -you no longer have long-lived feature branches. Instead, you create short-lived branches, that typically last from a - -few hours to a few days, and you open pull requests to get your branch merged back into main on a regular basis.

- -
- -
- -

It may seem like having all developers work on a single branch couldn’t possibly scale, but the reality is - -that it might be the only way to scale. LinkedIn moved off of feature branches and onto trunk-based development as - -part of Project Inversion, which was essential for scaling the company from roughly 100 developers to over 1,000. - -Facebook uses trunk-based development - -for thousands of developers. Google uses trunk-based development for tens of thousands of developers, and has shown it - -can scale to 2+ - -billion lines of code, 86TB of source data, and around 40,000 commits per day.

- -
- -
- -

If you’ve never used trunk-based development, it can be hard to imagine how it works. The same questions come up again - -and again:

- -
- -
- -
    - -
  • - -

    Wouldn’t you have merge conflicts all the time?

    - -
  • - -
  • - -

    Wouldn’t the build always be broken?

    - -
  • - -
  • - -

    How do you make large changes that take weeks or months?

    - -
  • - -
- -
- -
- -

In the next three sections, I’ll address each of these questions, showing the tools and techniques companies use to - -deal with them, and then walk you through an example of how to set up some of these continuous integration tools and - -techniques yourself.

- -
- -
- -

Dealing with Merge Conflicts

- -
- -

The first question that newbies to trunk-based development often ask is, won’t you be dealing with merge conflicts - -all the time? After all, with feature branches, each time you merge, you get days or weeks of conflicts to resolve, - -but at least you only have to deal with that once every few weeks or months. Whereas with trunk-based development, - -wouldn’t you have to fight with merge conflicts many times per day?

- -
- -
- -

As it turns out, the reason that feature branches lead to painful merge conflicts is precisely because those feature - -branches are long-lived. If your branches are short-lived, the odds of merge conflicts are much lower. For example, - -imagine you have a repo with 10,000 files, and two developers working on changes in different branches. After one day, - -perhaps each developer has changed 10 files; if they try to merge the branches back together, the chances that some - -of those 20 files overlap, out of 10,000, are pretty low. But if those developers worked in those branches for three - -months, and changed hundreds of files in each branch during that time, then the chances that some of those files - -overlap and conflict are much higher.

- -
- -
- -

Moreover, even if there are a merge conflicts, it’s much easier to deal with them if you merge regularly. If you’re - -merging two branches that are just a day old, the conflicts will be relatively small, as you can’t change all that much - -code in just a few days, and the code will still be top-of-mind, as you worked on it within the last 24 hours. On the - -other hand, if you’re merging code that is several months old, then the conflicts will be larger, as you can make a lot - -of changes in a few months, and you’re less likely to remember what the changes are about, as you may have worked on - -them months ago.

- -
- -
- -

The most important thing to understand is this: when you have multiple developers working on a single codebase at the - -same time, merge conflicts are unavoidable, so the question isn’t how to avoid merge conflicts, but how to make those - -merge conflicts as painless to deal with as possible. And that’s one of many places in software delivery where Martin - -Fowler’s quote applies:

- -
- -
- -
- -
- -

If it hurts, do it more often.

- -
- -
- -
- -— Martin Fowler
- -Frequency Reduces Difficulty - -
- -
- -
- -

Merge conflicts hurt. The way to make it hurt less, oddly enough, is to merge more often.

- -
- -
- -
- -

Preventing Breakages with Self-Testing Builds

- -
- -

The second question that newbies to trunk-based development often ask is, won’t you be dealing with breakages all - -the time? After all, with feature branches, each time you merge, it can take days or weeks to fix all the issues that - -come up and stabilize the release branch, but at least you only have to deal with that once every few weeks or months. - -Whereas with trunk-based development, wouldn’t you have to fight with breakages many times per day?

- -
- -
- -

Have no fear: this is precisely where the automated testing practices you learned about in - -Part 4 come to the rescue. Companies that practice CI and trunk-based development configure a - -self-testing build that runs automated tests after every commit. This includes commits on any branch, so every time - -a developer opens a pull request to merge a branch into main, you automatically run tests against their branch, and - -show the test results directly in the pull request UI (you’ll see an example of how to set this up a little later in - -this post). That way, code that doesn’t pass your test suite doesn’t get merged to main in - -the first place. And if somehow some code does slip through that breaks main, then as soon as you detect it, the - -typical solution is to revert that commit automatically. This way, you get main back into working condition quickly, - -and the developer who merged in the broken code can redo their commit later, once they’ve fixed whatever caused the - -breakage.

- -
- -
- -

The most common way to set up a self-testing build is to run a CI server, which is a piece of software that integrates - -with your version control system to run various automations, such as your automated tests, in response - -to new commits, branches, and so on. There are many CI servers out there, including some solutions that you run - -yourself, such as Jenkins, TeamCity, - -Drone, and Argo, and some solutions that are managed - -services, such as GitHub Actions, CircleCi, - -and GitLab.

- -
- -
- -

CI servers are such an integral part of continuous integration, that for many developers, the two terms are nearly - -synonymous. This is because a CI server and a good suite of automated tests completely changes how you deliver software:

- -
- -
- -
- -
- -

Without continuous integration, your software is broken until somebody proves - -it works, usually during a testing or integration stage. With continuous - -integration, your software is proven to work (assuming a sufficiently - -comprehensive set of automated tests) with every new change—and you know the - -moment it breaks and can fix it immediately.

- -
- -
- -
- -— Jez Humble and David Farley
- -Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Professional). - -
- -
- -
- -

Going from a default of broken to a default of working is a profound transformation. Instead of a multi-day merge - -process to prepare your code for release, your code is always in a releasable state—which means you can deploy - -whenever you want. To some extent, the role of a CI server is to act as a gatekeeper, protecting your code from any - -changes that jeopardize your ability to deploy at any time.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #2
- -
- -

Use a self-testing build after every commit to ensure your code is always in a working and deployable state.

- -
- -
- -
- -
- -

In Section 1.1, you saw that companies with world-class software delivery processes are able to deploy - -thousands of times per day. Continuous integration—including a CI server and thorough automated test suite—is one of - -the key ingredients that makes this possible; you’ll see some of the other ingredients throughout this - -post.

- -
- -
- -
- -

Making Large Changes

- -
- -

The third question that newbies to trunk-based development often ask is, how do you handle changes that take a long - -time to implement? CI sounds great for small changes, but if you’re working on something that will take weeks or - -months—e.g., major new features or refactors—how can you merge your incomplete work on a daily basis without breaking - -the build or accidentally releasing unfinished features to users?

- -
- -
- -

There are two approaches that you can use to resolve this: branch by abstraction and feature toggles. These two - -techniques are the focus of the next two sections.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #3
- -
- -

Use branch by abstraction and feature toggles to make large-scale changes while still merging your work on a regular - -basis.

- -
- -
- -
- -
- -

Branch by abstraction

- -
- -

Branch by abstraction is a technique that allows you to make large-scale changes to your code incrementally, across - -many commits, without ever risking breaking the build or releasing unfinished work to users. For example, let’s say you - -have hundreds of modules in your codebase that use Library X, as shown in Figure 43:

- -
- -
- -
- -Library X is used across many modules in your codebase - -
- -
Figure 43. Library X is used across many modules in your codebase
- -
- -
- -

You want to replace Library X with Library Y, but this will require updating hundreds of modules, which could take - -months. If you do this work in a feature branch, by the time you merge it back, there’s a good chance you’ll have merge - -conflicts with many of the updated modules, and it’s possible new usages will have shown up in the meantime, so you’d - -have even more work to do.

- -
- -
- -

Instead of a feature branch, the idea with branch by abstraction is to keep working on main, but to introduce a new - -abstraction into the codebase. What type of abstraction you use depends on your programming language: it might be an - -interface, a protocol, a class, etc. The important thing is that (a) the abstraction initially uses Library X under the - -hood, so there is no change in behavior and (b) it creates a layer of indirection between your modules and Library X, - -as shown in Figure 44:

- -
- -
- -
- -Introduce an abstraction between your modules and Library X - -
- -
Figure 44. Introduce an abstraction between your modules and Library X
- -
- -
- -

You can update your modules to use the abstraction incrementally, across many commits to main. There’s no hurry or - -risk of breakage, as under the hood, the abstraction is still using Library X. After some time, all modules should be - -using the abstraction, and you could even add an automated test that fails if anyone tries to use Library X directly.

- -
- -
- -

At this point, you can start replacing Library X with Library Y, as shown in Figure 45:

- -
- -
- -
- -Start to incrementally update your modules to use Library Y - -
- -
Figure 45. Start to incrementally update your modules to use Library Y
- -
- -
- -

Again, you can roll out this change incrementally, across many commits to main, integrating your work regularly to - -minimize merge conflicts. You could also update your abstraction code to ensure that any new usages of the abstraction - -get Library Y under the hood by default. Eventually, when you’re done updating all module usages, you can remove - -Library X entirely, as shown in Figure 46:

- -
- -
- -
- -After you’ve updated all module usages, you can remove Library X - -
- -
Figure 46. After you’ve updated all module usages, you can remove Library X
- -
- -
- -

Branch by abstraction is a great technique for doing large-scale refactors. But what if you need to introduce totally - -new functionality? If that functionality takes weeks or months to implement, how can you merge it regularly into main - -without accidentally releasing unfinished features to users? This is when you turn to the second approach, feature - -toggles, as described next.

- -
- -
- -
- -

Feature toggles

- -
- -

The idea with feature toggles (AKA feature flags) is to wrap new functionality in conditionals that let you turn - -(toggle) those features on and off dynamically. For example, imagine that you wanted to take the Node.js sample app - -you’ve been using throughout this blog post series, and to update it to return a proper home page that is a little more - -interesting than the "Hello, World!" text. However, it’s going to take you several months to implement this new home - -page. The idea with a feature toggle is to add a conditional to your code as shown in Example 89 (you - -don’t need to actually make these code changes; this is just for demonstration purposes):

- -
- -
- -
Example 89. An example of using a feature toggle to pick between the new home page and the original "Hello, World!" text (ch5/sample-app/app.js)
- -
- -
- -
- -
app.get('/', (req, res) => {
-
-  if (lookupFeatureToggle(req, "HOME_PAGE_FLAVOR") === "v2") { // (1)
-
-    res.send(newFancyHomepage());                              // (2)
-
-  } else {
-
-    res.send('Hello, World!');                                 // (3)
-
-  }
-
-});
- -
- -
- -
- -
- -
- -

Here’s what this code does:

- -
- -
- -
    - -
  1. - -

    Use the lookupFeatureToggle function to look up the value of the "HOME_PAGE_FLAVOR" feature toggle.

    - -
  2. - -
  3. - -

    If the value of the feature toggle is "v2," send back the contents of the new home page as a response.

    - -
  4. - -
  5. - -

    If the value of the feature toggle is anything else, send back the original "Hello, World!" text.

    - -
  6. - -
- -
- -
- -

So what does the lookupFeatureToggle function do? Typically, this function will check if the feature toggle is - -enabled by querying a dedicated feature toggle service, which is a service that can do the following:

- -
- -
- -
- -
Store a feature toggle mapping
- -
- -

The mapping is from a feature toggle name (e.g, HOME_PAGE_FLAVOR) to its value (e.g., - -true, false, or an arbitrary string like "v2").

- -
- -
Look up feature toggles programmatically
- -
- -

You provide an API or SDK your apps can use to look up the current value - -of a feature toggle (e.g., the lookupFeatureToggle function would use this SDK under the hood).

- -
- -
Update feature toggles without having to change code
- -
- -

You have some sort of web UI, API, or other mechanism that - -lets you quickly change the value of a feature toggle at any time—without having to update or deploy new code.

- -
- -
- -
- -
- -

You could build your own feature toggle service around a database, or deploy an open source feature toggle service - -such as growthbook, Flagsmith, - -flagr, or OpenFeature, or you could use a managed feature - -toggle service such as Split, LaunchDarkly, - -ConfigCat, or Statsig.

- -
- -
- -

It might not be obvious, but the humble if-statement, combined with a feature toggle check, unlocks a superpower: you - -can now commit and regularly merge code, even before it’s done. This is because of the following key property of - -feature toggles:

- -
- -
- -
- -
- -

The default value for all feature toggles is off.

- -
- -
- -
- -
- -

If you wrap new features in a feature toggle check, as long as the code is syntactically valid (which you can validate - -with simple automated tests), you can merge your new feature into main long before that feature is done, as by - -default, the new feature is off, so it will have no impact on other developers or your users. This is what allows you - -to develop large new features while still practicing continuous integration.

- -
- -
- -

What’s even more surprising is that this is only one of the superpowers you get with feature toggles; you’ll see a - -number of others later in this blog post, in the continuous delivery section.

- -
- -
- -
- -
- -

Example: Run Automated Tests for Apps in GitHub Actions

- -
- - - - - - - - - - - -
- -
Note
- -
- -
Example Code
- -
- -

As a reminder, you can find all the code examples in the blog post series’s sample - -code repo in GitHub.

- -
- -
- -
- -
- -

Now that you understand the basics of continuous integration, let’s get a little practice setting up some of the - -technology that enables it: namely, a self-testing build. You added some automated tests in Section 4.3, - -so the goal is to run these tests automatically after each commit, and to show the results in pull requests. In - -Section 4.1.3, you pushed your code to GitHub, so to avoid introducing even more tools, let’s use - -GitHub Actions as the CI server that will run these tests.

- -
- -
- -

Head into the folder where you’ve been working on the code samples for this blog post series and make sure you’re on - -the main branch, with the latest code:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ git checkout main
-
-$ git pull origin main
- -
- -
- -
- -

Next, create a new ch5 folder for this blog post’s code examples, and copy into ch5 the - -sample-app folder from Part 4, where you had a Node.js app with automated tests:

- -
- -
- -
- -
$ mkdir -p ch5
-
-$ cp -r ch4/sample-app ch5/sample-app
- -
- -
- -
- -

With that done, create a new folder called .github/workflows in the root of your repo:

- -
- -
- -
- -
$ mkdir -p .github/workflows
-
-$ cd .github/workflows
- -
- -
- -
- -

Inside the .github/workflows folder, create a file called app-tests.yml, with the contents shown in - -Example 90:

- -
- -
- -
Example 90. A GitHub Actions workflow to run the sample app automated tests (.github/workflows/app-tests.yml)
- -
- -
- -
- -
name: Sample App Tests
-
-
-
-on: push                                  # (1)
-
-
-
-jobs:                                     # (2)
-
-  sample_app_tests:                       # (3)
-
-    name: "Run Tests Using Jest"
-
-    runs-on: ubuntu-latest                # (4)
-
-    steps:
-
-      - uses: actions/checkout@v2         # (5)
-
-
-
-      - name: Install dependencies        # (6)
-
-        working-directory: ch5/sample-app
-
-        run: npm install
-
-
-
-      - name: Run tests                   # (7)
-
-        working-directory: ch5/sample-app
-
-        run: npm test
- -
- -
- -
- -
- -
- -

With GitHub Actions, you use YAML to define workflows, which are configurable automated processes that run one or - -more jobs in response to certain triggers. Here’s what the preceding workflow does:

- -
- -
- -
    - -
  1. - -

    The on block is where you define the triggers that will cause this workflow to run. The preceding code configures - -this workflow to run every time you do a git push to this repo.

    - -
  2. - -
  3. - -

    The jobs block defines one or more jobs—automations—to run in this workflow. By default, jobs run sequentially, - -but you can also configure jobs that run concurrently, as well as creating dependencies and passing data between - -jobs.

    - -
  4. - -
  5. - -

    This workflow defines just a single job, which will run the automated tests for the sample app.

    - -
  6. - -
  7. - -

    Each job runs on a certain type of runner, which is how you configure the hardware (CPU, memory) and software - -(operating system and dependencies) to use for the build. The preceding code uses the - -ubuntu-latest runner, which gives you the default hardware - -configuration (2 CPUs and 7GB of RAM, as of 2024) and a software configuration that has Ubuntu and a bunch of - -commonly used software engineering tools (including Node.js) pre-installed.

    - -
  8. - -
  9. - -

    Each job consists of a series of steps that are executed sequentially. The first step in this job runs another - -workflow via the uses keyword. This is one of the best features of GitHub Actions: you can share and reuse - -workflows, including both public, open source workflows (which you can discover in the - -GitHub Actions Marketplace) and private, internal workflows - -within your own organization. The preceding code uses the actions/checkout workflow to check out the code for - -your repo (it calls git clone under the hood).

    - -
  10. - -
  11. - -

    The second step in this job use the run keyword to execute shell commands. In particular, it runs - -npm install in the ch5/sample-app folder to install the sample app’s dependencies.

    - -
  12. - -
  13. - -

    The third step in this job uses the run keyword to execute npm test, which runs the sample-app’s automated - -tests.

    - -
  14. - -
- -
- -
- -

If all the steps succeed, the job will be marked as successful (green); if any step fails—e.g., npm test exits - -with a non-zero exit code because one of the tests fails—then the job will be marked as failed (red).

- -
- -
- -

To try it out, first commit and push the sample app and workflow code to your repo:

- -
- -
- -
- -
$ git add ch5/sample-app .github/workflows/app-tests.yml
-
-$ git commit -m "Add sample-app and workflow"
-
-$ git push origin main
- -
- -
- -
- -

Next, create a new branch called test-workflow to see this workflow in action:

- -
- -
- -
- -
$ git checkout -b test-workflow
- -
- -
- -
- -

Make a change to the sample app to intentionally return some text other than "Hello, World!", as shown in - -Example 91:

- -
- -
- -
Example 91. Change the sample app to return a different response (ch5/sample-app/app.js)
- -
- -
- -
- -
res.send('Fundamentals of DevOps!');
- -
- -
- -
- -
- -
- -

Commit and push these changes to the test-workflow branch:

- -
- -
- -
- -
$ git add ch5/sample-app/app.js
-
-$ git commit -m "Change response text"
-
-$ git push origin test-workflow
- -
- -
- -
- -

After running git push, the log output will show you the GitHub URL to open a pull request. Open that URL in - -your browser, fill out a title and description, and click "Create pull request." You should get a page that looks - -something like Figure 47:

- -
- -
- -
- -Automated tests running in a pull request - -
- -
Figure 47. Automated tests running in a pull request
- -
- -
- -

At the bottom of the pull request, you should see the "Sample App Tests" workflow has run: and, uh oh, looks like - -there’s an error. Click the Details link to the right of the workflow to see what went wrong. You should get a page - -that looks like Figure 48:

- -
- -
- -
- -Looking into the cause of the test failure - -
- -
Figure 48. Looking into the cause of the test failure
- -
- -
- -

Aha! The automated test is still expecting the response text to be "Hello, World!" To fix this issue, update - -app.test.js to expect "Fundamentals of DevOps!" as a response, as shown in Example 92:

- -
- -
- -
Example 92. Updated the automated test to expect the new response text (ch5/sample-app/app.test.js)
- -
- -
- -
- -
expect(response.text).toBe('Fundamentals of DevOps!');
- -
- -
- -
- -
- -
- -

Commit and push these changes to the test-workflow branch:

- -
- -
- -
- -
$ git add ch5/sample-app/app.test.js
-
-$ git commit -m "Update response text in test"
-
-$ git push origin test-workflow
- -
- -
- -
- -

This will automatically update your open PR, and automatically re-run your tests. After a few seconds, if you go back - -to your browser and look at the PR, you should see the tests passing, as shown in Figure 49:

- -
- -
- -
- -The automated tests should now be passing - -
- -
Figure 49. The automated tests should now be passing
- -
- -
- -

Congrats, you now have a self-testing build that will automatically run your app’s tests after every commit, and show - -you the results in every PR. Merge the PR, and let’s move on to adding automated tests for the infrastructure code.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for running automated app tests in CI:

- -
- -
- -
    - -
  • - -

    To help catch bugs, update the GitHub Actions workflow to run a JavaScript linter, such as - -JSLint or ESLint, after every commit.

    - -
  • - -
  • - -

    To help keep your code consistently formatted, update the GitHub Actions workflow to run a code formatter, such as - -Prettier, after every commit.

    - -
  • - -
  • - -

    Run both the linter and code formatter as a precommit hook, so these checks run on your own computer before - -you can make a commit. You may wish to use the pre-commit framework to manage your precommit - -hooks.

    - -
  • - -
- -
- -
- -
- -
- -
- -

Machine User Credentials and Automatically-Provisioned Credentials

- -
- -

Now that you’ve seen how to configure a CI server to run the sample app’s automated tests, you may want to update the - -CI server to also run the infrastructure automated tests that you added in Part 4. In that - -blog post, you added two types of automated tests for your infrastructure code: static analysis with - -Terrascan and unit testing with OpenTofu’s test command. Since the latter type of test deploys real resources into a - -real AWS account, you will need to give your automated tests a way to authenticate to AWS.

- -
- -
- -

This is a somewhat tricky problem. When a human being needs to authenticate to a machine, you can rely on that human - -memorizing some sort of secret, such as a password. But what do you do when a machine, such as a CI server, needs to - -authenticate to another machine? How can that machine "memorize" some sort of secret without leaking that secret - -to everyone else? You’ll learn various approaches to solve this problem in Part 8.

- -
- -
- -

For now, all you need to know is that you should never use a real user’s credentials to solve this problem. That is, - -do not use your own IAM user credentials, or your own GitHub personal access token, or any type of credentials from - -any human being in a CI server or other types of automation. Here’s why:

- -
- -
- -
- -
Departures
- -
- -

Typically, when someone leaves a company, you revoke all their access. If you were using their - -credentials for automation, then that automation will suddenly break.

- -
- -
Permissions
- -
- -

The permissions that a human user needs are typically different than a machine user.

- -
- -
Audit logs
- -
- -

Most systems maintain an audit log that records who performed what actions in that system. These sorts - -of logs are useful for debugging and investigating security incidents—unless the same user account is used both by - -a human and automation, in which case, it’s harder to tell who did what.

- -
- -
Management
- -
- -

You typically want multiple developers at your company to be able to manage the automations you set up. - -If you use a single developer’s credentials for those automations, then the other developers won’t be able to access - -that user account if they need to update the credentials or permissions.

- -
- -
- -
- -
- -

So if you can’t use the credentials of a real user, what do you do? These days, there are two main options: machine - -user credentials and automatically-provisioned credentials. These are the topics of the next two sections.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #4
- -
- -

Use machine user credentials or automatically-provisioned credentials to authenticate from a CI server or other - -automations.

- -
- -
- -
- -
- -

Machine user credentials

- -
- -

One way to allow automated tools to authenticate is to create a dedicated machine user, which is a user account that - -is only used for automation (not by any human user). You create the user, generate credentials for them (e.g., access - -keys), and copy those credentials into whatever tool you’re using (e.g., into GitHub).

- -
- -
- -

Machine users have a number of advantages: they never depart your company; you can assign them just the permissions - -they need; no human ever logs in as a machine user, so they only show up in audit logs when used in your automations; - -and you can share access to a single machine user account across your team by using a secrets management tool (a topic - -you’ll learn more about in Part 8).

- -
- -
- -

However, machine users also have some drawbacks: one drawback is that you have to copy their credentials around - -manually, which is tedious and error-prone; another drawback is that the credentials you’re copying are typically - -long-lived credentials, which don’t expire for a long time (if ever), so if these credentials are ever leaked, there - -is a long or even indefinite window of time during which they could be exploited.

- -
- -
- -

With some tools, machine users are the best you can do, but these days, some systems support automatically-provisioned - -credentials, as described in the next section.

- -
- -
- -
- -

Automatically-provisioned credentials

- -
- -

A second way to allow automated tools to authenticate is to use automatically-provisioned credentials, which are - -credentials the system can generate automatically, without any need for you to manually create machine users or - -copy/paste credentials. This requires that the system you’re authenticating from (e.g. a CI server) and the system - -you’re authenticating to (e.g., AWS) have an integration between them that supports automatically-provisioned - -credentials.

- -
- -
- -

You’ve actually seen one form of automatically-provisioned credentials already earlier in this blog post series: IAM - -roles. Some of the resources you’ve deployed in AWS, such as the EKS cluster in Part 3, used IAM - -roles to authenticate and make API calls within your AWS account (e.g., to deploy EC2 instances as EKS worker nodes). - -You didn’t have to create a machine user or manually manage credentials to make this work: instead, under the hood, AWS - -automatically provisioned credentials that the EKS cluster could use.

- -
- -
- -

With IAM roles, the thing you’re authenticating from and the thing you’re authenticating to are both AWS, but there are - -also systems that support automatically-provisioned credentials across different companies and services. One of the - -most common is Open ID Connect (OIDC), which is an open protocol for authentication. Not all services support OIDC, - -so it’s not always an option, but in the cases where it is supported, it’s usually a more secure choice than machine - -user credentials, as OIDC gives you not only automatically-provisioned credentials (so no manual copy/paste), but also - -short-lived credentials that expire after a configurable period of time (e.g., one hour).

- -
- -
- -

One place where OIDC is supported is between AWS and GitHub. To set up OIDC with AWS and GitHub, you configure your AWS - -account to trust an identity provider (IdP), such as GitHub, whose identity AWS can verify cryptographically - -(using a fingerprint you provide for GitHub), and then you can grant that provider permissions to assume specific IAM - -roles, subject to certain conditions: e.g., you can only use this IAM role from certain repos or branches.

- -
- -
- -

Once you’ve set that up, Figure 50 shows the workflow for using OIDC to authenticate from GitHub to - -AWS:

- -
- -
- -
- -With OIDC, you configure AWS to trust an IdP such as GitHub, which allows that IdP to exchange an OIDC token for short-lived AWS credentials - -
- -
Figure 50. With OIDC, you configure AWS to trust an IdP such as GitHub, which allows that IdP to exchange an OIDC token for short-lived AWS credentials
- -
- -
- -

Here are the steps in the workflow:

- -
- -
- -
    - -
  1. - -

    [GitHub] Generate an OIDC token: Inside a GitHub Actions workflow, GitHub generates an OIDC token, which is a - -JSON Web Token: a JSON object that contains claims—that is, data that GitHub is - -asserting—and a signature that can be cryptographically verified to prove the token really comes from GitHub. GitHub - -includes several claims, including information about what repo and branch the workflow is running in.

    - -
  2. - -
  3. - -

    [GitHub] Call the AssumeRoleWithWebIdentity API: The workflow then calls the AWS AssumeRoleWithWebIdentity API, - -specifying an IAM Role to assume, and passing the OIDC token to AWS as authentication.

    - -
  4. - -
  5. - -

    [AWS] Validate the OIDC token: AWS first validates the signature on the token to make sure it really came from - -GitHub, using a thumbprint you provide when setting up GitHub as an OpenID provider.

    - -
  6. - -
  7. - -

    [AWS] Validate IAM role conditions: Next, AWS validates the conditions on the IAM role against the claims in the - -token, especially whether that particular repo and branch is allowed to assume the IAM role.

    - -
  8. - -
  9. - -

    [AWS] Grant short-lived AWS credentials: If all the validations pass, AWS generates temporary AWS credentials that - -give you access to the IAM role’s permissions for a short period of time, and sends those back to GitHub.

    - -
  10. - -
  11. - -

    [GitHub] Use the AWS credentials: Finally, the tools in your GitHub Actions workflow, such as OpenTofu, can use the - -AWS credentials to authenticate to AWS and make changes in your AWS account.

    - -
  12. - -
- -
- -
- -

Since OIDC is a more secure option than machine user credentials, let’s try it out in the next section.

- -
- -
- -
- -
- -

Example: Configure OIDC with AWS and GitHub Actions

- -
- -

Let’s set up an OIDC provider and IAM roles so that the automated tests you wrote for the lambda-sample OpenTofu - -module in Part 4 can authenticate to AWS from GitHub Actions. The first step is to set up the - -OIDC provider. The blog post series’s sample code repo includes an OpenTofu module called - -github-aws-oidc in the ch5/tofu/modules/github-aws-oidc folder that you can use to configure GitHub as an OIDC - -provider.

- -
- -
- -

Switch back to the main branch, pull down the latest changes (i.e., the PR you just merged), and create a new branch - -called opentofu-tests:

- -
- -
- -
- -
$ git checkout main
-
-$ git pull origin main
-
-$ git checkout -b opentofu-tests
- -
- -
- -
- -

Next, create a new folder for a root module called ci-cd-permissions:

- -
- -
- -
- -
$ mkdir -p ch5/tofu/live/ci-cd-permissions
-
-$ cd ch5/tofu/live/ci-cd-permissions
- -
- -
- -
- -

In the ci-cd-permissions folder, create main.tf with the initial contents shown in Example 93:

- -
- -
- -
Example 93. Configure the github-aws-oidc module (ch5/tofu/live/ci-cd-permissions/main.tf)
- -
- -
- -
- -
provider "aws" {
-
-  region = "us-east-2"
-
-}
-
-
-
-module "oidc_provider" {
-
-  source = "github.com/brikis98/devops-book//ch5/tofu/modules/github-aws-oidc"
-
-
-
-  provider_url = "https://token.actions.githubusercontent.com" # (1)
-
-}
- -
- -
- -
- -
- -
- -

This code sets the following parameters:

- -
- -
- -
    - -
  1. - -

    provider_url: The URL of the IdP. The preceding code sets this to the URL GitHub uses for OIDC. The - -github-aws-oidc module will also use this URL to fetch GitHub’s fingerprint, which AWS will use to - -cryptographically validate OIDC tokens.

    - -
  2. - -
- -
- -
- -

In addition to the OIDC provider, you also need to create an IAM role that you can assume from GitHub Actions (using - -OIDC) for testing. The blog post series’s sample code repo has a module for that too: it’s called - -gh-actions-iam-roles, it lives in the ch5/tofu/modules/gh-actions-iam-roles folder, and it knows how to create - -several IAM roles for CI/CD with GitHub Actions. Example 94 shows how to update your - -ci-cd-permissions module to make use of the gh-actions-iam-roles module:

- -
- -
- -
Example 94. Configure the gh-actions-iam-roles module (ch5/tofu/live/ci-cd-permissions/main.tf)
- -
- -
- -
- -
module "oidc_provider" {
-
-  # ... (other params omitted) ...
-
-}
-
-
-
-module "iam_roles" {
-
-  source = "github.com/brikis98/devops-book//ch5/tofu/modules/gh-actions-iam-roles"
-
-
-
-  name              = "lambda-sample"                           # (1)
-
-  oidc_provider_arn = module.oidc_provider.oidc_provider_arn    # (2)
-
-
-
-  enable_iam_role_for_testing = true                            # (3)
-
-
-
-  # TODO: fill in your own repo name here!
-
-  github_repo      = "brikis98/fundamentals-of-devops-examples" # (4)
-
-  lambda_base_name = "lambda-sample"                            # (5)
-
-}
- -
- -
- -
- -
- -
- -

This code configures the following parameters:

- -
- -
- -
    - -
  1. - -

    name: The base name for the IAM roles and all other resources created by this module. The preceding code sets this - -to "lambda-sample," so the IAM role for testing will be called "lambda-sample-tests."

    - -
  2. - -
  3. - -

    oidc_provider_arn: Specify the OIDC provider that will be allowed to assume the IAM roles created by this module. - -The preceding code sets this to the OIDC provider you just created using the github-aws-oidc module. Under the - -hood, the gh-actions-iam-roles module will configure the trust policy in the IAM roles to trust this OIDC - -provider and allow it to assume the IAM roles.

    - -
  4. - -
  5. - -

    enable_iam_role_for_testing: If set to true, create the IAM role specifically for automated testing. You’ll see - -the other IAM roles this module can create later in this blog post.

    - -
  6. - -
  7. - -

    github_repo: The GitHub repo that will be allowed to assume the IAM roles using OIDC. You will need to fill in - -your own GitHub repo name here. Under the hood, the gh-actions-iam-roles module sets certain conditions in the - -trust policies of each IAM role to specify which repos and branches in GitHub are allowed to assume that IAM role. - -For the testing IAM role, all branches in the specified repo will be allowed to assume the IAM role.

    - -
  8. - -
  9. - -

    lambda_base_name: The base name you use for the lambda-sample module and all the resources it creates. This - -should be the same value you use for the name parameter in that module. This is necessary so the - -gh-actions-iam-roles module can create IAM roles that only have permissions to manage the lambda-sample - -resources, and no other resources.

    - -
  10. - -
- -
- -
- -

You should also create a file called outputs.tf that outputs the testing IAM role ARN, as shown in - -Example 95:

- -
- -
- -
Example 95. The output variables for the ci-cd-permissions module (ch5/tofu/live/ci-cd-permissions/outputs.tf)
- -
- -
- -
- -
output "lambda_test_role_arn" {
-
-  value = module.iam_roles.lambda_test_role_arn
-
-}
- -
- -
- -
- -
- -
- -

Deploy this module as usual: authenticate to AWS as described in Authenticating to AWS on the command line, and run - -init and apply:

- -
- -
- -
- -
$ tofu init
-
-$ tofu apply
- -
- -
- -
- -

After apply completes, you should see an output variable:

- -
- -
- -
- -
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
-
-
-
-Outputs:
-
-
-
-lambda_test_role_arn = "arn:aws:iam::111111111111:role/lambda-tests"
- -
- -
- -
- -

Take note of the lambda_test_role_arn output value, as you’ll need it soon.

- -
- -
- -

Now that OIDC provider and IAM role are in place, you can finally set up the automated tests for your infrastructure - -code.

- -
- -
- -
- -

Example: Run Automated Tests for Infrastructure in GitHub Actions

- -
- -

To run the automated tests for your infrastructure code in GitHub Actions, you first need the infrastructure code - -itself. Copy over the lambda-sample module that had automated tests from Part 4, as well as the - -test-endpoint module that those tests used under the hood:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ mkdir -p ch5/tofu/modules
-
-$ cp -r ch4/tofu/live/lambda-sample ch5/tofu/live
-
-$ cp -r ch4/tofu/modules/test-endpoint ch5/tofu/modules
- -
- -
- -
- -

Now you have the code to test, but you should make some changes to it before running those tests in a CI environment. - -In a CI environment, you may have many tests running concurrently, which is a good thing, as it can help reduce test - -times. However, the lambda-sample module currently hard-codes the names of all of its resources (e.g., it hard-codes - -the name of the Lambda function, the IAM role, and so on), so if several developers are running that test concurrently - -in CI, you’ll get errors due to name conflicts, as AWS requires Lambda function and IAM role names to be unique.

- -
- -
- -

To fix this issue, the first step is to add a variables.tf file to the lambda-sample module with the - -contents shown in Example 96:

- -
- -
- -
Example 96. Define an input variable for the lambda-sample module (ch5/tofu/live/lambda-sample/variables.tf)
- -
- -
- -
- -
variable "name" {
-
-  description = "The base name for the function and all other resources"
-
-  type        = string
-
-  default     = "lambda-sample"
-
-}
- -
- -
- -
- -
- -
- -

This defines a name variable which you can use to namespace all the resources created by this module. The default - -value is "lambda-sample," which is exactly the value the module used before, so the default behavior doesn’t change, - -but by exposing this input variable, you’ll be able to override the value at test time.

- -
- -
- -

Next, update main.tf to use var.name instead of any hard-coded names, as shown in Example 97:

- -
- -
- -
Example 97. Update the lambda-sample module to use the name input variable instead of hard-coded names (ch5/tofu/live/lambda-sample/main.tf)
- -
- -
- -
- -
module "function" {
-
-
-
-  # ... (other params omitted) ...
-
-
-
-  name = var.name
-
-}
-
-module "gateway" {
-
-
-
-  # ... (other params omitted) ...
-
-
-
-  name = var.name
-
-}
- -
- -
- -
- -
- -
- -

Now you can create a new workflow called infra-tests.yml in .github/workflows, with the initial contents shown in - -Example 98:

- -
- -
- -
Example 98. The first half of a GitHub Actions workflow to run the infrastructure automated tests (.github/workflows/infra-tests.yml)
- -
- -
- -
- -
name: Infrastructure Tests
-
-
-
-on: push
-
-
-
-jobs:
-
-  terrascan:
-
-    name: "Run Terrascan"
-
-    runs-on: ubuntu-latest
-
-    steps:
-
-      - uses: actions/checkout@v2
-
-
-
-      - name: Run Terrascan
-
-        uses: tenable/terrascan-action@main
-
-        with:
-
-          iac_type: 'terraform'
-
-          iac_dir: 'ch5/tofu/live/lambda-sample'
-
-          verbose: true
-
-          non_recursive: true
-
-          config_path: 'ch5/tofu/live/lambda-sample/terrascan.toml'
- -
- -
- -
- -
- -
- -

This workflow, which runs on push, contains two jobs. The preceding code just shows the first job, which uses an open - -source workflow to install and run Terrascan, passing it the same parameters as when you ran it manually in - -Part 4.

- -
- -
- -

Example 99 shows the second half of the workflow:

- -
- -
- -
Example 99. The second half of a GitHub Actions workflow to run the infrastructure automated tests (.github/workflows/infra-tests.yml)
- -
- -
- -
- -
  opentofu_test:
-
-    name: "Run OpenTofu tests"
-
-    runs-on: ubuntu-latest
-
-    permissions:                                                                # (1)
-
-      id-token: write
-
-      contents: read
-
-    steps:
-
-      - uses: actions/checkout@v2
-
-
-
-      - uses: aws-actions/configure-aws-credentials@v3                          # (2)
-
-        with:
-
-          # TODO: fill in your IAM role ARN!
-
-          role-to-assume: arn:aws:iam::111111111111:role/lambda-sample-tests    # (3)
-
-          role-session-name: tests-${{ github.run_number }}-${{ github.actor }} # (4)
-
-          aws-region: us-east-2
-
-
-
-      - uses: opentofu/setup-opentofu@v1                                        # (5)
-
-
-
-      - name: Tofu Test
-
-        env:
-
-          TF_VAR_name: lambda-sample-${{ github.run_id }}                       # (6)
-
-        working-directory: ch5/tofu/live/lambda-sample
-
-        run: |                                                                  # (7)
-
-          tofu init -backend=false -input=false
-
-          tofu test -verbose
- -
- -
- -
- -
- -
- -

The second half of the workflow adds a job to run OpenTofu tests:

- -
- -
- -
    - -
  1. - -

    By default, every GitHub Actions job gets contents: read permissions in your repo, which allows that job to - -check out the code in the repo. In order to use OIDC, you need to add the id-token: write permissions. This will - -allow you to issue an OIDC token for authenticating to AWS in (2).

    - -
  2. - -
  3. - -

    Use an open source workflow to authenticate to AWS using OIDC. This calls the AssumeRoleWithWebIdentity API to - -exchange the OIDC token for temporary AWS credentials.

    - -
  4. - -
  5. - -

    The IAM role to assume. Make sure to fill in the IAM role ARN from the lambda_test_role_arn output in the - -previous section.

    - -
  6. - -
  7. - -

    The name to use for the session when assuming the IAM role. This shows up in audit logging, so the preceding code - -includes useful information in the session name, such as the name of the tests, which run number this in GitHub, - -and which GitHub user triggered the workflow.

    - -
  8. - -
  9. - -

    Use an open source workflow to install OpenTofu.

    - -
  10. - -
  11. - -

    Use the environment variable TF_VAR_name to set the name input variable of the lambda-sample module - -to a value that includes the GitHub actions run ID, so it will be unique for each test run, and - -therefore, avoid problems with running multiple tests concurrently.

    - -
  12. - -
  13. - -

    Kick off the tests by running tofu init and tofu test. Note that the init command sets backend=false to - -skip backend initialization. Later in this post, you’ll start using remote backends with - -the lambda-sample module, which is useful for deployment, but not something you want to enable at test time.

    - -
  14. - -
- -
- -
- -

Add, commit, and push all the changes to the opentofu-tests branch, and then open a pull request. You should see - -something similar to Figure 51:

- -
- -
- -
- -A PR showing the sample app unit tests, Terrascan, and OpenTofu tests running - -
- -
Figure 51. A PR showing the sample app unit tests, Terrascan, and OpenTofu tests running
- -
- -
- -

Congrats, you should now have both automated tests for your app code and for your infrastructure code running, as you - -can see at the bottom of the PR! After a minute or two, if everything is configured correctly, and the tests are - -passing, merge the PR.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here’s an exercise you can try at home to get a better feel for running automated infrastructure tests in CI:

- -
- -
- -
    - -
  • - -

    To help keep your code consistently formatted, update the GitHub Actions workflow to run a code formatter, such as - -tofu fmt, after every commit.

    - -
  • - -
- -
- -
- -
- -
- -

You now have a self-testing build that runs your sample app automated tests, Terrascan, and OpenTofu tests after every - -commit. If you keep growing this suite of automated tests, and you regularly integrate changes from all of your - -developers, then your code will always be in a deployable state. But how do you actually do the deployments? That’s the - -topic of the next section.

- -
- -
- -
- -
- -

Continuous Delivery (CD)

- -
- -

Continuous delivery (CD) is a software development practice where you ensure - -that you can deploy to production at any time in a manner that is fast, reliable, and sustainable. You could choose to - -deploy daily, several times a day, thousands of times per day, or even after every single commit that passes the - -automated tests; this last approach is known as continuous deployment. The key with CD is not how often you - -deploy, but to ensure that the frequency of deployment is purely a business decision—not something limited by your - -technology.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Key takeaway #5
- -
- -

Ensure you can deploy to production at any time in a manner that is fast, reliable, and sustainable.

- -
- -
- -
- -
- -

If you’re used to a painful deploy process that happens only once every few weeks or months, then deploying many times - -per day may sound like a nightmare—and deploying thousands of times per day probably sounds utterly impossible. But - -this is yet another place where, if it hurts, you need to do it more often.

- -
- -
- -

To make it possible to deploy more often—and more importantly, to make it possible to deploy any time you want—you - -typically need to fulfill two requirements:

- -
- -
- -
    - -
  1. - -

    The code is always in a deployable state: You saw in the previous section that this is the key benefit of - -practicing CI. If everyone is integrating their work regularly, and you have a self-testing build with a sufficient - -suite of tests, then your code will always be ready to deploy.

    - -
  2. - -
  3. - -

    The deployment process is sufficiently automated: If you have a deployment process that involves many manual steps, - -then you can’t really practice CD, because manual deployments typically aren’t fast, reliable, or sustainable. CD - -requires that you automate your deployment process.

    - -
  4. - -
- -
- -
- -

This section focuses on item (2), automating the deployment process. Managing your infrastructure as code, using the - -tools in Part 2, gets you a large part of the way there. To get the rest of the way there, - -you need to automate the process around using IaC. This includes implementing deployment strategies and a deployment - -pipeline, as discussed in the next two sections.

- -
- -
- -

Deployment Strategies

- -
- -

There are many deployment strategies that you can use to roll out changes: some involve downtime, while others do - -not; some are easy to implement, while others are more complicated; some only work with stateless apps, which are - -apps that don’t need to persist any of the data that they store on their local hard drives (e.g., most web frontend - -apps are stateless), while others also work with stateful apps, which are apps that store data on their local hard - -disks that needs to be persisted across deployments (e.g., any sort of database or distributed data system).

- -
- -
- -

The next several sections will go over some of the most common strategies used today, - -including a basic overview of each strategy, its advantages and drawbacks, and common use cases where the strategy is - -typically a good fit. Note that these strategies are not mutually exclusive: you can, and often do, combine multiple - -strategies together.

- -
- -
- -

Downtime deployment

- -
- -

This is the most basic deployment strategy, where you take a downtime to roll out changes, as shown in - -Figure 52:

- -
- -
- -
- -Downtime deployment - -
- -
Figure 52. Downtime deployment
- -
- -
- -
    - -
  1. - -

    You start with several replicas of v1 of your app running.

    - -
  2. - -
  3. - -

    You take all the v1 nodes down to update them to v2. While the update is happening, your users get an outage.

    - -
  4. - -
  5. - -

    Once the deployment is completed, you have v2 running everywhere, and your users are able to use the app again.

    - -
  6. - -
- -
- -
- -

Advantages of this strategy:

- -
- -
- -
- -
Easy to implement
- -
- -

This is the simplest and most basic deployment strategy.

- -
- -
Works with all types of apps
- -
- -

You can use this strategy with both stateless apps and stateful apps.

- -
- -
- -
- -
- -

Drawbacks of this strategy:

- -
- -
- -
- -
Downtime
- -
- -

Users have to suffer through an outage while you do the deployment.

- -
- -
- -
- -
- -

Use cases where the strategy is typically a good fit:

- -
- -
- -
- -
Single-replica systems
- -
- -

If you have a system with only a single replica, then when you go to update that one - -replica, you may have no choice other than taking a downtime. As you learned in Part 3, this - -is one of many reasons to run more than a single replica of your app.

- -
- -
Data migrations
- -
- -

If you are doing a large data migration, doing it without downtime (which often requires - -multiple migration steps and replicating all writes across multiple systems) is often 10x more expensive and - -error-prone than doing it with a brief downtime.

- -
- -
- -
- -
- -

Except for the handful of use cases I just mentioned, I would not recommend using downtime deployments, as - -these days, there is wide support for the zero-downtime deployment strategies discussed in the following sections.

- -
- -
- -
- -

Rolling deployment without replacement

- -
- -

This is the deployment strategy you saw in Part 3, where you gradually roll out new versions of - -your app onto new servers, and once the new versions of the app start to pass health checks, you gradually remove the - -old versions of the app, as shown in Figure 53:

- -
- -
- -
- -Rolling deployment without replacement - -
- -
Figure 53. Rolling deployment without replacement
- -
- -
- -
    - -
  1. - -

    You start with several replicas of v1 of your app running.

    - -
  2. - -
  3. - -

    You start deploying v2 of your app onto new servers. Once the v2 apps come up and start passing health checks, the - -load balancer will send traffic to them, so for some period of time, users may see both v1 and v2 of your app.

    - -
  4. - -
  5. - -

    As the v2 apps start passing health checks, you gradually undeploy the v1 apps, until you end up with just v2 running.

    - -
  6. - -
- -
- -
- -

Advantages of this strategy:

- -
- -
- -
- -
No downtime
- -
- -

Your app keeps working for your users during deployments.

- -
- -
Widely supported
- -
- -

Most deployment tools natively support rolling deployments without replacement.

- -
- -
- -
- -
- -

Drawbacks of this strategy:

- -
- -
- -
- -
Poor UX
- -
- -

During a rolling deployment, users may see both the old and new versions of your app at the same time, - -which can be a jarring user experience, or even cause bugs if you’re not careful.

- -
- -
Works only with stateless apps
- -
- -

This version of rolling deployment doesn’t work with stateful apps, as you deploy - -the v2 replicas before taking down the v1 replicas, so those v1 replicas are still using their hard-drives. In the - -next section, you’ll see a version of rolling deployment that does work with stateful apps.

- -
- -
- -
- -
- -

Use cases where the strategy is typically a good fit:

- -
- -
- -
- -
Deploying stateless apps
- -
- -

For stateless apps, a rolling deployment without replacement can be an effective option.

- -
- -
- -
- -
- -

As you’ll see a little later in this post, blue-green deployments are typically a better - -choice for stateless apps. However, relatively few systems support blue-green deployments natively, whereas rolling - -deployment without replacement is widely supported (you saw several examples of it in Part 3), so - -it’s often your best bet for stateless apps.

- -
- -
- -
- -

Rolling deployment with replacement

- -
- -

This is nearly identical to the rolling deployment in the previous section, except here, you remove the old version - -of the app before booting up the new version, as shown in - -Figure 54:

- -
- -
- -
- -Rolling deployment with replacement - -
- -
Figure 54. Rolling deployment with replacement
- -
- -
- -
    - -
  1. - -

    You start with several replicas of v1 of your app running, each with a hard-drive attached. These are typically - -network-attached hard-drives.

    - -
  2. - -
  3. - -

    You disconnect one[28] v1 replica from the load balancer, shut down the server, and move its hard drive to a new v2 - -server (since it’s a network-attached hard-drive, you do the move through software). Once that new v2 server starts - -passing health checks, the load balancer starts sending traffic to it.

    - -
  4. - -
  5. - -

    You repeat this process with each v1 server, taking it out of the load balancer rotation, shutting it down, and moving - -its hard-drive to a new v2 server, until all replicas are replaced with v2.

    - -
  6. - -
- -
- -
- -

Advantages of this strategy:

- -
- -
- -
- -
No downtime
- -
- -

Your app keeps working for your users during deployments.

- -
- -
Works with all types of apps
- -
- -

You can use this strategy with both stateless and stateful apps.

- -
- -
Widely supported
- -
- -

Most deployment tools natively support rolling deployments with replacement.

- -
- -
- -
- -
- -

Drawbacks of this strategy:

- -
- -
- -
- -
Limited support for hard-drive replacement
- -
- -

While most deployment tools support rolling deployment with - -replacement, only a small subset of those tools natively support moving hard-drives over while the deployment is - -happening.

- -
- -
Poor UX
- -
- -

During a rolling deployment, users may see both the old and new versions of your app at the same time, - -which can be a jarring user experience, or even cause bugs if you’re not careful.

- -
- -
- -
- -
- -

Use cases where the strategy is typically a good fit:

- -
- -
- -
- -
Deploying stateful apps
- -
- -

This strategy allows you to do zero-downtime deployments for stateful systems where each replica has a unique set - -of data on its local hard-drive that needs to be persisted across the deployment (e.g., distributed data stores - -such as Consul, Elasticsearch, and ZooKeeper).

- -
- -
- -
- -
- -

When it comes to stateful apps, rolling deployment with replacement is the gold standard. However, for stateless apps, - -blue-green deployment is the gold standard, as discussed in the next section.

- -
- -
- -
- -

Blue-green deployment

- -
- -

With blue-green deployments, you bring up the new (green) version of your app, wait for it to be fully ready, and then - -instantaneously switch all traffic from the old version (blue) to the new version (green), as shown in - -Figure 55:

- -
- -
- -
- -Blue-green deployment - -
- -
Figure 55. Blue-green deployment
- -
- -
- -
    - -
  1. - -

    You start with several replicas of v1 of your app running. Let’s refer to these v1 apps as "blue."

    - -
  2. - -
  3. - -

    You start deploying v2 of your app, which we’ll refer to as "green," onto new servers. The v2 apps start to go - -through health checks in the load balancer, but the load balancer does not yet send any traffic to them.

    - -
  4. - -
  5. - -

    When all the v2 replicas are passing health checks, you do an instantaneous switchover, moving all traffic from - -v1 (blue) to v2 (green). At that point, you undeploy all the v1 servers, leaving just v2.

    - -
  6. - -
- -
- -
- -

Advantages of this strategy:

- -
- -
- -
- -
No downtime
- -
- -

Your app keeps work for your users during deployments.

- -
- -
Good UX
- -
- -

During a deployment, your users see only one version of the app or the other, but not both, so you avoid - -a jarring user experience and potential bugs.

- -
- -
- -
- -
- -

Drawbacks of this strategy:

- -
- -
- -
- -
Limited support
- -
- -

Only a small subset of tools natively support blue-green deployments.

- -
- -
Works only with stateless apps
- -
- -

With stateless apps, you typically can’t instantaneously move data over to the - -new version, so blue-green deployments aren’t an option (without downtime).

- -
- -
- -
- -
- -

Use cases where the strategy is typically a good fit:

- -
- -
- -
- -
Deploying stateless apps
- -
- -

Blue-green deployments are the gold standard for deploying stateless apps.

- -
- -
- -
- -
- -

All the deployment strategies you’ve seen so far can be use standalone. Let’s now turn our attention to some strategies - -that are meant to be combined with other strategies, starting with canary deployment.

- -
- -
- -
- -

Canary deployment

- -
- -

This is not a standalone deployment strategy, but a strategy meant to be combined with other strategies, such as - -rolling deployment or blue-green deployment, to reduce the risk of broken deployments by testing new code on a single - -replica before doing a full rollout.

- -
- -
- -

The name "canary" comes from the proverbial "canary in the coal mine," which is a bird that coal miners would - -take into mines with them, as canaries are more sensitive to poisonous gasses than humans, so if the canary starts - -reacting poorly or dies, it’s an early warning signal that you need to get out immediately. The idea with canary - -deployments is similar: you deploy your new code on solely a single replica initially, and if that replica shows any - -problems, you roll back the deployment before it can cause more damage, as shown in Figure 56:

- -
- -
- -
- -Canary deployment - -
- -
Figure 56. Canary deployment
- -
- -
- -
    - -
  1. - -

    You start with several replicas of v1 of your app running.

    - -
  2. - -
  3. - -

    You deploy a single replica of v2, called the canary server, and send traffic to it. You then compare the canary - -server to a randomly-chosen older (v1) server, called the control. If you see any differences—e.g., the canary - -has higher error rates or higher memory usage than the control—this gives you an early warning that the deployment has - -problems, and you can roll it back before it does too much damage.

    - -
  4. - -
  5. - -

    If you can’t find any differences between the canary and the control, then you can roll out v2 fully - -using one of the other strategies, such as rolling deployment or blue-green deployment.

    - -
  6. - -
- -
- -
- -

Advantages of this strategy:

- -
- -
- -
- -
Catch errors early
- -
- -

Before they affect too many of your users.

- -
- -
- -
- -
- -

Drawbacks of this strategy:

- -
- -
- -
- -
Poor UX
- -
- -

During a canary deployment, a small percentage of your users may see both the old and new versions of - -your app at the same time, which can be a jarring user experience, or even cause bugs if you’re not careful.

- -
- -
- -
- -
- -

Use cases where the strategy is typically a good fit:

- -
- -
- -
- -
Large deployments
- -
- -

Where even a small percentage of traffic can give you meaningful data.

- -
- -
Risky deployments
- -
- -

Where a full-scale outage would cause significant problems for your business.

- -
- -
- -
- -
- -

Canary deployments offer one way to reduce the blast radius if a deployment goes wrong. If you combine canary - -deployments with feature toggle deployments, which are discussed in the next section, you can reduce the risk of - -deployments even further.

- -
- -
- -
- -

Feature toggle deployment

- -
- -

You saw feature toggles earlier in Section 5.1.3.2 as a technique for being able to merge code into main - -regularly, even while making large-scale changes. It turns out that feature toggles can also have a profound impact on - -how you deploy software, too. This is also not a standalone deployment strategy, but a strategy meant to be combined - -with other strategies, such as rolling deployment or blue-green deployment. Figure 56 shows an - -overview of feature toggle deployment:

- -
- -
- -
- -Feature toggle deployment - -
- -
Figure 57. Feature toggle deployment
- -
- -
- -
    - -
  1. - -

    You start with several replicas of v1 of your app running.

    - -
  2. - -
  3. - -

    You deploy v2 of your app using one of the other strategies, such as rolling deployments or blue-green - -deployments, but with a key difference: any new features in the new version are wrapped in a feature toggle—and off - -by default. Therefore, the deployment itself doesn’t release any new functionality: that is, users won’t see any - -differences as a result of v2 being deployed.

    - -
  4. - -
  5. - -

    After the deployment is done, you can then enable v2 using your feature toggle service, and only then will users - -start to see different functionality.

    - -
  6. - -
- -
- -
- -

Advantages of this strategy:

- -
- -
- -
- -
Separate deployment from release
- -
- -

Without feature toggles, every time you deploy new code (e.g., roll out a new - -Docker image into a Kubernetes cluster), you also automatically release every single new feature in that code, all - -at once. With feature toggles, the deployment and release steps are now separate, which makes deployments - -considerably less risky. This is another one of the key ingredients that makes it possible for the companies with - -world-class software delivery processes mentioned in Section 1.1 to deploy thousands of times per day.

- -
- -
Resolve issues without deploying new code
- -
- -

Not only do feature toggles allow you to release features separately - -from deploying new code, but they also allow you to unrelease features without code changes. That is, if you - -enable a feature toggle, and you start seeing problems (bugs, performance issues, outages), you can just as quickly - -disable that feature toggle to turn the feature off. In many cases, this gives you a way to resolve issues that is - -much faster than having to write and deploy new code. It’s one of the big reasons the companies mentioned in - -Section 1.1 can recover from downtime 700-4000x faster.

- -
- -
Ramp new features
- -
- -

A remarkable benefit of separating deployment from release is that it allows you to ramp features gradually, rather - -than them being on for all users all at once. For example, at LinkedIn, one of the changes from Project - -Inversion was to require all new features to be wrapped in feature toggles, and to ramp them up gradually; Facebook, - -Google, and many other companies use similar processes. Every new feature starts off disabled by default, and when - -it’s ready for testing, we’d first turn it on only for employees, so that we could test it internally; if you work - -at companies like LinkedIn, Facebook, or Google, your experience of those products can be very different from that of - -the general public. Once things are looking good in internal testing, we could then ramp the feature up, turning it - -on for, say, a random 1% of users. We’d then observe those users, looking at their error rates to make - -sure there were no problems. If everything looked OK, we’d ramp the feature to 10% of users. After another round of - -observation, we’d ramp to 50%, and eventually to 100%. If we hit issues at any point, we could pause the ramp, or - -ramp back down.

- -
- -
A/B test features
- -
- -

Feature toggles also give you the ability to do A/B testing (AKA - -bucket testing), where you can compare how different versions of your product perform against each other. For example, - -you could randomly split your users into two buckets, a bucket A with the new feature enabled, and a bucket B with - -the new feature disabled, and compare how the users perform at key metrics across the two buckets. For example, did - -the new feature increase engagement? Downloads? Purchases? Referrals? This is just like a scientific experiment, with - -control and experimental groups: as long as (a) you randomly assign users to buckets, (b) the only difference between - -the buckets is the new feature, and (c) you gather enough data for it to be statistically significant,[29] then you can be reasonably confident that any difference in metrics between the - -buckets is due to the new feature. In other words, you are using data to establish a causal relationship!

- -
- -

This is sometimes called data-driven product development, and if you have the type of product where you can do it - -(i.e., you can show users different versions of the product, and you have sufficient traffic to generate statistically - -significant results), it can be transformational.[30]

- -
- -
- -
- -
- -
- -

Drawbacks of this strategy:

- -
- -
- -
- -
Requires an extra service
- -
- -

To use feature toggles, you have to run and maintain an extra feature toggle service, - -or pay for one from a 3rd party.

- -
- -
Forked code
- -
- -

Over time, as you add more and more if-statements with feature toggle lookups, you get more and more - -forks in your code. This makes the code harder to maintain and test. If you’re going to use feature toggles, you’ll - -need to create the discipline (and automation) to ensure that you systematically remove if-statements for feature - -toggles that are unlikely to ever change again (e.g., feature toggles greater than 1 year old).

- -
- -
- -
- -
- -

Use cases where the strategy is typically a good fit:

- -
- -
- -
- -
All new feature development
- -
- -

The ability to separate deployment from release, carefully ramp new features, and - -quickly shut off features that are causing issues is such a huge advantage in agility, that once you get past a - -certain scale as a company, you should consider wrapping all new features in feature toggles.

- -
- -
Data-driven development
- -
- -

Feature toggles are an incredibly powerful tool for product teams, as they give you the - -ability to do A/B testing and data-driven development.

- -
- -
- -
- -
- -

If you’re paged at 3AM because of an outage, the ability to disable the feature causing the outage in a few clicks, so - -you can all go back to sleep and put in a more permanent fix during normal working hours, truly feels like a - -superpower. Almost all companies that have world-class software delivery processes make heavy use of feature toggles. - -Most of these companies also promote changes from environment to environment, as discussed next.

- -
- -
- -
- -

Promotion deployment

- -
- -

This is yet another strategy that isn’t a standalone strategy, but meant to be combined with other strategies, such - -as rolling deployment or blue-green deployment. The idea with promotion deployments (AKA promotion workflows) is to - -deploy your code across multiple environments, starting with internal pre-production environments, and ending up in your - -production environment, with the hope that you can catch issues in the pre-production environments before they affect - -production (you’ll learn more about multiple environments in Part 6), as shown in - -Figure 58:

- -
- -
- -
- -Promotion deployment - -
- -
Figure 58. Promotion deployment
- -
- -
- -
    - -
  1. - -

    Let’s say you have three environments: dev, stage, and prod. Initially, v1 of your app is running in all three of - -those environments.

    - -
  2. - -
  3. - -

    You use one of the other deployment strategies (e.g., rolling deployment or blue-green deployment) to deploy v2 across - -the dev environment, and do a round of testing in dev.

    - -
  4. - -
  5. - -

    If everything works well in dev, you deploy exactly the same v2 code—also known as promoting v2—to the stage - -environment, and do a round of testing in stage.

    - -
  6. - -
  7. - -

    If everything works well in stage, you finally promote v2 to prod.

    - -
  8. - -
- -
- -
- -

Advantages of this strategy:

- -
- -
- -
- -
Multiple chances to catch errors
- -
- -

You get a chance to test your code in pre-prod environments before that exact - -same code goes to prod.

- -
- -
- -
- -
- -

Drawbacks of this strategy:

- -
- -
- -
- -
Requires multiple environments
- -
- -

You have to deploy and maintain multiple environments, instead of just one.

- -
- -
- -
- -
- -

Use cases where the strategy is typically a good fit:

- -
- -
- -
- -
All deployments
- -
- -

The benefits of having pre-prod environments to test in are so significant, that once you get - -past a certain scale as a company, you should consider using multiple environments and promotion workflows for all - -deployments.

- -
- -
- -
- -
- -

If you use multiple environments as a company (e.g., dev, stage, prod), something you’ll learn more about in - -Part 6, you should almost certainly use promotion workflows as well. Moreover, if you - -manage your infrastructure as code, promotion workflows are essential for automating infrastructure deployments, as - -discussed in the next section.

- -
- -
- -
- -

Infrastructure deployment

- -
- -

Except for promotion workflows, just about all the deployment strategies in the previous sections are - -only applicable to deploying application code: e.g., apps written in Java, Ruby, Python, JavaScript, etc. When it - -comes to infrastructure code (e.g., OpenTofu, Pulumi, CloudFormation), the deployment strategies that are available - -are much more limited. Typically, it’s binary: either you make an infrastructure change, or you don’t; either you - -create (or delete!) that database, or you don’t; there’s no gradual rollout, no feature toggles, no canaries, etc. That - -makes infrastructure deployments harder and riskier. The typical strategy used to mitigate those risks comes down to - -the following two steps:

- -
- -
- -
    - -
  1. - -

    Validate plan output: Assuming your infrastructure tool supports some sort of plan or dry-run operation, you should - -always analyze the plan output before deploying changes to an environment. For example, with OpenTofu, you can - -integrate running the plan command into your pull request workflow, so you can review not only the code changes, - -but also the plan output, before merging changes in. You’ll see an example of this later in this - -blog post.

    - -
  2. - -
  3. - -

    Use a promotion workflow: Promote infrastructure changes from environment to environment, just as you saw in the - -previous section. For example, you deploy the same infrastructure code first in dev, then in stage, and then in prod, - -with a period of testing in each environment before moving onto the next one.

    - -
  4. - -
- -
- -
- -

Advantages of this strategy:

- -
- -
- -
- -
Works with infrastructure deployments
- -
- -

The strategies in this section work with most types of infrastructure - -changes.

- -
- -
Even more chances to catch errors
- -
- -

You not only get a chance to test your code in pre-prod environments before - -that exact same code goes to prod, but you also get to check the plan output for each environment before deploying - -code into that environment.

- -
- -
- -
- -
- -

Drawbacks of this strategy:

- -
- -
- -
- -
Requires multiple environments
- -
- -

You have to deploy and maintain multiple environments, instead of just one.

- -
- -
- -
- -
- -

Use cases where the strategy is typically a good fit:

- -
- -
- -
- -
All infrastructure deployments
- -
- -

The benefits of having both plan output before a deployment to an environment, - -and having pre-prod environments to test in before prod, are so significant, that once you get past a certain scale - -as a company, you should consider using this approach for all infrastructure deployments.

- -
- -
- -
- -
- -

Now that you’ve seen all the basic deployment strategies, let’s turn our attention to how to implement these strategies - -as code in the form of deployment pipelines.

- -
- -
- -
- -
- -

Deployment Pipelines

- -
- -

A deployment pipeline is the process you use to go from an idea to live code that affects your users. It consists of - -all the steps you must go through on the way to release. Deployment pipelines are different at every company, as they - -are effectively capturing your company’s processes, policies, and requirements as code, but most pipelines include the - -following:

- -
- -
- -
- -
Commit
- -
- -

How do you get code into version control? Do you use a pull-request based process? Do you use - -trunk-based development?

- -
- -
Build
- -
- -

What compilation and build steps do you need? How do you package the code?

- -
- -
Test
- -
- -

What automated tests do you run against the code? What manual tests?

- -
- -
Review
- -
- -

What review processes do you use? Who has to sign off and approve merges and deployments?

- -
- -
Deploy
- -
- -

How do you get the new code into production? How do you release new functionality to users?

- -
- -
- -
- -
- -

Typically, you run a deployment pipeline on a deployment server, and not a developer’s computer (you’ll see later in - -this blog post why). The most common option is to use the same server you use for CI, such as the ones - -you saw earlier in the post (e.g., GitHub Actions, - -CircleCi, and GitLab). Another option is to use deployment servers - -that are designed for a specific technology: for example, for OpenTofu and Terraform, you might use the - -HashiCorp Cloud Platform, env0, - -Scalr, Spacelift, or Atlantis.

- -
- -
- -

You also need to pick a language for defining your pipeline as code. Again, the most common option is to use the - -workflow definition language that comes with your CI server: e.g., - -GitHub Actions workflows are defined in YAML. - -Other options include defining workflows in scripting languages (e.g., Ruby, Python, Bash), your build system’s language - -(e.g., NPM, Maven, Make), and, a relatively recent option is to use a tool designed for defining workflows that can - -run on a variety of platforms, such as Dagger or - -Common Workflow Language. In many cases, a deployment pipeline will use multiple languages - -and tools together.

- -
- -
- -

The best way to understand deployment pipelines is to see an example, which is the focus of the next several sections. - -After that, you’ll learn about deployment pipeline best practices that apply to any company and any pipeline.

- -
- -
- -

Example: configure an automated deployment pipeline in GitHub Actions

- -
- -

To avoid introducing too many new tools, let’s stick to using GitHub Actions as the deployment server and GitHub Actions - -YAML workflows as the primary language for defining the pipeline. The goal is to implement the pipeline shown in - -Figure 59 for the lambda-sample module:

- -
- -
- -
- -The steps of a typical deployment pipeline (left) and the example technologies you’ll use (right) - -
- -
Figure 59. The steps of a typical deployment pipeline (left) and the example technologies you’ll use (right)
- -
- -
- -

Here’s how this pipeline works:

- -
- -
- -
    - -
  1. - -

    Commit code to a branch in your VCS: The first step is to make some code changes in a branch.

    - -
  2. - -
  3. - -

    Open a pull request: Once the changes are ready to review, you open a PR.

    - -
  4. - -
  5. - -

    Run automations for open pull request: Your deployment server runs automations on the open PR, such as - -compiling the code, static analysis, functional tests (e.g., unit tests, integration tests, etc.), and generating - -the plan output by running tofu plan.

    - -
  6. - -
  7. - -

    Review and merge the pull request: Your team members review the PR, plus the outputs of the automations (e.g., test - -results, plan output), and if everything looks good, merge the PR in.

    - -
  8. - -
  9. - -

    Run automations for the merged pull request: Finally, your deployment server runs automations for the merged - -PR, such as compiling the code, static analysis, functional tests, and lastly, deploying the changes by running - -tofu apply.

    - -
  10. - -
- -
- -
- -

This type of pipeline, where you mostly drive actions through operations in Git (e.g., commits, branches, and pull - -requests) is often referred to as a GitOps pipeline. As it turns out, you’ve implemented most of this GitOps pipeline - -in this blog post already, as part of setting up automated tests in the CI section. The only items - -missing are the following:

- -
- -
- -
    - -
  • - -

    When you open a PR, run plan on the lambda-sample module.

    - -
  • - -
  • - -

    When you merge a PR, run apply on the lambda-sample module.

    - -
  • - -
- -
- -
- -

To add these items, you need to do the following steps:

- -
- -
- -
    - -
  • - -

    Use a remote backend for OpenTofu state

    - -
  • - -
  • - -

    Add IAM roles for infrastructure deployments in GitHub Actions

    - -
  • - -
  • - -

    Define a pipeline for infrastructure deployments

    - -
  • - -
- -
- -
- -

The following three sections will cover each of these steps.

- -
- -
- -
- -

Example: use a remote backend for OpenTofu state

- -
- -

In Section 2.5.2, you learned that, by default, OpenTofu uses the local backend to store - -OpenTofu state in .tfstate files on your local hard drive. This works fine when you’re learning and working alone, - -but if you want to use OpenTofu as a team, you need a way to share these state files. You might be tempted to use - -version control, but that’s not a good idea for the following reasons:

- -
- -
- -
- -
Manual error
- -
- -

It’s too easy to forget to pull down the latest changes from version control before running OpenTofu or to push - -your latest changes to version control after running OpenTofu. It’s just a matter of time before someone on your - -team runs OpenTofu with out-of-date state files and, as a result, accidentally rolls back or duplicates previous - -deployments.

- -
- -
Locking
- -
- -

Most version control systems do not provide any form of locking that would prevent two team members from running - -tofu apply on the same state file at the same time.

- -
- -
Secrets
- -
- -

All data in OpenTofu state files is stored in plain text. This is a problem because certain OpenTofu resources need - -to store sensitive data. For example, if you use the aws_db_instance resource to create a database, OpenTofu will - -store the username and password for the database in a state file in plain text, and you shouldn’t store plain text - -secrets in version control (something you’ll learn more about in Part 8).

- -
- -
- -
- -
- -

This is why in Part 4, you added .tfstate files to .gitignore, so as not to accidentally - -check them in.

- -
- -
- -

Instead of using version control, the best way to share state files in a team is to use a supported remote backend, - -such as Amazon Storage Service (S3), Azure Storage, Google Cloud Storage (GCS), Consul, or Postgres. Remote backends - -solve the three issues just listed:

- -
- -
- -
- -
Manual error
- -
- -

After you configure a remote backend, OpenTofu will automatically load the state file from that backend every time - -you run plan or apply, and it’ll automatically store the state file in that backend after each apply, so there’s - -no chance of manual error.

- -
- -
Locking
- -
- -

Most of the remote backends natively support locking. To run tofu apply, OpenTofu will automatically acquire a - -lock; if someone else is already running apply, they will already have the lock, and you will have to wait. You can - -run apply with the -lock-timeout=<TIME> parameter to instruct OpenTofu to wait up to TIME for a lock to be - -released (e.g., -lock-timeout=10m will wait for 10 minutes).

- -
- -
Secrets
- -
- -

Most of the remote backends natively support encryption in transit and encryption at rest of the state file. - -Moreover, those backends usually expose ways to configure access permissions, so you can control who has access to - -your state files and the secrets they might contain.

- -
- -
- -
- -
- -

If you’re using OpenTofu with AWS, Amazon’s managed file store, S3, is typically your best bet as a remote backend for - -the following reasons:

- -
- -
- -
    - -
  • - -

    It’s a managed service, so you don’t need to deploy and manage extra infrastructure to use it.

    - -
  • - -
  • - -

    It’s designed for 99.999999999% durability - -and 99.99% availability, which means you don’t need to worry too much about data loss or outages.

    - -
  • - -
  • - -

    It supports encryption, which reduces worries about storing sensitive data in state files.

    - -
  • - -
  • - -

    It supports locking via DynamoDB (more on this shortly).

    - -
  • - -
  • - -

    It supports versioning, so every revision of your state file is stored, and you can roll back to an older version - -if something goes wrong.

    - -
  • - -
  • - -

    It’s inexpensive, with most OpenTofu usage easily fitting into the AWS Free Tier.

    - -
  • - -
- -
- -
- -

To enable remote state storage with Amazon S3, you must first create an S3 bucket and DynamoDB table. The - -blog post series’s sample code repo includes a module called state-bucket in the ch5/tofu/modules/state-bucket - -folder which can create an S3 bucket to store OpenTofu state, including:

- -
- -
- -
    - -
  • - -

    Enabling versioning on the S3 bucket so that every update to a file in the bucket actually creates a new version of - -that file. This allows you to see older versions of the file and revert to those older versions at any time, which - -can be a useful fallback mechanism if something goes wrong.

    - -
  • - -
  • - -

    Turning server-side encryption on by default for all data written to the S3 bucket. This ensures that your state - -files, and any secrets they might contain, are always encrypted on disk when stored in S3.

    - -
  • - -
  • - -

    Blocking all public access to the S3 bucket. S3 buckets are private by default, but as they are often used to serve - -static content—e.g., images, fonts, CSS, JS, HTML—it is possible, even easy, to make the buckets public. Since your - -state files may contain sensitive data and secrets, it’s worth adding this extra layer of protection to ensure no - -one on your team can ever accidentally make this S3 bucket public.

    - -
  • - -
- -
- -
- -

The state-bucket module can also create a DynamoDB table for OpenTofu locking. DynamoDB is Amazon’s distributed - -key-value store. It supports strongly consistent reads and conditional writes, which are all the ingredients you need - -for a distributed lock system. Moreover, it’s completely managed, so you don’t have any infrastructure to run yourself, - -and it’s inexpensive, with most OpenTofu usage easily fitting into the AWS - -free tier.

- -
- -
- -

To use the state-bucket module, first check out the main branch of your own repo, and make sure you have the latest - -code:

- -
- -
- -
- -
$ cd fundamentals-of-devops
-
-$ git checkout main
-
-$ git pull origin main
- -
- -
- -
- -

Next, create a new folder called tofu-state to use as a root module:

- -
- -
- -
- -
$ mkdir -p ch5/tofu/live/tofu-state
-
-$ cd ch5/tofu/live/tofu-state
- -
- -
- -
- -

Within the tofu-state folder, create a main.tf file with the contents shown in Example 100:

- -
- -
- -
Example 100. Configure the state-bucket module (ch5/tofu/live/tofu-state/main.tf)
- -
- -
- -
- -
provider "aws" {
-
-  region = "us-east-2"
-
-}
-
-
-
-module "state" {
-
-  source = "github.com/brikis98/devops-book//ch5/tofu/modules/state-bucket"
-
-
-
-  # TODO: fill in your own bucket name!
-
-  name = "fundamentals-of-devops-tofu-state"
-
-}
- -
- -
- -
- -
- -
- -

This code sets just one parameter, name, which will be used as the name of the S3 bucket and DynamoDB table. Note - -that S3 bucket names must be globally unique among all AWS customers. Therefore, you must change the name - -parameter from "fundamentals-of-devops-tofu-state" (which I already created) to your own name. Make sure to remember - -this name and take note of what AWS region you’re using because you’ll need both pieces of information again a little - -later on.

- -
- -
- -

To create the S3 bucket and DynamoDB table, run init and apply as usual:

- -
- -
- -
- -
$ tofu init
-
-$ tofu apply
- -
- -
- -
- -

Once apply is done, you can start using the S3 bucket and DynamoDB table for state storage. To do that, you need to - -update your OpenTofu modules with a backend configuration. As a first step, add a backend.tf file to the - -tofu-state module with the contents shown in Example 101:

- -
- -
- -
Example 101. OpenTofu code to use an S3 bucket and DynamoDB table as a backend (ch5/tofu/live/tofu-state/backend.tf)
- -
- -
- -
- -
terraform {
-
-  backend "s3" {
-
-    # TODO: fill in your own bucket name here!
-
-    bucket         = "fundamentals-of-devops-tofu-state" # (1)
-
-    key            = "ch5/tofu/live/tofu-state"          # (2)
-
-    region         = "us-east-2"                         # (3)
-
-    encrypt        = true                                # (4)
-
-    # TODO: fill in your own DynamoDB table name here!
-
-    dynamodb_table = "fundamentals-of-devops-tofu-state" # (5)
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

Here’s what this code does:

- -
- -
- -
    - -
  1. - -

    Configure the S3 bucket to use as a remote backend. Make sure to fill in your own S3 bucket’s name here.

    - -
  2. - -
  3. - -

    The filepath within the S3 bucket where the OpenTofu state file should be written. You can use a single S3 bucket - -and DynamoDB table to store the state file for many different modules so long as you ensure that each module gets - -a unique key (filepath) for its state file.

    - -
  4. - -
  5. - -

    The AWS region where you created your S3 bucket.

    - -
  6. - -
  7. - -

    Setting encrypt to true ensures that your OpenTofu state will be encrypted on disk when stored in S3. You - -already enabled default encryption in the S3 bucket itself, so this is here as a second layer to ensure that the - -data is always encrypted.

    - -
  8. - -
  9. - -

    The DynamoDB table to use for locking. Make sure to fill in your own DynamoDB table’s name here.

    - -
  10. - -
- -
- -
- -

Run tofu init one more time, and you should see something like this:

- -
- -
- -
- -
$ tofu init
-
-
-
-Initializing the backend...
-
-Do you want to copy existing state to the new backend?
-
-  Pre-existing state was found while migrating the previous "local" backend
-
-  to the newly configured "s3" backend. No existing state was found in the
-
-  newly configured "s3" backend. Do you want to copy this state to the new
-
-  "s3" backend? Enter "yes" to copy and "no" to start with an empty state.
-
-
-
-  Enter a value:
- -
- -
- -
- -

OpenTofu will automatically detect that you already have a state file locally and prompt you to copy it to the new S3 - -backend. If you type yes and hit ENTER, you should see the following:

- -
- -
- -
- -
Successfully configured the backend "s3"! OpenTofu will automatically
-
-use this backend unless the backend configuration changes.
- -
- -
- -
- -

With this backend enabled, OpenTofu will automatically pull the latest state from this S3 bucket before running a - -command and automatically push the latest state to the S3 bucket after running a command, and it’ll use DynamoDB locks - -to handle concurrent access.

- -
- -
- -

You should make the same change in the lambda-sample module as well, adding the backend.tf file shown in - -Example 102:

- -
- -
- -
Example 102. Update the lambda-sample module to use S3 as a backend (ch5/tofu/live/lambda-sample/backend.tf)
- -
- -
- -
- -
terraform {
-
-  backend "s3" {
-
-    # TODO: fill in your own bucket name here!
-
-    bucket         = "fundamentals-of-devops-tofu-state" # (1)
-
-    key            = "ch5/tofu/live/lambda-sample"       # (2)
-
-    region         = "us-east-2"
-
-    encrypt        = true
-
-    # TODO: fill in your own DynamoDB table name here!
-
-    dynamodb_table = "fundamentals-of-devops-tofu-state" # (3)
-
-  }
-
-}
- -
- -
- -
- -
- -
- -

This is identical to the backend.tf in the tofu-state module, but note three things:

- -
- -
- -
    - -
  1. - -

    Just as in the tofu-state module, you’ll need to fill in the name of your own S3 bucket here.

    - -
  2. - -
  3. - -

    The key value for the lambda-sample module must be different than the tofu-state module, so they don’t - -overwrite each other’s state!

    - -
  4. - -
  5. - -

    Just as in the tofu-state module, you’ll need to fill in the name of your own DynamoDB table here.

    - -
  6. - -
- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

If you’re like me, you’re probably annoyed by all the copy/paste you need to do with these backend configurations. - -Unfortunately, OpenTofu does not support using variables or any other kind of logic in backend blocks, so some amount - -of copy/paste is necessary. However, you can try out one of the following approaches to significantly reduce the code - -duplication:

- -
- -
- - - -
- -
- -
- -
- -

To finish up the remote state setup, do the following two steps:

- -
- -
- -
    - -
  1. - -

    Run init on the lambda-sample module to set up remote state storage, just as you did with the tofu-state module.

    - -
  2. - -
  3. - -

    Commit your changes to the lambda-sample and tofu-state modules and push them to main.

    - -
  4. - -
- -
- -
- -

Now that you have a remote backend set up, you can move onto the next step, which is setting up IAM roles that will - -allow you to do deployments from GitHub Actions.

- -
- -
- -
- -

Example: add IAM roles for infrastructure deployments in GitHub Actions

- -
- -

Earlier in this blog post, you configured an OIDC provider to give GitHub Actions access to your AWS - -account for running automated tests. Now you need a way to give GitHub Actions access to your AWS account for - -deployments. Normally, you would deploy to a totally separate environment (separate AWS account) from where you run - -automated tests, so you’d need to configure a new OIDC provider in your deployment environment. However, to keep things - -simple in this post, let’s use the same AWS account for both deployment and testing (you’ll - -learn how to set up additional environments in Part 6). That allows you to use the same - -OIDC provider; however, you still need to create new IAM roles for the following reasons:

- -
- -
- -
    - -
  • - -

    The permissions you need for automated tests are different than those for deployment.

    - -
  • - -
  • - -

    The permissions for deployment should be managed via two separate IAM roles: one for plan and one for apply. - -That’s because you want plan to run on any branch before a PR has merged, whereas you want apply only to run - -on main after a PR has merged. Since the plan portion runs before merge—before anyone has had a chance to - -review the code changes—the IAM role you use for plan should be limited to read-only permissions: enough to see the - -plan output, but not enough to make any changes.

    - -
  • - -
- -
- -
- -

Open up main.tf in the ci-cd-permissions module and add the code shown in Example 103 to enable - -creating IAM roles for both plan and apply:

- -
- -
- -
Example 103. Update the ci-cd-permissions module to enable IAM roles for plan and apply (ch5/tofu/live/ci-cd-permissions/main.tf)
- -
- -
- -
- -
module "iam_roles" {
-
-
-
-  # ... (other params omitted) ...
-
-
-
-  enable_iam_role_for_plan  = true                                # (1)
-
-  enable_iam_role_for_apply = true                                # (2)
-
-
-
-  # TODO: fill in your own bucket and table name here!
-
-  tofu_state_bucket         = "fundamentals-of-devops-tofu-state" # (3)
-
-  tofu_state_dynamodb_table = "fundamentals-of-devops-tofu-state" # (4)
-
-}
- -
- -
- -
- -
- -
- -

This code does the following:

- -
- -
- -
    - -
  1. - -

    Enable the IAM role for plan. This IAM role will get read-only permissions. The OIDC provider will be allowed to - -assume this role from any branch.

    - -
  2. - -
  3. - -

    Enable the IAM role for apply. This IAM role will get both read and write permissions. The OIDC provider will - -only be allowed to assume this role from the main branch. This ensures that only merged PRs can be deployed.

    - -
  4. - -
  5. - -

    Configure which S3 bucket to use for Tofu state. Make sure to fill in your own S3 bucket’s name here. The plan - -role will get read-only access to this bucket; the apply role will get read and write access.

    - -
  6. - -
  7. - -

    Configure which DynamoDB table to use for Tofu state. Make sure to fill in your own DynamoDB table’s name here. - -The plan role will get read-only access to this table; the apply role will get read and write access.

    - -
  8. - -
- -
- -
- -

Next, update outputs.tf with two new output variables that contain the ARNs of the two new IAM roles, as shown in - -Example 104:

- -
- -
- -
Example 104. Add output variables for the two new IAM roles (ch5/tofu/live/ci-cd-permissions/outputs.tf)
- -
- -
- -
- -
output "lambda_deploy_plan_role_arn" {
-
-  value = module.iam_roles.lambda_deploy_plan_role_arn
-
-}
-
-
-
-output "lambda_deploy_apply_role_arn" {
-
-  value = module.iam_roles.lambda_deploy_apply_role_arn
-
-}
- -
- -
- -
- -
- -
- -

Run apply to create the new IAM roles and take note of the lambda_deploy_plan_role_arn and - -lambda_deploy_apply_role_arn outputs; you’ll need them shortly!

- -
- -
- -

Commit your changes to the ci-cd-permissions module and push them to main. You’re now finally ready to define the - -deployment pipeline itself!

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a couple of exercises you can try at home to get a better feel for IAM roles:

- -
- -
- -
    - -
  • - -

    Open up the code for the gh-actions-iam-roles module and read through it. What permissions, exactly, is the - -module granting to those IAM roles? Why?

    - -
  • - -
  • - -

    Create your own version of the gh-actions-iam-roles module that you can use for deploying other types of - -infrastructure, and not just Lambda functions: e.g., try to create IAM roles for deploying EKS clusters, EC2 - -instances, and so on.

    - -
  • - -
- -
- -
- -
- -
- -
- -

Example: define a pipeline for infrastructure deployments

- -
- -

With all the prerequisites out of the way, you can finally implement a deployment pipeline for the lambda-sample module that - -will do the following:

- -
- -
- -
    - -
  • - -

    When you open a PR, run plan on the lambda-sample module.

    - -
  • - -
  • - -

    When you merge a PR, run apply on the lambda-sample module.

    - -
  • - -
- -
- -
- - - - - - - - - - - -
- -
Warning
- -
- -
Watch out for snakes: this is a very simplified pipeline
- -
- -

The pipeline described here represents only a small piece of a real-world deployment pipeline.[31] It’s missing several important aspects, including:

- -
- -
- -
- -
App build
- -
- -

The lambda-sample module contains a source folder with a dirt-simple "Hello, World" app that doesn’t - -have any dependencies, tests, etc. In real-world deployment pipelines, you usually need to include - -steps to build the app, including compiling the code, running tests, packaging the app (e.g., as a Docker image), - -packaging static assets (e.g., minification, fingerprinting, etc.) and so on.

- -
- -
Multiple environments
- -
- -

In this blog post, you’ll be deploying the lambda-sample module into a single - -test account. In real-world usage, your deployment pipeline usually needs to support multiple environments (e.g., - -dev, stage, prod), and the ability to promote changes from one environment to the next. You’ll learn more about this - -in Part 6.

- -
- -
Security
- -
- -

The simplified example in this post doesn’t do much in terms of locking down - -the deployment pipeline. In real-world usage, you’d want to configure approval workflows, access controls (especially - -on who can edit workflows), and a number of other checks to secure your pipeline.

- -
- -
- -
- -
- -
- -
- -

Let’s first create a workflow for the plan portion. Create a new file called .github/workflows/tofu-plan.yml with - -the contents shown in Example 105:

- -
- -
- -
Example 105. The workflow to run tofu plan (.github/workflows/tofu-plan.yml)
- -
- -
- -
- -
name: Tofu Plan
-
-
-
-on:
-
-  pull_request: # (1)
-
-    branches: ["main"]
-
-    paths: ["ch5/tofu/live/lambda-sample/**"]
-
-
-
-jobs:
-
-  plan:
-
-    name: "Tofu Plan"
-
-    runs-on: ubuntu-latest
-
-    permissions:
-
-      pull-requests: write # (2)
-
-      id-token: write
-
-      contents: read
-
-    steps:
-
-      - uses: actions/checkout@v2
-
-
-
-      - uses: aws-actions/configure-aws-credentials@v3
-
-        with:
-
-          # TODO: fill in your IAM role ARN!
-
-          role-to-assume: arn:aws:iam::111111111111:role/lambda-sample-plan # (3)
-
-          role-session-name: plan-${{ github.run_number }}-${{ github.actor }}
-
-          aws-region: us-east-2
-
-
-
-      - uses: opentofu/setup-opentofu@v1
-
-
-
-      - name: tofu plan # (4)
-
-        id: plan
-
-        working-directory: ch5/tofu/live/lambda-sample
-
-        run: |
-
-          tofu init -no-color -input=false
-
-          tofu plan -no-color -input=false -lock=false
-
-
-
-      - uses: peter-evans/create-or-update-comment@v4 # (5)
-
-        if: always()
-
-        env:
-
-          RESULT_EMOJI: ${{ steps.plan.outcome == 'success' && '✅' || '⚠️' }}
-
-        with:
-
-          issue-number: ${{ github.event.pull_request.number }}
-
-          body: |
-
-            ## ${{ env.RESULT_EMOJI }} `tofu plan` output
-
-            ```${{ steps.plan.outputs.stdout }}```
- -
- -
- -
- -
- -
- -

This workflow has a few things you haven’t seen before:

- -
- -
- -
    - -
  1. - -

    Instead of running on push, this workflow runs on pull requests. More specifically, only on pull requests against - -the main branch that have modifications to the ch5/tofu/live/lambda-sample folder. In a real-world pipeline, - -you may want to expand this to all modules in the tofu folder: e.g., ch5/tofu/live/**.

    - -
  2. - -
  3. - -

    Add the pull-request: write permission so in (5), the workflow can post a comment on your pull request.

    - -
  4. - -
  5. - -

    Assume the plan IAM role. Make sure to fill in your own IAM role ARN here from the lambda_deploy_plan_role_arn - -output variable you got in the last section.

    - -
  6. - -
  7. - -

    Run tofu init and tofu plan, passing a few flags to ensure the commands run well in a CI environment: i.e., - -disable terminal colors and interactive prompts. There’s also a flag to disable locking, as you don’t need that - -for plan.

    - -
  8. - -
  9. - -

    Use an open source workflow to post a comment on the pull request that contains the plan output. The comment is - -formatted in Markdown, which GitHub natively supports, and includes not only the plan output, but also a - -✅ or ⚠️ emoji to help you see at a glance if the plan command ran successfully or exited with an error, - -respectively. This allows your team members to review the code and plan output all in one place.

    - -
  10. - -
- -
- -
- -

Next, create a workflow for the apply portion in a new file called .github/workflows/tofu-apply.yml, with the - -contents shown in Example 106:

- -
- -
- -
Example 106. The workflow to run tofu apply (.github/workflows/tofu-apply.yml)
- -
- -
- -
- -
name: Tofu Apply
-
-on:
-
-  push: # (1)
-
-    branches: ["main"]
-
-    paths: ["ch5/tofu/live/lambda-sample/**"]
-
-jobs:
-
-  apply:
-
-    name: "Tofu Apply"
-
-    runs-on: ubuntu-latest
-
-    permissions:
-
-      pull-requests: write
-
-      id-token: write
-
-      contents: read
-
-    steps:
-
-      - uses: actions/checkout@v2
-
-
-
-      - uses: aws-actions/configure-aws-credentials@v3
-
-        with:
-
-          # TODO: fill in your IAM role ARN!
-
-          role-to-assume: arn:aws:iam::111111111111:role/lambda-sample-apply # (2)
-
-          role-session-name: apply-${{ github.run_number }}-${{ github.actor }}
-
-          aws-region: us-east-2
-
-
-
-      - uses: opentofu/setup-opentofu@v1
-
-
-
-      - name: tofu apply # (3)
-
-        id: apply
-
-        working-directory: ch5/tofu/live/lambda-sample
-
-        run: |
-
-          tofu init -no-color -input=false
-
-          tofu apply -no-color -input=false -lock-timeout=60m -auto-approve
-
-
-
-      - uses: jwalton/gh-find-current-pr@master # (4)
-
-        id: find_pr
-
-        with:
-
-          state: all
-
-
-
-      - uses: peter-evans/create-or-update-comment@v4 # (5)
-
-        if: steps.find_pr.outputs.number
-
-        env:
-
-          RESULT_EMOJI: ${{ steps.apply.outcome == 'success' && '✅' || '⚠️' }}
-
-        with:
-
-          issue-number: ${{ steps.find_pr.outputs.number }}
-
-          body: |
-
-            ## ${{ env.RESULT_EMOJI }} `tofu apply` output
-
-            ```${{ steps.apply.outputs.stdout }}```
- -
- -
- -
- -
- -
- -

This workflow is similar the one for plan, but with a few key differences:

- -
- -
- -
    - -
  1. - -

    Run only on pushes to the main branch that have modifications to the ch5/tofu/live/lambda-sample folder.

    - -
  2. - -
  3. - -

    Assume the apply IAM role. Make sure to fill in your own IAM role ARN here from the lambda_deploy_apply_role_arn - -output variable you got in the last section.

    - -
  4. - -
  5. - -

    Run tofu init and tofu apply, again passing a few flags to ensure the commands run well in a CI environment. - -Note also the use of the -lock-timeout=60m to ensure this command will wait up to 60 minutes if someone else has - -a lock (e.g., a concurrent apply being run by a previous merge).

    - -
  6. - -
  7. - -

    If this push came from a pull request, use an open source GitHub Action to find the ID of that pull request so that - -you can add the output of apply as a comment in (5).

    - -
  8. - -
  9. - -

    If the previous step found a pull request ID, post a comment to the pull request with the apply output. Again, - -this includes the ✅ or ⚠️ emoji to quickly let you know if apply succeeded, as well as the log output from - -apply in case you need to debug a problem.

    - -
  10. - -
- -
- -
- -

Commit these new workflow files directly to the main branch and then push them to GitHub:

- -
- -
- -
- -
$ git add .github/workflows
-
-$ git commit -m "Add plan and apply workflows"
-
-$ git push origin main
- -
- -
- -
- -

Now, let’s give this deployment pipeline a shot. First, create a new branch called deployment-pipeline-test:

- -
- -
- -
- -
$ git checkout -b deployment-pipeline-test
- -
- -
- -
- -

Make a change to the lambda-sample module, such as changing the text it returns, as shown in - -Example 107:

- -
- -
- -
Example 107. Update the Lambda function response text (ch5/tofu/live/lambda-sample/src/index.js)
- -
- -
- -
- -
exports.handler = (event, context, callback) => {
-
-  callback(null, {statusCode: 200, body: "Fundamentals of DevOps!"});
-
-};
- -
- -
- -
- -
- -
- -

And make sure to similarly update the assertion in the automated test in deploy.tftest.hcl, as shown in - -Example 108:

- -
- -
- -
Example 108. Update the Lambda module tests (ch5/tofu/live/lambda-sample/deploy.tftest.hcl)
- -
- -
- -
- -
  assert {
-
-    condition     = data.http.test_endpoint.response_body == "Fundamentals of DevOps!"
-
-    error_message = "Unexpected body: ${data.http.test_endpoint.response_body}"
-
-  }
- -
- -
- -
- -
- -
- -

Commit both of these changes, push them to the deployment-pipeline-test branch, open a pull request, and you should see - -a page that looks like Figure 60:

- -
- -
- -
- -The deployment pipeline running in a GitHub PR - -
- -
Figure 60. The deployment pipeline running in a GitHub PR
- -
- -
- -

You should see four things running in your pipeline:

- -
- -
- -
    - -
  • - -

    Automated tests for the sample app.

    - -
  • - -
  • - -

    Terrascan for your infrastructure code.

    - -
  • - -
  • - -

    Tofu test for your infrastructure code.

    - -
  • - -
  • - -

    tofu plan on the lambda-sample module.

    - -
  • - -
- -
- -
- -

When everything has finished, the PR should automatically be updated with a comment that shows the plan output, as - -shown in Figure 61:

- -
- -
- -
- -After opening the PR, the deployment pipeline will add a comment with the plan output - -
- -
Figure 61. After opening the PR, the deployment pipeline will add a comment with the plan output
- -
- -
- -

Now you can review the code changes and plan output, and if everything looks good, merge the PR. This will kick off - -the apply workflow, and after a minute or two, it should post a comment with the apply output, as shown in - -Figure 62:

- -
- -
- -
- -After merging the PR, the deployment pipeline will add a comment with the apply output - -
- -
Figure 62. After merging the PR, the deployment pipeline will add a comment with the apply output
- -
- -
- -

Congrats, you now have a basic deployment pipeline in place for your lambda-sample module! It runs tests, it runs - -plan, and it runs apply.

- -
- -
- - - - - - - - - - - -
- -
Tip
- -
- -
Get your hands dirty
- -
- -

Here are a few exercises you can try at home to get a better feel for deployment pipelines:

- -
- -
- -
    - -
  • - -

    Update the pipeline to automatically detect changes in an any folder with OpenTofu code (rather than only the - -lambda-sample folder), and to automatically run plan and apply in each one. The open source - -changed-files action can be helpful here.

    - -
  • - -
  • - -

    If a pull request updates multiple folders with OpenTofu code, have the pipeline run plan and apply across - -multiple folders concurrently by using a - -matrix strategy.

    - -
  • - -
- -
- -
- -
- -
- -
- -

Deployment pipeline best practices

- -
- -

Now that you’ve seen the basics of deployment pipelines, and an example of how to implement one, let’s go through the - -best practices for deployment pipelines:

- -
- -
- -
- -
Automate all the steps that can be automated
- -
- -

Every deployment pipeline includes steps that must be done by humans, such as writing code, reviewing code, and - -perhaps manual testing and verification. All the other steps should be completely automated. Remember, it’s only - -continuous delivery if it is fast, reliable, and sustainable. These three things are precisely where computers excel - -over humans: whereas humans are slow at performing a bunch of steps, computers can run automated processes extremely - -quickly; whereas humans make mistakes all the time while running manual processes, computers carry out automated - -processes in a way that is predictable and repeatable; and whereas humans can get frustrated from repeating the same - -steps over and over again (especially if those steps sometimes cause an outage), computers never get tired or - -stressed.

- -
- -
Deploy only from a deployment server
- -
- -

Not only should most of your deployment pipeline be automated, but in most cases, all of that automation should only - -run on a dedicated deployment server and not any developer’s computer. In most cases, the deployment server is - -your CI server (e.g., GitHub Actions, GitLab, Jenkins), but for some types of pipelines, you may have separate, - -dedicated deployment tools (e.g., ArgoCD in a Kubernetes Cluster, HashiCorp Cloud Platform, Atlantis, etc.). Here’s - -why:

- -
- -
- -
Full automation
- -
- -

One of the benefits of forcing the deployment pipeline to run entirely in a deployment server is - -that it forces you to fully automate everything that can be automated. There is a surprisingly big gap between a - -pipeline that is mostly automated, but still requires a few manual steps here and there, and one that is fully - -automated: if your pipeline relies on even a few manual steps, it can dramatically reduce the effectiveness of your - -ability to deliver software.

- -
- -

Something magical happens when you get to full automation: it’s only when the whole pipeline runs from pushing a single - -button, that you get a CD pipeline that is fast, reliable, and sustainable; that you have environments that are truly - -reproducible; that you can achieve world-class results like the companies mentioned in Section 1.1, who - -are able to deploy thousands of times per day.

- -
- -
- -
Repeatability
- -
- -

If developers run deployments from their own computers, you’ll run into problems due to - -differences in how their computers are configured: for example, different operating systems, different dependency - -versions (e.g., different versions of OpenTofu or Node.js installed locally), different configurations, and - -differences in what’s actually being deployed (e.g., the developer accidentally deploys a change that wasn’t - -committed to version control). You can eliminate all of these issues by deploying everything from a dedicated - -deployment server that provides a consistent, repeatable environment.

- -
- -
Permissions management
- -
- -

Instead of giving developers permissions to deploy, you can give solely the deployment - -server those permissions (especially for the production environment). It’s easier to enforce good security - -practices for a single server than it is to do for numerous developers with production access.

- -
- -
- -
- -
- -
Protect the deployment server
- -
- -

To be able to do automated deployments from a server, you have to give the server access to sensitive permissions, - -such as AWS credentials. In fact, to deploy arbitrary infrastructure changes—e.g., to be able to run tofu apply on - -arbitrary OpenTofu modules—you need arbitrary permissions, which is just a fun way of saying "admin permissions." So - -deployment servers are a terrifying combination of (a) access to powerful, sensitive permissions, (b) accessible to - -every developer in your company, and (c) designed to execute arbitrary code. This is why deployment servers are - -particularly - -tempting - -targets for malicious actors.

- -
- -

Here are a few things you can do to protect your deployment server:

- -
- -
- -
- -
Lock down your deployment server
- -
- -

Make it accessible solely over HTTPs, require all users to be authenticated, - -ensure all actions are logged, and so on. If possible, don’t even allow the deployment server to be accessed over the - -public Internet: e.g., lock it down so you can only access it from your company’s offices or over a VPN connection. - -You’ll learn more about networking in Part 7 and security functionality such as HTTPS and - -authentication in Part 8.

- -
- -
Lock down your version control system
- -
- -

Since deployment servers typically execute workflows and code in your version - -control system, if an attacker can slip malicious code into one of your repos, they can bypass most other protections. - -Therefore, it’s critical that you protect your VCS, as described in Section 4.1.5.5.

- -
- -
Enforce an approval workflow
- -
- -

Configure your deployment pipeline to require that every deployment is approved by at - -least one person other than the person who requested the deployment in the first place. This ensures that if one - -developer account is compromised, you always have a second set of eyes to hopefully catch malicious code before it - -can take effect.

- -
- -
Limit permissions before approval/merge
- -
- -

A common workflow to have in an infrastructure deployment pipeline is to - -run plan when you open a PR and to run apply after the PR has been approved and merged. One thing you have to be - -careful about is that the permissions you grant to the plan and apply steps: the plan step should only have - -access to read permissions; the apply step should have access to both read and write permissions. If you use the - -same set of permissions for both, then a malicious actor could open a PR that immediately uses the write permissions - -to make whatever changes they want—bypassing all approval workflows.

- -
- -
Don’t give the deployment server long-lived credentials
- -
- -

Whenever possible, use automatically-managed, short-lived - -credentials (e.g., OIDC) instead of manually-managed, long-lived credentials (e.g., machine user access keys). That - -way, if a malicious actor does manage to get access to those credentials, there is a short time window during which - -they can use them, and then they expire.

- -
- -
Limit the permissions of each pipeline
- -
- -

Instead of a single deployment pipeline that deploys arbitrary - -code, and therefore needs arbitrary (admin) permissions, create multiple pipelines, each of which is designed for - -specific tasks. You might partition your pipelines based on the type of task (e.g., deploy Kubernetes apps, - -databases, networking) or by team (e.g., search team, analytics team, networking team), and the idea is to grant each - -pipeline a limited set of permissions it needs for that set of tasks. You can also restrict access to each pipeline - -so only the developers who need to use it have access to it. This limits the damage an attacker can do from - -compromising any single developer account or pipeline.

- -
- -
Limit what the pipeline can do with its permissions
- -
- -

In addition to limiting the permissions you grant to - -each pipeline, you can also limit what developers can do with those permissions. For example, you might not want - -developers to be able to execute arbitrary code in pipelines that have access to powerful permissions, so you might - -put in checks that developers can only run specific commands (e.g., tofu apply), on code from specific repos - -(e.g., repos where your team keeps it’s OpenTofu modules), on specific branches (e.g., main), and in specific - -folders (e.g., search team members can only make changes in the search folder). You should also lock down the - -workflow definitions themselves, so only a trusted set of admins can update them, and only with PR approval from at - -least one other admin.[32]

- -
- -
- -
- -
- -
- -
- -
- -

Setting up a deployment pipeline the right way is a lot of work: this shouldn’t be too surprising, as what you’re - -effectively trying to do is to capture your company’s processes, rules, and culture in the form of Bash scripts and - -YAML workflow files. That isn’t easy. But it’s worth it. Think of it this way: your infrastructure code (which you - -learned about in Part 2) and your CI / CD pipeline (which you learned about in this - -blog post) are essentially your company’s custom API for shipping software. Get the API right, and as - -you saw in Part 1, you can accelerate your company by a factor of 10x, 100x, or more.

- -
- -
- -
- -
- -
- -

Conclusion

- -
- -

In this blog post and the previous one, you made great strides in automating your entire SDLC through - -the use of CI/CD, allowing your team to work and collaborate as per the 5 key takeaways from this chapter:

- -
- -
- -
    - -
  • - -

    Ensure all developers merge all their work together on a regular basis: typically daily or multiple times per day.

    - -
  • - -
  • - -

    Use a self-testing build after every commit to ensure your code is always in a working and deployable state.

    - -
  • - -
  • - -

    Use branch by abstraction and feature toggles to make large-scale changes while still merging your work on a regular - -basis.

    - -
  • - -
  • - -

    Use machine user credentials or automatically-provisioned credentials to authenticate from a CI server or other - -automations.

    - -
  • - -
  • - -

    Ensure you can deploy to production at any time in a manner that is fast, reliable, and sustainable.

    - -
  • - -
- -
- -
- -

Virtually every company that has a world-class software delivery process, as the ones you heard about in - -Section 1.1, relies heavily on CI/CD to allow them to go fast. This is one of the surprising realizations - -of real-world systems: agility requires safety. With cars, speed limits are determined not by the limits - -of engines—most cars can easily go over 100 mph—but by safety, where the safety mechanisms we have today, such as brakes, - -bumpers, and seat belts, are just not sufficient to protect you at speeds significantly over 60 mph.

- -
- -
- -

The same is true with software delivery: the limit of how fast you can build software is usually not determined by how - -fast a developer can build new features, but by how quickly you can get those features to your users without causing - -bugs, outages, security incidents, and other problems. That’s why CI/CD is all about putting safety mechanisms in - -place, such as automated tests, code reviews, and feature toggles, so that you can release software faster without - -putting your product and users at risk. The more you can limit the risk—the safer you can make it for developers to - -release features—the faster you can go.

- -
- -
- -

As your company grows, you’re going to start to hitting new bottlenecks that limit your ability to go fast. Some of - -these bottlenecks will be from forces outside your company: more users, more load, more money, more requirements. Some - -of these bottlenecks will be from forces within your company: more products, more teams, more developers. To be able to - -handle these new demands, you will need to learn how to work with multiple environments and multiple teams, which is - -the focus of Part 6.

- -
- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/07.html b/docs/07.html deleted file mode 100644 index 3721a70..0000000 --- a/docs/07.html +++ /dev/null @@ -1,986 +0,0 @@ - - - - - - - - - - - - - - -Part 6. How to Work with Multiple Teams and Environments - - - - - - - - - - - - - -
-
- -
- -
-
- -

Part 6. How to Work with Multiple Teams and Environments

- -
- -
- -

TODO

- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/08.html b/docs/08.html deleted file mode 100644 index 08dbbc9..0000000 --- a/docs/08.html +++ /dev/null @@ -1,986 +0,0 @@ - - - - - - - - - - - - - - -Part 7. How to Set Up Networking: VPCs, VPN, and DNS - - - - - - - - - - - - - -
-
- -
- -
-
- -

Part 7. How to Set Up Networking: VPCs, VPN, and DNS

- -
- -
- -

TODO

- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/09.html b/docs/09.html deleted file mode 100644 index dcc94c5..0000000 --- a/docs/09.html +++ /dev/null @@ -1,986 +0,0 @@ - - - - - - - - - - - - - - -Part 8. How to Manage Authentication, Authorization, and Secrets - - - - - - - - - - - - - -
-
- -
- -
-
- -

Part 8. How to Manage Authentication, Authorization, and Secrets

- -
- -
- -

TODO

- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/10.html b/docs/10.html deleted file mode 100644 index 28aee20..0000000 --- a/docs/10.html +++ /dev/null @@ -1,986 +0,0 @@ - - - - - - - - - - - - - - -Part 9. How to Store Data: SQL, NoSQL, Queues, Warehouses, and File Stores - - - - - - - - - - - - - -
-
- -
- -
-
- -

Part 9. How to Store Data: SQL, NoSQL, Queues, Warehouses, and File Stores

- -
- -
- -

TODO

- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/11.html b/docs/11.html deleted file mode 100644 index 8cbb88f..0000000 --- a/docs/11.html +++ /dev/null @@ -1,986 +0,0 @@ - - - - - - - - - - - - - - -Part 10. How to Monitor Your Systems: Metrics, Logs, Alerts, and Observability - - - - - - - - - - - - - -
-
- -
- -
-
- -

Part 10. How to Monitor Your Systems: Metrics, Logs, Alerts, and Observability

- -
- -
- -

TODO

- -
- -
- -
- -
- - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/12.html b/docs/12.html deleted file mode 100644 index 295549f..0000000 --- a/docs/12.html +++ /dev/null @@ -1,988 +0,0 @@ - - - - - - - - - - - - - - -Part 11. The Future of DevOps and Software Delivery - - - - - - - - - - - - - -
- -
- -
-
- -

Part 11. The Future of DevOps and Software Delivery

- -
- -
- -

TODO

- -
- -
- -
- - - - - - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/13-footnotes.html b/docs/13-footnotes.html deleted file mode 100644 index 73e61e8..0000000 --- a/docs/13-footnotes.html +++ /dev/null @@ -1,1147 +0,0 @@ - - - - - - - - - - - - - - -Footnotes - - - - - - - - - - - - - -
-
- -
- -
-
-

Footnotes

-
- -
- -
- -1. The 2023 State of DevOps Report does not publish the raw data, but only summaries of the results, so the values in the "elite vs low performance" column are estimated. For example, the report says that the deployment frequency for elite companies is "on-demand (multiple deploys per day)": I’m assuming this is 2-10 deploys per day, so with 5 working days per week, and 4 working weeks per month, this works out to 40-200 deploys per month. The report says that the deployment frequency for low companies is "between once per week and once per month": with 4 working weeks per month, this works out to 1-4 deploys per month. So the difference is 10x at the low end and 200x at the high end. - -
- -
- -2. From The DevOps Handbook: How to Create World-Class Agility, Reliability, & Security in Technology Organizations (IT Revolution Press, 2016) by Gene Kim, Jez Humble, Patrick Debois, and John Willis. - -
- -
- -3. The Standish Group, "CHAOS Manifesto 2013: Think Big, Act Small," 2013, https://www.standishgroup.com/sample_research_files/CM2013-8+9.pdf. - -
- -
- -4. Dan Milstein, "How to Survive a Ground-Up Rewrite Without Losing Your Sanity," OnStartups.com, April 8, 2013, https://www.onstartups.com/tabid/3339/bid/97052/How-To-Survive-a-Ground-Up-Rewrite-Without-Losing-Your-Sanity.aspx. - -
- -
- -5. The loopback network interface is typically 127.0.0.1: you can try out http://127.0.0.1:8080 in your browser and it should give the same "Hello, World!" response - -
- -
- -6. One exception to this rule is to temporarily expose an app on your computer to a trusted 3rd party (typically, a coworker) for feedback: e.g., you’ve built something really cool and you want to quickly send a link to one of your colleagues so they can check it out. In that case, you can use tunneling tools to get a temporary, randomly-generated URL for testing: e.g., see localtunnel, ngrok, localhost.run, and btunnel. These are great for quick internal tests, but do not use these to share your app with the whole world. - -
- -
- -7. See https://fortune.com/longform/amazon-web-services-ceo-adam-selipsky-cloud-computing/ for a more complete overview of the history of AWS. - -
- -
- -8. See Basecamp for an example: https://basecamp.com/cloud-exit. - -
- -
- -9. The first PaaS, Zimki, was actually created by Canon (the camera company) in 2006, but shut down just a year later: https://www.porter.run/blog/history-of-paas-how-canon-almost-became-a-major-cloud-provider. - -
- -
- -10. I’m assuming that you’re running the examples in this blog post series in an AWS account dedicated solely to learning and testing so that the broad permissions of the AdministratorAccess Managed Policy are not a big risk. - -
- -
- -11. This is where the term bus factor comes from: your team’s bus factor is the number of people you can lose (e.g., because they got hit by a bus, or perhaps something less dramatic, like they changed jobs) before you can no longer operate your business. You never want to have a bus factor of 1. - -
- -
- -12. On most modern operating systems, code runs in one of two "spaces": kernel space or user space. Code running in kernel space has direct, unrestricted access to all of the hardware. There are no security restrictions (i.e., you can execute any CPU instruction, access any part of the hard drive, write to any address in memory) or safety restrictions (e.g., a crash in kernel space will typically crash the entire computer), so kernel space is generally reserved for the lowest-level, most trusted functions of the OS (typically called the kernel). Code running in user space does not have any direct access to the hardware and must use APIs exposed by the OS kernel instead. These APIs can enforce security restrictions (e.g., user permissions) and safety (e.g., a crash in a user space app typically affects only that app), so just about all application code runs in user space. - -
- -
- -13. As a general rule, containers provide isolation that’s good enough to run your own code, but if you need to run third-party code (e.g., you’re building your own cloud provider) that might actively be performing malicious actions, you’ll want the increased isolation guarantees of a VM. - -
- -
- -14. You can learn more about AWS regions and Availability Zones on the AWS website. - -
- - - - - -
- -17. This was actually one of the driving factors in the early days of container orchestration: huge companies such as Google found that, with server and VM orchestration, where each app gets its own cluster of servers, you’d have to provision enough servers to handle peak load, but when load was not at peak (as is the case most of the time), most servers sit completely idle. One of the big benefits of container orchestration was that it allowed running multiple containers on each server, and moving them around quickly, so all your servers could act as one big pool of resources, which allowed those companies to make much more efficient use of their computing resources. - -
- -
- -18. Kubernetes supports other types of Services as well. See the documentation for details. - -
- -
- -19. For example, as of 2024, AWS Lambda costs $0.0000166667 for every GB-second of execution, plus $0.20 per 1M requests, with a free tier that includes 400,000 GB-seconds and one million free requests per month. If you built an app that processed three million requests per month, and this app ran on a Lambda function that used 1536 MB of memory and had an average function execution duration of 120 ms, the total cost would be less than $3 per month. See Lambda pricing for more details. - -
- -
- -20. Kubernetes Deployments support rolling and canary deployments natively. Several popular tools in the Kubernetes ecosystem support blue-green deployments, such as Argo Rollouts. - -
- -
- -21. This is true up to a point. For example, AWS Lambda has concurrency limits, and if you have enough load to exceed them, you may have to configure concurrency controls to avoid being throttled. - -
- -
- -22. Lambda functions can use the Invoke API to trigger other functions, but this is typically considered an anti-pattern. The more common approach is to use an event-driven architecture where one Lambda function performs an action—e.g., put a message in a queue, write a file to a file store, etc.—which, in turn, triggers another Lambda function asynchronously. - -
- -
- -23. For example, it’s easy to launch an ASG with 5 EC2 instances, and to have an EBS Volume—a network-attached hard drive you’ll learn more about in Part 9—attached to each one. However, when you roll out a new change with instance refresh, you’ll end up with 5 new EC2 instances, and 5 new EBS Volumes attached, so any data they had before is not carried over. - -
- -
- -24. This method of calculating commit IDs is very clever. First, it ensures that commit IDs are consistent without the need for any central mechanism for issuing IDs: the same commit done on any computer. anywhere in the world, at any time always gets the exact same ID. Second, it ensures commits can’t be tampered with: change even 1 bit of the contents or metadata or history, and you get a totally different SHA-1 hash. Third, it gives you a very efficient way to compare commits. In part, this is because you can compare commits using just the IDs, without having to send the full contents. But even more interesting is that you can compare the full history just by comparing IDs. That’s because the commit ID calculation includes the ID of the previous commit, which, in turn, included the ID of its predecessor, and so on, so two commit IDs are only equal if their entire history is equal. - -
- -
- -25. One study of code reviews found that they can catch 55%-60% of bugs, which is a higher rate than even automated testing ("Software Defect-Removal Efficiency" by Capers Jones, IEEE Computer, April 1996). Another study found code reviews could reduce error rates by over 80% (Handbook of Walkthroughs, Inspections, and Technical Reviews: Evaluating Programs, Projects, and Products by Daniel P. Freedman and Gerald M. Weinberg, Dorset House). - -
- -
- -26. Unit tests for application code are typically fast. Unit tests for infrastructure code are typically moderate, at best. - -
- -
- -27. "ISS Configuration." Wikipedia, The Free Encyclopedia, December 12, 2022. https://commons.wikimedia.org/wiki/File:ISS_configuration_2022-12_en.svg - -
- -
- -28. You can also update batches of servers instead of just one at a time: e.g., if you have 50 servers to update, you might take 5 down at a time, boot up 5 new ones, and when they are healthy, repeat with the next batch of 5, until all 50 are replaced. - -
- - - -
- -30. See Data Driven Products Now! by Dan McKinley for a great write-up on how data-driven product development works. - -
- -
- -31. For an example of a full-featured deployment pipeline that implements most of this functionality out-of-the-box, see Gruntwork Pipelines. - -
- -
- -32. For example, see GitHub’s push rulesets for a way to lock down who can edit specific file paths in a repo. - -
- -
- -
-
- - - -
-
-
- - - - - - - - - \ No newline at end of file diff --git a/docs/images/ch1/architecture-evolution-1.png b/docs/images/ch1/architecture-evolution-1.png deleted file mode 100644 index d4f5fc24ebf82c3ea9ded78d6e17ced7f427ac62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9736 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—p78E8FN4o@3QFl|qmTA{pB4hN<9TXlonK2gB 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 diff --git a/docs/images/ch1/architecture-evolution-4.png b/docs/images/ch1/architecture-evolution-4.png deleted file mode 100644 index 76e8ff3e40fb00265fca6f2d5bac447397d8a0b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81139 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
7=IC1C#M0;r8;7w@vD@46$7t31WBX>~T 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 uKT9e!NHVboyd-s??`zS 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

x&z-3# zl#&E`@wu~CZD3)jmnlHBy0@#QQao9KgXepULUe#ljk*?Ns;E{f=WF@sERyRV`~#aQ zsx0rjStG_O1>~F(MpbG;L)zMhU+3xt@md z9$}Dt-{f>{5X|VhoR?ERN$YgTm&;DwZrM_BeFIO0a64qK^E9^Lqbs~iCFZ1nXVPEn zz&}~iaGbU|9S#dMZzu7*cKo+xNN@Ygfn;k zU;5OPC|jS;p=+E3O@J}TNugCmHMR;SG4PJgcZ^RXqkoCN zPjuD29t#7ko$Ew%3y20=<-_9hGfpejn&PCGs=yL3N<{Na7*lx|q%}H+r&CI&1wsW< z5_TpXK`4P}*X8lDjdS7x2Z2zRI{n8e8sBasCvBhW**{M*{H!$I1?Nx*a)(~l^MUvL zmwOUnn9hgt!C0TyO80O6oDOZmz&QiuM}cjAJ@*M)rrjX7)(X6ePRrIUbv?$g(^wCM z2L8i+waZ^~x+v4uPe%}Q2UNGzppeoTZ7Gt{{(hT~Em$#8vXLx02GE*pP$To&uKm5# zrC({?wlqbtVJ3+6Lsq{MFbr5$8uYLQKd zU^`ue4%TH=zqi$1{KVwsubrzVg=J{t!rMWjrnhyV9@xb4~P-6O?t1jQvzr0)qp8nHLi1uJcs9xuJ|jHEuc{8;q(!z$@4PYl8q~6rHFQ&N_up*Y z-B>Z!mkocR3{u-2;QFRV7|ONtq`O0KqghJ9(yg5*!RH#YpdyA+k-5-)&nf`0CS!*U ziRJSooj=W839F(#|N5VpOS9Y>H+G%QL7>|;t>S;!482AaIW)7Gg0I#X*Fl$LMqTjr zb}UnI>LI9lF>QZrOfvWTQ@*!wr{{6k+9fh}2Ch=vo&9n*cV0LE#b}^?w*3i=$O99M zNCM;Ju*VK0S@uPNMqcyIBA_}JNGFGw5RWr&+}s|Zb>Z15QlFkHGt!J!nCNB`3z{fX z8;y1Q`vrSg4x4^T^Q!xN#6=x)In4oAW~Y+?Ad%SFf_p(#SWRN;PtcBMyXcvx?j-m= zvh6nbw6RDGd)g)V(oAeUT|ZUO{u>RrP3O!nQSDa)-~Ha)ov|SysoT{wXHOGY=5C2# zo9?$av*_25?bMIITZmy0B~(ERVatA_+&dE6l?>Hdnd@Wy^Oc9eoEGgKFi71xOx3Qx zkIm$HD!r7`6zBOtaxhPpIW*SX11PSbdaid}4)d0;l)aV%z0bcq3`+U<1y@QO0+kB7 z@;M*2x>-#JJ-7H3I#WA$`yCplCdJ#M|Mj@|;K){-8#Au`-H$~`@h3sX6mZ1$SXlz0 zgdwM$UelJ`)nRr3m?%tpLi#5V`0|tk;sz9eW)dY$D^aw+^fYtRN5 zSVa6G$u6C^N5!49Op?T&XzMjXFrhTFBz_s=~uvKfn z!+}Pwe^($p=N_1-p~QJ9GJJw&Q0*lA4gSx-a&W->_%3Gz|G&kt%1o5HJ*i~-YH#X9 z(e@Fsn2us@b|m5{F`UJ6au=Eo+x7~DuPZe$AyaG*rEd=&_7ShD?g5NyCx`?06xnlQ zxV5zvvHJ4r2C)A-_L+XUZ+v%?acTea{%}hFIlR*mzvObkeGKlveiJ3#T&+6&NJZJbYaU zX})#={YLMND7ra*BnH4H+ncL%C}>d-`-UdU0Ia{Dqhgz?KxX4moQ_cR7aEdKtW}hD zyD*R(4UOtlO;OI^=4w-B7_-IX) zB|xG3tZN_cARfr-P1ymElGgw@;oH0hR&g+(_Of)c4umyamnWaIl$w*~-@%=a)>QUJ zs9u4Yc<-KC;ck~@;pK)LU?wGpkIv~%q9xgJGZe_+SKdcrOEC6qu^oRi+dV)Ilt`HN7OKImLgPw$bX2w z_OK@vV)2U=+Y$~fXB|lqz3ExcG^4ZD)io`Wb;U>FV}B-;*kNk4AIp>uBvOqrn*yCR zH+*Nu_1_rW`>^uFJ*ygP6Ld}(7kwkt8sU~7 ze@;j--~#Y9Z=2Flimn-rCtYlKlzbj+3uAD;sM7cM71X_tZceM~E#tg>%GKkHx`6&`!qA5WGR_zd*amDEck~$d`x^r38lA&UEwWtUKZsBG z!Lc|b(0gGAcF6JwSvsgz@B=H^cK=v}C(EJ2K8G+7%$??5Kzh-2YRq>sVxtusDfs#R zi`Fm3il|C7w35{(5i7;f;Xv%-+oFMAY9v!3G^HJsWzQydG8c0qAt0pEm&_&h4+FJ)kU zOaf2&m*?YI23RAOz;(^IpV}Wh{CTA*SK7AOI0s|FH|}B^**3Y9gTc3#%NFT!iAs&? z-(tf^#q>cwumruDd@i$VyU6p|B*w-W1}XWWcs|8+B#IuBF5ezlT6fpnOR6pU1qRb& zLmp>EvSU>+Y1}m-r7bI%QiTU(|AnW%#1S9gxT^w927SS&Yr=O9}wdrWmSD3nCB!R=1Djz)-QfF>%*H1smQfk|6Vz|iX*p&Wb3`!PoM z-2(3=*xa1yW{8@f#oQ6Sr6O%k^2$+?4LbI{BU1eD_~^?ky#Zq9sI+pxlx+a``6jB| z2@-)zp*%dQNra&Gu|-Dh9|>**Sxx*C%bn-rRCb4Y5Gsi*l%bRR zHp4neISl^zk-?*$ia2`bjrJd3S?QsK&!|o1ikV+VrlFfi zy+1R?T`O#PScwqATLsi2y%@iS-vkk`dfDf1G0|8j=kDn?uEbnyRvLk`U zgiE~;5sKJ)&v^VTXoCV8AYwGbo*6sLk>&f{ay+pm%qm41V}urXg=ze2B30(i&kOcE1~&J^mOcZ&%^ke z!J&6K8j9{X!P~N$0tt32XfEa0{hGdhu0rpbuJ0(z=Q+$XXWt3yAt^S3YGrul(@@!L zCR1vYvdmp13@{@lOU=I)>0c#~M)T{DnE&=vh|ZGsUb$orcw!q{*KAmb^UFZdF?21q z=V7t#!A;YoHe}_BdtE{ZYB5x56DR=AO(zwm2XKb;_}^hUMih^7HFJK>(;)5bQ6=4~ z!^{~DVzCQ)E!pG?eRQy0J{E5G&yBg3nU}u)2IcUICyHdN{)((zRzIjd{mecdH)p$) zBX+FPJfV)A4zp9wK7Z?4+jE@pn_n9(0mETZu}_9#;%3DBI6p`-)14}%?ILZ#*KL1# zpHhZ&qti_BM=xJZ#Dgp&3T23dR?Ba9H?xTOU&nSKhhCMxBU71V_jSsNKEl9_+y{?x0G@DiZW07LnKUcXVt z5V_hrZ}!!tSpjPJ6PWE3rYJ*U0#*%sc0k4Kx*nX z5WJ~#NXpgod*3?e#4Vzt8!h`Rko7j(_Z=#CL7&BwQ@q!KUYlGG{V5&e_ghgjw_W&V z;WL{7{H*P+$Q2Cww)<^~CR6V~Icu1X+z254o!$e#8whlEFOO6S*=3mVO2 zohrx{K#Pau{69f|hv%^&SvDhrgAxCR9jUlAWioEcm<32w=>!1sn{Yp@6Ec)7o$7|N?0Q~zulgvE zyUo7N8Uze<6yO|qU>&tR=iNeD{+styr$i6DaSOQtfxN@gb#V^6$wqte?-LaC!$#nXJEHyJv)89 z!aGbKPgH1@AyM>nUH8Gh;pK@Hi+mCH&_pU^BpQoMHA^}2yZ{TYFpy>5;GEqhGZJg! z^{prifnv>5fHlRNyAwD|#Nkx!7_uIeQ-Sy)%kvr7noz8%DkD@xT7&i-yDfQUS8`sT z*N{CM(|>bxe+*DKRi5&$fXxM{JEe+XE2rUi*AcJA3DUf zCvg+RwW3_8)zRG>?SX~s4y=Ty%I%1hHmH&a@PrQeSTn+WhmF!w?3bE5y>pNi0XUTZ+xM5-VLs9^^+&4X#j6F4O)JEcyGsUsFmNey_M!sVLNX z4zn*RYkX5X+nILYFQSyMy=Jl3^)2_4O5`MRdl_1y7~W5a_o(DvZko9oDi={d6wh^Y z@6SnMBs0zg5dnLa zBxAc!=IKKfa#2qBM(_Y{)qC_YmWUD{CR&e|`^QsoKks@aw&6f>lHsR~W8LI#uov!KZdbBFK97mg(b9!&_Bq&cX^Zi?K0!>xhQQZLTHG2@7@u)k?25e z+bV9>5=fmX$*;__c{;B*KU$1~YRC|2C>zR8o-g_QJ>7WOp%5_yHBo8`4`lmA6Z$?? z^g+I2AuN@3?KD0=P(zVnXx)x+UOlg|qL?fNQnGadcW0W=$|DQ5b1;K5z}#e@H9gT; zUztM^3UH+WA?VC>9MxXAVW3b&T}NU_BX<+Oll%KIo?F}~5sU>_C5bbhAR!VDh6x>f z3;3L8IaWgA;PD`0@$A1#hMD)XaFnSECi77Lo&^5U7`axk#HNmx{X|YymKRBkcL9Bb zEdClA!++@iScvu92=4*6QvFXT7ab*T3@nWhJx-z4aBf%_Ldx-X&hc4Q(h)U}QkP<5v(76r_-SkBS6KhD z&{CG-=Mxu;A?jDtz4{mqA85gT=gCBrWxkKh_LdaG9=w6C+NyS_#3SgOSg~B08#!WA ztzVM~>MIy4DY4uTW3cAL25fM_?_G7iMg2rMUV53b!j_+UTU7Z(vt{zO#t42zt9Y|V z+due2T90bCjcJpHx=p!DEE;iDLO1xx?Vv2;%n2nva8ycedaYoRO~gNm!-aRh%w1J2 z(B|N?eAM;(=|dPKqv~S1R}33eM4#R~ve)8vP!W3=6GdE%a~5wm{1gXIS6Z{YiY$U9 zcgAvNP8#V3SYCwKwrSl7j0sH3icQUk{O2CcFX+!SYlRzvaTmKN_3_~76}+pd@@=i*V5N@siQA2z zW3gb*J8D{*WI(0DutP;ER1DJEFPE3yttasso`vAf7fp>!OsxsmY1dsJuh$UEwi4_m zMW_lG>*nT5$_qq;7G>l+rX#mG1=HxOBrNiAG#30>YI z#T3NX_s-q+x|&61E;L!tZCg|$* zsu#*JTxe~bR%{Pd2~n~Q-WK+h{IftK<=5n{c^=i5+3AmSFC(Ry=^aDbM!W6{$Lo-m zI5xZ3#%4nXoL_(}`|Xl`qSA@5=ga_IWwy6Naog#4ehGt|!E4vi{ki7q;rW>gcY~UH zx8moBW~=HD@8%xf!eHqk-m2BsW^&4X4?TC)y4A&+eaO;-^P7PdpL|pn@}nHQ?ou#F|4bv{uRe}y54%YHX9AdH==pMQ9Lt*}E9Qw_qvREW3}?R(5~=p7 znT5Gt4*18yqe$cE91OK0$@}0O-~Ns=i`R%DIn{M6&j&gZ)@G^i`L?@MM7z@HO@(qum0t;8gxJj0xutqUfx2{A%6{w0PWQShTg(pCZXNY(k~TD5pO{Ww z>)7Kf!GWhxj`FivzF2c50R<**%%&7lLPi`-IxKY~WQ*6(J#^f~dUA3?X+4IDqLsY& znSZIdI1wN2nq`cCCHN|-r%<32{`4(Pmenz_s}S@`BwD{xL@@t0?NDe%i*M8_-Rmbf zcwe`*AYXn@EXpU1F{x2=u-S_7o;AVw>2|QIOog_NzplvFI^9$cRD$^97y&f76z*y&Woq1{I_D{7k+utm-Lf|9yNMv|2FvTBCA;*U=Z@1 z2Ma4N!Lj3N0)JAO1Xt?LbW4sk$GO$H}j^w25NHN6sByLF>#Rxc9>z$VIX#$e#xSpTH3_TQ{WX z(}W^5^f~u2se<%;4+_MSKLl@_`vb!NR(;R+QZr-`$A{VFJ=x$mpU>X&8aJ)ixM=IA zNY5oMevcWbn5Zy9JjVzs+8Td8mu%S(jdMKDmv-e7l5xc(dZogk9d{qG2wB^3#v_e1a*74Sjm`S{sB}J*sg$N>Ddf1l3oPvdc z+Jc<;L9J(TpR-1pG`Tn%P+%w)RnC9*GAcd@DskYzrR|YMLuDca^_-WP>O|eIJn&e) zBj9dKRdT4D58oJ{+nLVy^Hp-oJ7e~QiET1#ec&uEdct7H7!GNSWX7Bqp+mo`qsG&t z<5F4tUxZ)f+PtcFq;TQ*B=23f%Odc4JSD7U5M75O> zGO}!lV#GXC7=;CSZ!7cu95XWr#COt53D$DP-?Cr|b=khLmbXWVbLe?=UH&Jy;|H4^8O6^ z<<8bNLE%c1TI6kh;9Jq30iQN|m+qZ1d^(ej?7|*MW|Vnnij?wN{twCPQv#o1UbZ9p zzee%De*ORXIxyOYV6@Io|MOG+d(Z#8;v#+uEg+GVSiCzk{{L?Uw-M^>{vW{f|Ncug z7CbWPXmfx5?+^T+S1?H4z5jUuCiZ{6GD=n*+?fxUKeWL_{=c956!V7he#hVtrQqdr QH1MaUq^(#h|1#|V12G3S^8f$< diff --git a/docs/images/ch1/architecture-evolution-6.png b/docs/images/ch1/architecture-evolution-6.png deleted file mode 100644 index 82e297c12e218ecee052f8cb6aafc379d573c579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152811 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

K8D~+{*99V*FgTw{@)K}e=t>K32ChVUn4i* cAvsav_GAp;ysG7N3H;O6xT9XFdN=g{2Q}gqr2qf` diff --git a/docs/images/ch1/architecture-evolution-7.png b/docs/images/ch1/architecture-evolution-7.png deleted file mode 100644 index e6a79db2bbc659a3c1e87ffc53997e17d99ecdfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172292 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%0Awtw*jSRb)BGFr7 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çT?9SR;Q6D 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 diff --git a/docs/images/ch1/architecture-evolution-8.png b/docs/images/ch1/architecture-evolution-8.png deleted file mode 100644 index 026ca1b34c89ef35d90e138c823b1fa3fc6b48c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212365 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 YP^;{dF3kGS7zc2e;LQwwHE@dj7Xg>%;s5{u diff --git a/docs/images/ch1/architecture-evolution-9.png b/docs/images/ch1/architecture-evolution-9.png deleted file mode 100644 index ae6471d3c8dda10ebeb241910c71ab53cc17f7af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 400512 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 g}-p9yXj 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

r+ODxQ=uBP|dsq0mzNf)-b*n!G}>XJxn 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ⓈjDWywdYjkcr9HYO`G5 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 n{zGW|J@Nl#_`lia6>*eU)QR=jw=*CX=bDz - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/images/ch1/architecture-evolution-stage-1.png b/docs/images/ch1/architecture-evolution-stage-1.png deleted file mode 100644 index 70c62a59fec807dd3e6dce9de46ed782813d4ba3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78007 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

mqa;C2AlFYVzvMYMn4-Stj+ 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 diff --git a/docs/images/ch1/architecture-evolution-stage-3.png b/docs/images/ch1/architecture-evolution-stage-3.png deleted file mode 100644 index 417f9f4b70b5dd98c275fb6f40769bda05779b40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546093 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