SlideShare a Scribd company logo
Terraform in Depth (MEAP V01) Robert Hafner pdf
download
https://ebookmeta.com/product/terraform-in-depth-meap-v01-robert-
hafner/
Download more ebook from https://ebookmeta.com
We believe these products will be a great fit for you. Click
the link to download now, or visit ebookmeta.com
to discover even more!
Machine Learning Algorithms in Depth MEAP V01 Vadim
Smolyakov
https://ebookmeta.com/product/machine-learning-algorithms-in-
depth-meap-v01-vadim-smolyakov/
CSS in Depth, Second Edition (MEAP V01) Keith Grant
https://ebookmeta.com/product/css-in-depth-second-edition-
meap-v01-keith-grant/
Terraform in Action 1st Edition Scott Winkler
https://ebookmeta.com/product/terraform-in-action-1st-edition-
scott-winkler/
Voyages of Discovery The Cinema of Frederick Wiseman
Nonfictions Barry Keith Grant
https://ebookmeta.com/product/voyages-of-discovery-the-cinema-of-
frederick-wiseman-nonfictions-barry-keith-grant/
The New Manager’s Survival Guide: Everything You Need
to Know to Succeed in the Corporate World 1st Edition
Steven Haines
https://ebookmeta.com/product/the-new-managers-survival-guide-
everything-you-need-to-know-to-succeed-in-the-corporate-
world-1st-edition-steven-haines/
Korean Food Systems: Secrets of the K-Diet for Healthy
Aging Dong-Hwa Shin (Editor)
https://ebookmeta.com/product/korean-food-systems-secrets-of-the-
k-diet-for-healthy-aging-dong-hwa-shin-editor/
Expatriate Compensation A practical and informative
textbook for managing expatriate compensation mobility
and international assignments in the world of work 1st
Edition Mark Bussin
https://ebookmeta.com/product/expatriate-compensation-a-
practical-and-informative-textbook-for-managing-expatriate-
compensation-mobility-and-international-assignments-in-the-world-
of-work-1st-edition-mark-bussin/
Truth and Fake in the Post Factual Digital Age
Distinctions in the Humanities and IT Sciences 1st
Edition Klimczak
https://ebookmeta.com/product/truth-and-fake-in-the-post-factual-
digital-age-distinctions-in-the-humanities-and-it-sciences-1st-
edition-klimczak/
Russian National Myth in Transition 24th Edition Ljubov
Kisseljova
https://ebookmeta.com/product/russian-national-myth-in-
transition-24th-edition-ljubov-kisseljova/
Cybersecurity A Practical Engineering Approach Chapman
Hall CRC Textbooks in Computing 1st Edition Henrique
M. D. Santos
https://ebookmeta.com/product/cybersecurity-a-practical-
engineering-approach-chapman-hall-crc-textbooks-in-computing-1st-
edition-henrique-m-d-santos/
Terraform in Depth (MEAP V01) Robert Hafner
Terraform in Depth MEAP v01
1. 1_A_brief_overview_of_Terraform
2. 2_Terraform_HCL_Components
3. 3_Terraform_Variables_and_Modules
1 A brief overview of
Terraform
This chapter covers
Basic Terraform Components
Introducing Infrastructure as Code
Defining Declarative Languages
A brief overview of Graphs
The Terraform Deployment Workflow
The first time I set up an AWS VPC, which is the system AWS uses to
isolate networks from each other, by hand it took me several days.
Admittedly I had never done it before so there was some research
involved, but even once I’d done it a few times it still took several
hours to manually create and configure a VPC that spanned multiple
availability zones and had both public and private subnets.
When I first discovered Terraform I attempted to build a VPC again.
Instead of creating it manually, I wrote code using the Terraform
language to describe my VPC and all of the components that it
needed. When I first ran the code it’s not an exaggeration to say I
was blown away- Terraform launched over 70 resources needed to
create that highly available VPC Structure and it did it in about a
minute. From then on whenever I needed a VPC it was a simple
matter of reusing that already written code.
A task that previously took hours was now an afterthought. In some
ways just as important, that task was suddenly easy. Developers at
the company I worked at who had no understanding of networking
were able to spin up VPCs on their own because the difficult bits had
already been programmed. They were no longer gated by someone
with infrastructure experience. All they needed to know was that they
needed the component and that they could get it by using the
module we already built. This didn’t stop at networking, before long
we had modules for launching web services, creating databases,
storing objects, and utilizing CDNs.
This had a huge effect on the company. Infrastructure stopped being
“a project” and turned into a series of building blocks that we could
reuse over and over again for completely different systems. Even the
quality of these systems improved, as making an improvement for
one project normally involved updating the building block component
with new or improved functionality. If someone needed a new feature
for the VPC module that feature became available to every project in
the company.
Terraform also led another huge culture shift at the companies I’ve
worked at. Once Terraform is introduced systems become
reproducible. That is to say, if you build out a platform with Terraform
it is really easy to spin up another copy of it. Instead of having a
single Test Environment for our products, each developer could spin
up environments whenever they wanted. Developers could work on
new features while having the entire real system there while working
on new features. If someone wanted to experiment with changes it
was easy for them to apply those changes to their own environment
and iterate on them at will.
The goal of this book is to help you learn how to use Terraform so
you can bring these benefits to your projects. We’re going to start
with the very basics so you can reap the benefits immediately and
then expand on that knowledge with more advanced topics.
1.1 Terraform Overview
Terraform exists to create and manage infrastructure. One of the
major reasons that it is so powerful is that it provides a single unified
interface to thousands of different vendors and software systems. It
doesn’t matter if you’re creating files on a local system, launching
machines into the cloud, editing DNS records, or even ordering a
pizza- when you use Terraform you only have one language you need
to know.
Terraform accomplishes this by abstracting all of the system-specific
components into Providers. Each vendor has their own resources and
APIs, but all of that is wrapped up behind the Provider where the
developer doesn’t need to worry about it. Instead, the Terraform
Core (which lives in the Terraform CLI) translates between the
Terraform Language that the developers have written to launch their
systems and the underlying Providers, and the Providers then handle
communication back to their vendor systems.
Figure 1.1 Terraform has multiple levels of abstraction that allow
developers to get things done without worrying about vendor-specific
minutiae.
Terraform in Depth (MEAP V01) Robert Hafner
This breakdown of components is powerful. The provider system lets
vendors and community members develop their own Terraform
interfaces which can be updated and released independently of
Terraform. There are currently over 3280 providers on the Terraform
Provider Registry that can all be used by developers.
Terraform takes this approach in other areas as well. Terraform has a
concept of State, which is a collection of metadata about the
resources it manages. Every deployment has its own State. To
manage that Terraform has Backends, which tell Terraform where to
store the state. Backends are capable of storing multiple
deployments, which Terraform breaks up into Workspaces. If you
were to think about Terraform as a desktop program, like a word
processor, then your backends would be like your filesystem and each
workspace would be a different file you saved there.
1.1.1 Terraform Language
One of the things that makes Terraform particularly unique amongst
Infrastructure as Code (IaC) frameworks is its use of HCL (the
Hashicorp Configuration Language). HCL is designed to be easily
readable, even by people who may not be well-versed in the
language. HCL is also a Declarative Language, which means that
developers define their ideal end state rather than the steps needed
to get there.
Other IaC frameworks tend to either use existing Imperative
Languages or try to build on top of data-only languages like YAML.
Using a data-only language such as YAML has many limitations that
are often addressed by using interpolation schemes that work against
readability.
HCL was created by Hashicorp and is used by multiple products-
Packer, Nomad, and Consul all use HCL. Each Hashicorp project that
uses HCL exposes its own resources and functions inside of HCL, with
other subtle differences such as how they structure resources. This
book is going to focus on the Terraform flavor of HCL, but once you
understand the syntax it should be easy to jump between HCL
flavors. Unless otherwise mentioned this book uses Terraform HCL in
all examples.
1.1.2 Terraform CLI and Core
The Terraform CLI is the primary way that Terraform projects are run
and managed. It contains the engine that bridges the HCL written by
developers with the vendor-specific libraries and APIs that are
needed to manage the underlying resources.
The CLI is used to create new infrastructure, update it, destroy it,
and apply manual changes. The CLI has features that make it easier
to run with CI/CD platforms, and many such platforms are built
around it. The CLI also has commands meant to help developers,
such as a built-in code formatting system and a system for
generating visualizations of Terraform-managed infrastructure.
The CLI is very heavily entwined with Terraform itself. The Terraform
Core is built into the CLI and can only be accessed by the CLI.
Speciality Continuous Integration and Deployment (CI/CD) systems
that run Terraform, such as Terraform Cloud or Spacelift (which we’ll
discuss in Chapter 5), are built around the CLI and call it directly. This
differs from other languages like Go or C where you can compile
code, but is similar to interpreted languages such as Python or Node
where you need a tool to run the programs.
For most developers, the CLI is going to be used extensively even if
they also have CI/CD systems available. This book will include
examples using the CLI as new topics are introduced.
1.1.3 Providers
A Provider is a collection of Data Sources and Resources (both of
which we’ll discuss in detail in the next chapter) for managing
infrastructure with a particular vendor. Some providers are managed
directly by Hashicorp while others are released by their specific
vendors.
Providers are generally written in Go (the same language Terraform is
written in) and communicate with Terraform over gRPC (a high-
performance Remote Procedure Call framework). They act as an
interface between Terraform and the vendor systems the developer is
trying to work with. In theory, providers can be written in other
languages as long as they implement the appropriate gRPC
interfaces, but in practice, there are only a few very experimental
examples out there and none that are production ready.
Don’t worry if you’ve never used gRPC before. It is not something
you need to know to work with Terraform unless you’re making your
own custom provider, and even then you’ll mostly be working with
the existing Terraform libraries that work with GRPC. Since most
vendors create and manage their own providers the vast majority of
Terraform users will never need to create one on their own.
Figure 1.2
Providers tend to have a one-to-one relationship with a Vendor or
Platform. If you want to interact with AWS then you use the AWS
Provider. GCP also has a provider, while Azure has released multiple
providers to cover their products. Just like when using third-party
libraries in another programming language, providers will have their
own nomenclature, style, and documentation.
1.1.4 Vendors
The whole purpose of Terraform is to manage infrastructure.
Terraform itself is vendor agnostic- it doesn’t care what kind of
infrastructure it manages, as long as it has a provider that exposes it.
Each vendor has its own API, Resources, and methodology of
working that has to be abstracted behind the provider. There are
vendors for just about anything you can think of:
Cloud Providers
DNS Providers
Data Analytics
Virtual Machine Hosts
Git Repositories
Authentication Systems
There are even providers for pizza delivery and another that gives
read-only access to which Mcdonald's milkshake machines are
currently broken. Terraform is an extremely well-adopted platform,
and as a result, most vendors maintain fairly up-to-date providers.
1.1.5 Backends
Backends are used to customize where a Workspace stores its state
files. By default, a workspace uses the Local Backend, which means
that if you run a workspace locally with no other changes then the
state files will be stored directly on your local filesystem. This is great
for testing but it means that the only way your workspace can be
acted on is from your computer, which really doesn’t scale to teams.
Backends solve that problem by allowing the state to be stored in
another location. There are backends for the object storage systems
for the major cloud vendors (AzureRM, GCS, S3, etc), for open source
databases, and even an HTTP one that can be used to create simple
custom services. Some backends go further than that and expose
APIs that Terraform can use to run special operations.
When using a backend other than local it is much easier to work as a
team. In Chapter 6 we’ll discuss the different types of backends and
their benefits.
1.1.6 Workspaces
A Terraform Workspace represents a deployment of a Terraform code
base with a specific backend. When comparing Terraform to other
software development projects a Workspace can be compared to a
specific installation of a program- like other software, you can have
as many installations as you want, and each installation is completely
independent of the others with its own configuration and saved data.
Every Terraform Workspace includes the code base, the configuration
for the specific workspace, and a list of all resources currently created
in the workspace (this list is known as the state, and will be
discussed further in chapter 4). Once code has been written a
Terraform Workspace can be initialized from that code. Once
configured and initialized the infrastructure from that code can be
created, updated, and destroyed.
A Terraform code base can have an unlimited amount of
deployments. If each of these deployments was using the same
backend, then each deployment would be given its own backend. It’s
very common to have production, staging, and ephemeral feature
deployments all sharing a common backend. Some deployments are
long-lasting while others may exist for only as long as a feature is
being developed. Developers working on Terraform projects will often
have a local workspace they use so they can iterate quickly, with their
local filesystem as the backend..
1.2 Infrastructure as Code
Infrastructure as Code (often abbreviated as IaC) is a class of
technology that allows developers to provision infrastructure using
coding practices. Terraform is not the only IaC tool- Pulumi is another
vendor-agnostic framework, while AWS Cloudformation and GCP
Deployment Manager are vendor-specific solutions. Unlike vendor-
specific systems, such as Cloudformation, Terraform isn’t restricted to
just working with a single vendor. Terraform also uses a custom
declarative language that makes it much easier to use than other
frameworks.
Infrastructure as Code is a natural evolution of how systems get
managed. There was a time individual machines would be individually
configured for their job. System admins would share scripts or
tutorials but mostly worked with machines directly. As cloud
computing became more popular this simply did not scale.
Configuration Management tools such as Puppet and Chef were
developed to configure large groups of machines, while tools such as
Packer were created to build golden images of machines for reuse.
Infrastructure as Code frameworks take the next step and allow for
entire platforms to be codified and repeatedly deployed.
1.2.1 Software Development Practices with IaC
The first use of the phrase “software engineering” was in 1950, and
in the over seventy years since then, the field has evolved and
matured considerably. A huge part of the appeal of Infrastructure as
Code is that many of the tools and practices that have been
developed over the years for software development can be directly
applied to infrastructure. Infrastructure as Code can be versioned
with Git, scanned with linters for quality control and security, and get
automatically tested using CI/CD. Even more than that, teams can
apply the principles and practices developed for software engineering
directly to infrastructure.
This has benefits everywhere in the stack. The use of a version
control system (VCS) such as git alongside a modern VCS Host such
as Github or Gitlab adds numerous benefits, such as audit trails,
versioning, and the ability for multiple people to work on the same
project without stepping on each other’s toes as much. Branches can
be created to test new features, while pull requests can require
reviews from different teams and passing tests.
This all adds up to improved quality, particularly for more complex
systems. When done right this also means the ability to develop
faster and with higher confidence even as system complexity grows.
1.2.2 Repeatability and Shareability
Software allows for repeatability. If you write a program you can run
that program over and over again. Bringing this repeatability to the
infrastructure world allows developers to create building blocks that
can be used repeatedly across their codebase and even across
projects.
In general configuring a piece of infrastructure- whether it’s a VPC
(Virtual Private Cloud, a common component provided by cloud
vendors such as GCP and AWS), an Autoscaling Group, or an
Orchestration System such as Kubernetes- takes research and work.
It also tends to take a lot of time to do manually. Wrapping that
knowledge into a reproducible piece of software allows others to take
advantage of and build on that work without needing to reproduce
that labor. The reusable modules can also be improved over time,
which allows those improvements to get pushed out across the stack.
As an example, a company can create a VPC module that gets shared
across multiple teams. Over time they may add more functionality,
such as the use of VPC Endpoints or increased security monitoring.
Terraform and other Infrastructure as Code frameworks allow those
improvements to spread across the organization in the same way that
software engineers upgrade the libraries they use for development.
1.2.3 Continuous Integration and Deployment
An important part of software is integrating and deploying changes.
Working with Infrastructure as Code is no exception.
There are even CI/CD platforms that are built specifically for running
Terraform. These Terraform-specific systems have gotten so popular
that they’ve even gotten their own name: TACOS (for Terraform
Automation & Collaboration Software). Hashicorp, the makers of
Terraform, run a solution called Terraform Cloud that works as a SaaS
and a self-hosted version called Terraform Enterprise. There are also
third-party vendors like Spacelift and Scalr who run their own
systems. Each of these platforms provides integration with Github
and Gitlab. This allows them to automatically publish modules from
git tags, run speculative plans to see what would happen if the code
changes in a pull request were run, and even manage the
deployment of changes as they are merged in.
It’s common to use both a specialty system such as Terraform Cloud
as well as a more traditional CI/CD system. The more general
systems have the advantage of being more flexible in the types of
jobs they can run. This lets developers add jobs for testing,
formatting, linting, and more while keeping the results alongside the
results for other projects that make up their platform.
Continuous Integration and Deployment is one of the most important
topics in Terraform, so much so that Chapter 7 is devoted to the
topic.
1.3 Declarative Languages
Terraform uses a Declarative Language to codify infrastructure.
Declarative Languages are a class of language where the developer
defines how something should look after the code has been run. With
a declarative language, the focus is on defining the end state, and
then the engine running the language creates a plan of actions to
bring the system to the desired end state.
Declarative Languages create their plans using a computer science
concept called Directed Acyclic Graphs (DAGs), which in this context
are basically a list of actions that have to be completed in a specific
order. Terraform refers to these as “plans”. We’ll discuss DAGs in
more depth in Chapter 5 when we discuss how to debug issues with
Terraform Plans.
Declarative Languages tend to be more popular among Configuration
Management and Infrastructure as Code frameworks. Terraform HCL,
the Kubernetes YAML language, Cloudformation’s YAML, and Puppet’s
DSL are all examples of Declarative Languages.
1.3.1 Declarative versus Imperative Languages
Most developers are familiar with Imperative Languages. When using
languages such as Javascript and Bash the developer uses
statements to explicitly change the state of the system. Imperative
Languages describe how to do something, while Declarative
Languages describe what the outcome should be. Declarative
languages focus on the outcome rather than the steps to get to that
outcome and are very different from Imperative Languages.
One way to think about this is that Declarative Languages primarily
use Nouns and Adjectives, while Imperative Languages primarily use
Verbs. With Terraform you will never say “Check if this machine
exists, create the machine if it does not exist, and then apply this
configuration”. Instead, you will describe the machine that you want
and Terraform itself will translate that into actions that result in that
machine being created.
Exploring the Variety of Random
Documents with Different Content
COMPOSITION.
1914 1915 1916 1917
Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigad
Infantry. 1 Gd.
Res.
1 Gd. Res. 1 Gd.
Res.
1 Gd. Res. 1 Gd.
Res.
1 Gd. Res. 1 Gd.
Res.
1 Gd. Res. 1 Gd.
Res.
2 Gd. Res. 2 Gd. Res. 2 Gd. Res. 2 Gd. Res.
15 Res. 64 Res. 15 Res. 64 Res. 64 Res. 64 Res.
93 Res. 93 Res.
Gd. Res. Snipers Btn. Gd. Res. Snipers Btn. 1 Sqn.
Gd.
Res.
Cavalry. Gd. Res. Dragoons (3
Sqns.).
Gd. Res. Drag. Rgt. Gd. Res. Dragoon Rgt.
(z Sqns.).
Gd. Res. Drag. Rgt.
(1st Sqn.).
1 Sqn.
Rgt.
Artillery. 1 Gd. Res. F. A. Rgt. 1 Gd. Res. F. A. Rgt. 1 Gd. Res. F. A. Rgt. 7 Gd. Art. Command. 8 Gd. A
3 Gd. Res. F. A. Rgt. 3 Gd. Res. F. A. Rgt. 3 Gd. Res. F. A. Rgt. 1 Gd. Res. F. A. Rgt. (9
Batteries).
1 Gd
2 Abt
(Staff
Btries
701 L
1269
1328
Engineers
and
Liaisions.
2d and 3d Field Cos. (1
Eng. Btn. 28).
2d and 3d Field Cos. (1
Eng. Btn. 28).
(z) Eng. Btn. 28 Pion
1 Gd. Res. Pontoon
Engs.
1 Gd. Res. Pontoon
Engs.
2d and 3d Cos. 28
Pion.
2 Co.
1 Gd. Res. Tel. Detch. 1 Gd. Res. Tel. Detch. 5 Gd. T. M. Co. 3 Co.
5 Gd. T. M. Co. 401 (Gd.) Tel. Detch. 61 Se
Sectio
401 Gd
Comm
401 (
17 W
Medical and
Veterinary.
266 Ambulance Co. 266 Am
395 Field Hospital. 389 Fie
Vet. Hospital. 395 Fie
401 Vet
Transport. M. T. Col. 701 M.
HISTORY.
1914.
Belgium.
1. At the beginning of the war the 1st Guard Reserve Division forming, together with the 3d Guard
Division, the Guard Reserve Corps swept into Belgium—as part of the 2d Army under von Buelow—the
16th of August, crossed the Meuse at Ardenne (massacres) the 20th, and pushed on as far as Namur.
On the 29th the two divisions (Guard Reserve Corps) were brought back to Aix-la-Chapelle, and left for
east Prussia September 1.
Poland.
2. The beginning of October the Guard Reserve Corps, attached to the Southern Army Group, took part
in the invasion of the southern part of Poland, fought at Opatow (Oct. 4), and suffered severe losses at
Lodz while retreating from the Russian armies.
3. During the winter of 1914–15 it fought on the Bzura.
1915.
Poland.
1. In February, 1915, the Guard Reserve Corps was split up. The 1st Guard Reserve Division was sent to
the north of the Vistula, in the Mlawa-Prasnysz region. By the 6th of March the 1st Guard Reserve
Infantry Regiment had already had its thirty-ninth engagement there (letter).
2. In March the 93d Reserve Regiment was attached to the 4th Guard Division (new). During the
summer of 1915 the 1st Guard Reserve Division was engaged in the operations to the north of the
Vistula (von Gallwitz’s army).
Smorgoni.
3. The pursuit of the Russians brought the division as far as the neighborhood of Smogorni-Vishnev,
where it took part in violent fighting and where it was relieved the middle of September.
France.
4. During the early days of October it entrained at Grodno for the western front. (Itinerary: Warsaw,
Posen, Berlin, Hanover, Aix-la-Chapelle, Liège, Cambrai.)
Cambrai.
5. It went into rest cantonments on the banks of the Scheldt between Marcoing and Bouchain
(November-December).
1916.
1. The 1st Guard Reserve Division and the 4th Guard Division then formed the reconstituted Guard
Reserve Corps.
2. During January and February, 1916, the division was employed on defensive works in the
Wytschaete-Messines sector; it also held a sector in that region. At the same time it underwent a course
of training in the neighborhood of Cambrai.
Artois.
3. The beginning of May the division took over the sector south of Neuville-St. Vaast.
Somme.
4. At the end of July it was engaged on the Somme (Belloy-Barleux).
5. After August 19 it spent some days at rest near Cambrai, and came back into line until September 8
between the Mouquet Farm and Martinpuich. It suffered local attacks, in which it was constantly pushed
back with heavy losses.
Flanders.
6. After a rest in the neighborhood of Cambrai it was sent to a calm sector to the north of Ypres, near
the Ypres-Pilkem road.
Somme.
7. November 5 the division returned to the Somme (Warlencourt) where it spent the winter of 1916–17.
1917.
Somme.
1. In March, 1917, the 1st Guard Reserve Division commenced the withdrawal movement on the
Hindenburg Line, leaving prisoners in rear-guard actions (PysGrevillers region). It was withdrawn from
the front about March 20 to go to rest near Tournai.
2. The 1st Guard Reserve Division and the 4th Guard Division then became independent divisions.
Artois.
3. April 25 the division took over the Oppy-Gavrelle sector and fought off the British attacks.
4. Relieved the beginning of May, it was sent to rest at Templeuve, and was later employed in the
construction of defensive works near Cambrai (May).
Flanders.
5. The 1st of June it was carried to Tourcoing, and from there to Warneton, June 8 it went into line to
the east of Messines, where it relieved the 3d Bavarian Division, very much worn out the day before. It
was itself withdrawn as early as the 12th.
Artois.
6. The division then went back to Artois and held the Moeuvres-Pronville front (June 21–22 to Aug. 16)
taking part in no important action.
Lens.
7. After some days rest at Douai, it became reengaged August 21, on the Lens front, in a series of very
heavy conflicts following the attack of August 15. The 64th Reserve Infantry Regiment was particularly
exhausted. Gas attacks caused it to suffer equally heavy losses in September and December.
8. The division remained in this sector until the end of 1917. In November it sent some elements to
reinforce the Cambrai front against the British attack.
VALUE—1917 ESTIMATE.
The division was recruited in all provinces of Prussia, like the rest of the Guard. Despite their numbers,
the 64th and 93d Reserve Infantry Regiments do not come (to any considerable extent) from the 3d
and 4th Corps Districts. The 93d Reserve Infantry Regiments came from what was, before its
dissolution, a “guard landwehr battalion (Magdeburg)” (seal of pay book).
The 1st Guard Reserve Division is not above the average German division in value. The Alsatians in its
ranks were withdrawn and sent to Russia in 1916, but there are still numerous Poles, who do not
constitute an element of strength. It seems much less to be feared than most of the Prussian
organizations that do not have the “Litze” (braiding), less, too, than the Wurttemburgers of the 13th
Corps District and the better Bavarian troops. (British document, February, 1918.)
1918.
Lens.
1. The 1st Guard Reserve Division was relieved in the Lens sector by the 220th Division the first of the
year and was withdrawn, remaining at rest in this region until it relieved the 220th Division, February 4.
Carvin.
2. The division was relieved by the 220th Division February 20 and went to the Carvin area, where it
went through a course of training in open warfare so as to become the assault division of the Souchez
Group.
Somme.
3. The opening day of the March 21 offensive the division was identified at Lagnicourt (northeast of
Bapaume). It was very probably “leap-frogged” by some other division the next day, but it reappeared
the 27th near Bucquoy, in a straight line with the advance taken as a whole. It suffered exceedingly
heavy losses, finally having to utilize its pioneers as Infantry.
La Bassée.
4. April 20 the division was withdrawn from the Somme front and marched to Givenchy (just north of
the La Bassée Canal) the next day, where it relieved the 4th Ersatz Division. It fought there until about
May 21, giving a good account of itself, considering its weakened condition, and as a result its brigade
commander was promoted a lieutenant general, and the division commander received Pour le Mérite.
Grammont.
5. The division moved to the Grammont area, where it underwent a course of training with artillery and
aeroplanes in preparation for a coming offensive.
La Bassée.
6. It relieved the 38th Division at Festubert, north of the La Bassée Canal July 5; it was relieved July 14
by the 18th Reserve Division.
7. The division rested in the Fauquissart area, and then relieved the 12th Reserve Division north of
Hinges the night of August 2–3. It was relieved about August 26 by extension of front of the
neighboring divisions.
Cambrai.
8. The 2d of September the division reinforced the front north of the Arras-Cambrai Road. About the
10th it side-slipped south, for it was identified southwest of Moeuvres. It remained here, suffering heavy
casualties (450 prisoners), and was relieved by the 7th Cavalry Division during the night of September
22–23.
9. It remained in this region, however, and was thrown back into line in attempt to stem the British
advance, being identified at Bourlon September 28; withdrawn about October 5.
10. The division returned October 16–17, relieving the 30th Division east of Neuvilly, and was withdrawn
about the 20th.
11. November 4 it was identified north of Landrecies. It took part in the general retirement, being
identified south of Berlaimont November 5, and east of Maubeuge on the 9th.
VALUE—1918 ESTIMATE.
The 1st Guard Reserve Division was rated as in the first of four classes. During 1918 it did not fight
brilliantly, but it was always to be depended upon. It was called upon to fight much in heavy
engagements, and suffered very severe losses.
Guard Ersatz Division.
COMPOSITION.
1914–15 1916 1917 1918
Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigade. Regiment.
Infantry. 1 Gd.
Mixed
Ers.
1 Gd. Ers.
(1, 2,
and 6
Gd. Bde.
Ers.
Btns.).
1 Gd.
Mixed
Ers.
6 Gd.
(former
1 Gd.
Ers.).
Gd. Ers. 6 Gd.
7 Gd.
399.
Gd. Ers. 6 Gd.
7 Gd.
399.
2 Gd. Ers.
(3,4 and
5 Gd.
Bde. Ers.
Btns.).
7 Gd.
(former
2 Gd.
Ers.).
5 Gd.
Mixed
Ers.
357 (5 Ers.
Btn. 2d
C. Dist.
and 5
Ers. Btn.
1 C.
Dist.).
5 Gd.
Mixed
Ers.
357.
358.
358 (6, 7,
and 8
Ers.
Btns. 2d
C. Dist.).
Cavalry. Gd. Ers. Cav. Detach. 1st Sqn. Gd. Cav. Rgt. 5th Sqn. 2d Gd. Uhlan
Regt.
5 Sqn. 2 Gd. Uhlan
Rgt.
Artillery. 1st Ers. Abt. (1st and
2d Gd. F. A. Rgt.).
7th Gd. F. A. Rgt. 6th Gd. Art. Command: 6 Gd. Art. Command:
38th F. A. Rgt. 7 Gd. F. A. Rgt. 7 Gd. F. A. Rgt.
89 Ft. A. Btn.
759 Light Am. Col.
814 Light Am. Col.
886 Light Am. Col.
Engineers
and
Liaisons.
1 Co. Gd. Ers. Pion.
Btn.
301 (Gd.) Pion. Co. Eng. Btn.: 501 Pion. Btn.:
1 Ers. Co. 2 Pion. Btn. 302 Pion. Co. 301 (Gd.) Pion. Co. 301 Gd. Pion. Co.
7 Gd. T. M. Co. 302 Pion. Co. 302 Pion. Co.
7 Gd. T. M. Co. 49 Searchlight
Section.
292 Searchlight
Section.
551 Signals Command:
551 Gd. Tel. Detch. 551 Gd. Tel. Detch.
36 Wireless Detch.
Medical and
Veterinary.
62 Ambulance Co. 63 Ambulance Co.
133 Field Hospital. 133 Field Hospital.
134 Field Hospital. 134 Field Hospital.
209 Vet. Hospital. 209 Vet. Hospital.
Transport. M. T. Col. 761 M. T. Col.
Attached. 32 Ldw. Btn. 2d C.
Dist. (1915).
81 Labor Btn.
HISTORY.
1914–15.
Formed in August, 1914, by grouping the Guard Ersatz Battalions and the Ersatz Battalions of the
2d Corps District, the division detrained at Saverne August 19. In reserve during the battle on the
20th, it crossed the frontier on the 23d with the 6th Army, fought southeast of Lunéville the first
days of September, and toward the end of the same month it went to Haye (Woevre).
Haye.
1. There it formed part of the Ersatz Corps and held various sectors of the region until March,
1916 (St. Baussant, Flirey, Bois de Mort-Mare, etc.).
1916.
1. In March, 1916, the 1st Guard Ersatz Mixed Bde. (6th and 7th Guard Regiments) left the
Apremont region to go to the north of Combres and to the south of Fresnes-en-Woevre.
Verdun.
2. After a rest of 10 days at St. Marie aux Chênes (Apr. 24-May 3) it went to the front north of
Verdun. May 11–12 it entered line in the Bois-Nawé (west of Douaumont), where it took part in
several attacks (notably that of May 25). It rested in June, and fought again, beginning July 1, to
the southeast of the Thiaumont works.
3. The 5th Guard Ersatz Mixed Bde. which had remained in the Montsec region, entrained at
Vigneulles-St. Benoît (July 23–26), detrained at Spincourt, and during the night of August 3–4
entered line to the east of Fleury. Together with the 1st Bde., it took part in the attack of August
5, and both suffered heavy losses.
4. The Guard Ersatz Division was withdrawn from line the end of August, after having lost 50 per
cent of its infantry before Verdun.
Flirey-en-Haye.
5. After a rest in the region west of Spincourt it went back into line to the north of Flirey-en-
Haye; it remained there until about the 5th of November.
In September the 357th and the 358th Infantry Regiments were attached to the Bavarian Ersatz
Division and the 214th Division, respectively. The Guard Ersatz Division received in exchange a
regiment newly formed from companies taken from the 6th and 7th Guard and the 357th
Infantry Regiments.
Cote du Poivre.
6. The division rested in November, leaving December 18 to go to the region north of Côte du
Poivre, following the French attack of December 15.
1917.
1. About January 15, 1917, the Guard Ersatz Division was withdrawn from the Verdun front and
sent to Champagne (St. Hilaire sector).
2. Relieved toward the end of March, the division was sent to reserve in the Chateau-Porcien
region, which it quitted April 12.
Aisne.
3. April 16 and the days following elements of the division counterattacked toward Bermericourt;
then relieving (Apr. 18) the remnants of the 21st Division, the Guard Ersatz Division went
through the French attack of May 4. It left this front soon after.
4. May; rest in rear of the Champagne front.
Russia.
5. After a stay in a sector in Haye to the north of Flirey (from the beginning of June to the middle
of July), the division was carried to the eastern front (July 23–27). (Itinerary: Sarrebrucken,
Kreuznach, Frankfort, Leipsic, Cottbus, Glogau, Warsaw, Grodno, Vilna.)
6. The Kaiser reviewed the division July 29. From the 1st to the 17th of August it was trained in
open warfare near Vilna.
Riga.
7. Taken to Chavli (Aug. 28), then to the Gross-Ekkau region, the division entered line in the
Uxkuell region and participated in the Riga offensive, entering Riga September 3–4.
France.
8. September 8 the division entrained for the western front. (Itinerary: Chavli, Kovno,
Eydtkuhnen, Insterberg, Posen, Cottbus, Leipsic, Frankfort, Thionville, Briey.) It encamped near
Spincourt, and then, about October 10, entered line to the north of Bezonvaux.
VALUE—1917 ESTIMATE.
The Guard Ersatz Division was recruited all over Prussia just as all the other Guard divisions.
Good division. The 6th and 7th Guard Regiments are not to be considered as tried troops. The
399th Infantry Regiment seems to have but a slight combative value.
The men are said to have shown dissatisfaction when they left Russia for the western front.
Desertions are said to have taken place en route. (Inter. pris. Dec. 15–17.)
1918.
Verdun.
1. The division remained north of Verdun until February 20, when it was relieved and went to
Damvillers, entrained, and went to the Arlon area and was trained until March 15.
Somme.
2. It entrained at Arlon on that date and traveled via Charleroi to Mons, where it arrived the
following day. By night marches the division passed through Maubeuge-Bavai-Englefontaine-
Fontaine au Bois-Bazuel-Le Cateau-Busigny-Bohain-Fresnoy-Péronne, without taking part in any
fighting. It came into line March 25–26, and was heavily engaged at Proyart the 27th.
Hangard.
3. The division was withdrawn about April 6, after having large casualties, and reinforced the
front near Hangard the night of April 9–10, not being relieved until about May 4. Flanking
divisions extended their fronts.
Mons.
4. It rested northwest of Mons until the end of June.
Champagne.
5. It then went to reserve in Champagne, and entered line west of Auberive July 15. It was
withdrawn on the 21st.
Oulchy le Chateau.
6. The division was identified in line north of Oulchy le Chateau July 29, where it fought until
withdrawn, about August 9.
Alsace.
7. It went into rest cantonments at Helfrantzkirch (northeast of Basle), and remained there until
September 25.
Ypres.
8. Prisoners of the division were captured southwest of Roulers, and they stated that it entered
line October 5–6. The division remained in line fighting stubbornly, but to no purpose, until
withdrawn, November 7.
VALUE—1918 ESTIMATE.
Reliable information is to the effect that the Guard Ersatz, the Guard Cavalry, and the Jaeger
Divisions bore the title “Oberste Heeresleitungs Angriffsdivisionen,” and that they were held
under the direct control of the Supreme Command. Nevertheless, the Guard Ersatz has always
been considered as being in the second of four classes.
Guard Cavalry Division.
COMPOSITION.
1918
Brigade. Regiment.
Infantry. 5 Ldw. Inf.
Cavalry. 11 Cav. 1 Cuirassier.
8 Drag.
14 Cav. 5 Uhlan.
8 Hus.
11 Hus.
38 Cav. 2 Mounted Jag.
6 Mounted Jag.
4 Cuirassier.
Gd. Cuirassier (1 Sqn. of 4 Mounted Jag.).
Artillery. 132 Art. Command:
3 Gd. F. A. Rgt.
226 F. A. Rgt.
Engineers and Liaisons. 412 Pion. Btn.:
307 Pion. Co.
2 Ers. Pion. Co.
183 Wireless Detch.
286 and 385 T. M. Cos.
Medical and Veterinary. 257 Ambulance Co.
302 Field Hospital.
315 Field Hospital.
286 Vet. Hospital.
Attached. Balloon Sqn. No. 33.
290 Reconnaissance Flight.
HISTORY.
1918.
1. The division left the eastern theater in the middle of March. It was
reconstituted in the camp at Zossen (south of Berlin), and was then
moved to the Maubeuge area, where it underwent six weeks’
training for open warfare. It now consisted of 9 dismounted
regiments, grouped in 3 brigades, 2 companies of pioneers, and a
trench mortar company.
Champagne.
2. About May 28 the division relieved the 23d Division east of the
Suippe. It was relieved about July 2, and on the 15th returned to
strengthen the battle front near Souain. It was relieved about July
20.
Soissons.
3. The division was moved to the Soissons area, and on August 22
relieved the Jaeger Division east of Soissons. It retired from the front
about September 5.
Champagne.
4. On September 23–24 it relieved the 15th Bavarian Division north
of Prosnes, and was thereafter constantly in line in Champagne. The
direction of its final retreat lay through Herpy (Nov. 1), St. Ferguex
(5th), Rethel (6th), and Rocquigny (7th).
VALUE.
The division was rated as second class. It was reported to be one of
the General Headquarters attack divisions held under direct control
of the Supreme Command. After the failure of the July offensive east
of Reims the division was constantly on the defensive.
1st Division.
COMPOSITION.
1914 1915 1916 1917
Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigad
Infantry. 1. 1 Gren. 1. 1 Gren. 1. 1 Gren. 1. 1 Gren. 1.
41. 41. 41. 3 Gren.
2. 3 Gren. 2. 3 Gren. 2. 3 Gren. 43.
43. 43. 43.
Cavalry. 8 Uhlan. Regt. (?) (?) 3d Sqn. 8 Uhlan. Regt. 3 Sqn.
Artillery. 1 Brig.: 1 Brig.: 1 Brig.: (z) Art. Commandt: 1 Art. C
16 F. A. Rgt. 16 F. A. Rgt. 16 F. A. Rgt. 16 F. A. Rgt. 16 F.
52 F. A. Rgt. 52 F. A. Rgt. 52 F. A. Rgt. 52 F. A. Rgt. 1 Abt
(Staff
Btries
1083
1095
1096
Engineers
and
Liaisons.
1 Eng. Btn. (1 C. Dist.): 1 Eng. Btn. (1 C. Dist.): 112 Eng. Btn.: 110 Pio
Field Co. 1 Pion. 271 Pion. Co. (Oct.,
1917).
3d Co. 1 Pions. (z). 3 Co.
1 Pontoon Engs. 1 Pontoon Engs. 271 Pion. Co. 271 P
1 Tel. Detch. 1 Tel. Detch. 1 T. M. Co. 1 T. M
1 T. M. Co. 1 Tel. Detch. 108 S
Sectio
3d Co. 1 Pions. 305, 311, 312, and
392 Searchlight
Sections.
1 Signa
1 Tel
43 W
Medical and
Veterinary.
4 Ambulance Co. 4 Ambu
Field Hospital. 13 Field
1 Vet. Hospital. 16 Field
1 Vet. H
Transport. M. T. Col. 534 M.
Attached. 100 Labor Btn. 66 M. G. S. S. Detch.
54, 55, 56, and 57
Light M. G. Sections.
HISTORY.
1914–15.
Along with the 2d Division, the 1st Division forms the 1st Army Corps (Koenigsberg).
Russia.
1. The 1st Army Corps was engaged on the Russian front at the very beginning of the war.
2. Up until November the 1st Division participated in the operations of East Prussia, and notably in the
battle of Tannenberg (Aug. 27–29).
3. In December the two divisions of the 1st Corps separated. The 2d Division remained in the north; the
1st Division went to the 9th Army, from December, 1914, to January, 1915 (Bzura-Rawka), then to the
Army of the South, operating in the Carpathians and on the Dniester, from February, 1915, to February,
1916.
1916.
France.
1. The division went to France in March, 1916. The 41st Infantry Regiment detrained March 13 near
Metz; the 48th Infantry Regiment at Hagondange March 5.
Verdun.
2. The division was put in line near Vaux April 20, fought in the bois de la Caillette in May, in the bois de
Vaux Chapitre, and the bois Fumin in June and July. It suffered enormous losses there. In the 1st
Company of the 41st Infantry Regiment, the numbers on the pay books passed from 1,359 (Apr. 10) to
1,674 (July 19), indicating the arrival of at least 316 reinforcements. From the beginning of the war until
July, 1916, the regiment had received an average of 1,360 men per company.
Russia.
3. At the end of July, 1916, the 1st Division, leaving behind the 41st Infantry Regiment, which fought
before Verdun in August, was once more taken to the eastern front, where it formed part of the
Carpathian Corps.
1917.
Bukovina.
1. In July, 1917, the division was in the Kirlibaba-Dorna-Vatra region. Beginning July 27, it followed up
the retreating Russians, halting, early in August, in the Sereth region.
France.
2. The division entrained, the beginning of December, near Czernowitz, and was carried to the French
front. (Itinerary: Kolomea, Stanislau, Lemberg, Tarnow, Oppeln, Breslau, Dresden, Leipsic, Halle, Cassel,
Coblentz, Treves.) Ordered to Lorraine, it was sent to the region east of Etain, relieving the 13th
Reserve Division and occupying the sector in front of Moulainville (Dec. 27; still there Jan. 23, 1918).
VALUE—1917 ESTIMATE.
Theoretically, the regiments of the 1st Division are recruited in East Prussia, but since the 1st Corps
District, sparsely populated and of restricted size, could not keep it up alone, the elements coming from
outside this district are numerous. During the stay on the eastern front Alsace-Lorrainers were used in
considerable number. While in France the division’s ranks were filled up with the aid of the abundant
resources of Brandenburg and Silesia (3rd and 4th Corps Districts); consequently, the division does not
display to any degree the local character like the majority of the German divisions.
The 1st Division was on the Russian front from August, 1914, until December, 1917, with the exception
of the period April-July, 1916, during which it was engaged before Verdun.
The troops of the division fraternized with the Russians for about three weeks in April, but this came to
an end early in May with the arrival opposite them of new Russian troops, who received their advances
with bullets. (Inter. pris., Jan. 24, 1918.)
1918.
Woevre.
1. The division remained in line in the Verdun sector until relieved by the 11th Bavarian division about
February 15.
2. It moved to the Conflans area, where it went through a course of training in open warfare in order to
fit itself to become an assault division. At this time, too, it exchanged its Alsatians for Prussians of the
78th Reserve Division.
Somme.
3. March 27 the division reinforced the front at Bray, north of the Somme. It fought until the 30th, and
lost to such an extent that its companies, which had been filled up while in the Conflans area, were
reduced to an average strength of 40 men.
4. It was withdrawn March 30, and rested immediately in rear of the position it had held in line until
about April 19.
5. The following day the division went back into line just south of the Somme, and immediately suffered
heavily. It was relieved May 2 by the 24th Reserve Division.
6. The division went to rest in the Peruwelz area, and then had some more training in the same region.
Champagne.
7. Early in July the division was identified in reserve near Hirson.
8. July 16 it entered line near St. Hilaire, and was withdrawn the 20th.
Rheims.
9. It was immediately thrown into line in the Bois de Vrigny, where it fought in an attempt to prevent
the Allies from annihilating the German troops in the Soissons-Chateau Thierry-Rheims pocket.
Laon.
10. About August 10 the division was withdrawn and went to rest in the region of Laon.
Laffaux.
11. September 3 it relieved the 27th Division near Laffaux, and, being surprised by a French attack, lost
heavily (2,300 prisoners).
12. September 16 it was relieved by the 29th Division.
Rheims.
13. The division came back into line near Betheny (northeast of Rheims) on October 2 and was
withdrawn about the 8th.
St. Fergeux.
14. It reentered line in the St. Fergeux region October 14, and was again withdrawn the 29th.
Liart.
15. November 7 the division was identified near Liart (south of Rocroi), and remained in line until the
armistice.
VALUE—1918 ESTIMATE.
The division was rated as third class.
1st Reserve Division.
COMPOSITION.
1914 1915 1916 1917
Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigad
Infantry. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res.
3 Res. 3 Res. 3 Res. 3 Res.
72 Res. 18 Res. 72 Res. 18 Res. 72 Res. 18 Res. 59 Res.
59 Res. 59 Res. 59 Res. 1 Res. Jag. Btn.
1 Res. Jag. Btn. 1 Res. Jag. Btn. 1 Res. Jag. Btn.
Cavalry. 1 Res. Uhl. Rgt. (3
Sqns.).
1 Res. Uhl. Rgt. 1 Res. Uhl. Rgt. 1 Res. Uhl. Rgt. (.
Sqns.).
4 Sqn.
1 Res. Ers. Cav. Rgt. (3
Sqns.).
1 Res. Ers. Cav. Regt.
Artillery. 1 Res. F. A. Rgt. (6
Btries.).
1 Res. F. A. Rgt. 1 Res. F. A. Rgt. 1 Res. F. A. Rgt. (9
Btries.).
1 Res. F
2 Abt. 1
Rgt.
1363 Li
1390 Li
1393 Li
Engineers
and
Liaisons.
2 Eng. Btn. No. 1: 4 Field Co. 2d Pion.
Btn.
301 Eng. Btn. (.): 301 Pio
Res. Co. 1 Pion. Btn. 201 T. M. Co. 4 Co. Pion. Btn. 4 Co.
1 Res. Pontoon Engs. 1 Res. Pontoon Engs. 1 Co. Pion. Btn. 1 Co.
1 Res. Tel. Detch. 1 Res. Tel. Detch. 201 T. M. Co. 201 T
348 Searchlight
Section.
31 Se
Sectio
Tel. Detch. 401 Sig
401 T
158 W
Medical and
Veterinary.
501 Ambulance Co. 501 Am
399 Field Hospital. 399 Fie
9 Res. Field Hospital. 9 Res. F
Vet. Hospital. 137 Vet
Transport. M. T. Col.
HISTORY.
1914–15.
Russia.
1. The 1st Reserve Division was on the Russian front from August, 1914, until November 1, 1917, at
which time it entrained for France.
East Prussia-Poland.
2. In 1914 it and the 36th Reserve Division formed the 1st Reserve Corps (Gen. Otto von Buelow). It
took part in the operations of East Prussia (Hindenburg’s Army), in the Lodz maneuver (Von
Mackensen’s Army), and in the combats on the Bzura.
3. In February, 1915, the division was in the Prasnysz region, northeast of the Bohr-Narew line.
Courland.
4. In May, as part of Eichhorn’s Army, it took part in the raid on Courland.
1916.
Galicia.
1. It was on the Dvina in the Friedrichstadt region until July.
2. In August it was identified in Galicia, in Bothmer’s Army, opposed to the Broussiloff offensive. Here it
had heavy losses. (The 11th Company of the 3d Infantry Regiment, in particular, was reduced to 30
men.) During September the division was reinforced. The depot at Friedrichstadt, near Warsaw, was
completely emptied to make good its losses.
Courland.
3. Toward the end of September elements of the division were in line near Friedrichstadt, along the
Dvina, in a calm sector. The 18th Reserve Infantry Regiment was attached to the newly formed 225th
Division.
1917.
1. January 5, 1917, the division was taken to the Mitau region, where it helped stop the Russian attack.
Losses in this sector were light, but there was considerable discontent due to the cold.
2. The division was relieved about the 15th of March and sent to the neighborhood of Gross-Eckau, near
Mitau, where it rested two months.
Ad

More Related Content

Similar to Terraform in Depth (MEAP V01) Robert Hafner (20)

Devops Columbia October 2020 - Gabriel Alix: A Discussion on Terraform
Devops Columbia October 2020 - Gabriel Alix: A Discussion on Terraform Devops Columbia October 2020 - Gabriel Alix: A Discussion on Terraform
Devops Columbia October 2020 - Gabriel Alix: A Discussion on Terraform
DevOpsColumbia
 
Kubernetes vs Terraform 111023.pdf
Kubernetes vs Terraform 111023.pdfKubernetes vs Terraform 111023.pdf
Kubernetes vs Terraform 111023.pdf
JacksonLane4
 
Terraform: Taming the Machines Through Continuous Integration
Terraform: Taming the Machines Through Continuous IntegrationTerraform: Taming the Machines Through Continuous Integration
Terraform: Taming the Machines Through Continuous Integration
Justin Rice
 
A case study why Zoominfo uses Terraform Cloud in high-scale environment.
A case study why Zoominfo uses Terraform Cloud in high-scale environment. A case study why Zoominfo uses Terraform Cloud in high-scale environment.
A case study why Zoominfo uses Terraform Cloud in high-scale environment.
Tal Hibner
 
Terraform 0.12 + Terragrunt
Terraform 0.12 + TerragruntTerraform 0.12 + Terragrunt
Terraform 0.12 + Terragrunt
Anton Babenko
 
Terraform Automation in Azure Online Training Institute in Hyderabad.pptx
Terraform Automation in Azure Online Training Institute in Hyderabad.pptxTerraform Automation in Azure Online Training Institute in Hyderabad.pptx
Terraform Automation in Azure Online Training Institute in Hyderabad.pptx
sivavisualpath
 
Room 2 - 3 - Nguyễn Hoài Nam & Nguyễn Việt Hùng - Terraform & Pulumi Comparin...
Room 2 - 3 - Nguyễn Hoài Nam & Nguyễn Việt Hùng - Terraform & Pulumi Comparin...Room 2 - 3 - Nguyễn Hoài Nam & Nguyễn Việt Hùng - Terraform & Pulumi Comparin...
Room 2 - 3 - Nguyễn Hoài Nam & Nguyễn Việt Hùng - Terraform & Pulumi Comparin...
Vietnam Open Infrastructure User Group
 
Devops interview questions 1 www.bigclasses.com
Devops interview questions  1  www.bigclasses.comDevops interview questions  1  www.bigclasses.com
Devops interview questions 1 www.bigclasses.com
bigclasses.com
 
presentation @ docker meetup
presentation @ docker meetuppresentation @ docker meetup
presentation @ docker meetup
Daniël van Gils
 
What are the Benefits of Using Terraform?
What are the Benefits of Using Terraform?What are the Benefits of Using Terraform?
What are the Benefits of Using Terraform?
Ravendra Singh
 
Terraform Automation in Azure Cloud Online Training in Hyderabad.pptx
Terraform Automation in Azure Cloud Online Training in Hyderabad.pptxTerraform Automation in Azure Cloud Online Training in Hyderabad.pptx
Terraform Automation in Azure Cloud Online Training in Hyderabad.pptx
sivavisualpath
 
What is the Benefit of Using Terraform?
What is the Benefit of Using Terraform?What is the Benefit of Using Terraform?
What is the Benefit of Using Terraform?
Ravendra Singh
 
Terraform Q&A - HashiCorp User Group Oslo
Terraform Q&A - HashiCorp User Group OsloTerraform Q&A - HashiCorp User Group Oslo
Terraform Q&A - HashiCorp User Group Oslo
Anton Babenko
 
Collaborative Terraform with Atlantis
Collaborative Terraform with AtlantisCollaborative Terraform with Atlantis
Collaborative Terraform with Atlantis
Ferenc Kovács
 
Unit No. III Docker ppt part 2.pdf Cloud Microservices & Application
Unit No. III Docker ppt part 2.pdf Cloud Microservices & ApplicationUnit No. III Docker ppt part 2.pdf Cloud Microservices & Application
Unit No. III Docker ppt part 2.pdf Cloud Microservices & Application
Priyanka855141
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Ridwan Fadjar
 
What is Docker & Why is it Getting Popular?
What is Docker & Why is it Getting Popular?What is Docker & Why is it Getting Popular?
What is Docker & Why is it Getting Popular?
Mars Devs
 
Terraform modules and some of best-practices - March 2019
Terraform modules and some of best-practices - March 2019Terraform modules and some of best-practices - March 2019
Terraform modules and some of best-practices - March 2019
Anton Babenko
 
Docker, Cloud Foundry, Bosh & Bluemix
Docker, Cloud Foundry, Bosh & BluemixDocker, Cloud Foundry, Bosh & Bluemix
Docker, Cloud Foundry, Bosh & Bluemix
IBM
 
Programming the world with Docker
Programming the world with DockerProgramming the world with Docker
Programming the world with Docker
Patrick Chanezon
 
Devops Columbia October 2020 - Gabriel Alix: A Discussion on Terraform
Devops Columbia October 2020 - Gabriel Alix: A Discussion on Terraform Devops Columbia October 2020 - Gabriel Alix: A Discussion on Terraform
Devops Columbia October 2020 - Gabriel Alix: A Discussion on Terraform
DevOpsColumbia
 
Kubernetes vs Terraform 111023.pdf
Kubernetes vs Terraform 111023.pdfKubernetes vs Terraform 111023.pdf
Kubernetes vs Terraform 111023.pdf
JacksonLane4
 
Terraform: Taming the Machines Through Continuous Integration
Terraform: Taming the Machines Through Continuous IntegrationTerraform: Taming the Machines Through Continuous Integration
Terraform: Taming the Machines Through Continuous Integration
Justin Rice
 
A case study why Zoominfo uses Terraform Cloud in high-scale environment.
A case study why Zoominfo uses Terraform Cloud in high-scale environment. A case study why Zoominfo uses Terraform Cloud in high-scale environment.
A case study why Zoominfo uses Terraform Cloud in high-scale environment.
Tal Hibner
 
Terraform 0.12 + Terragrunt
Terraform 0.12 + TerragruntTerraform 0.12 + Terragrunt
Terraform 0.12 + Terragrunt
Anton Babenko
 
Terraform Automation in Azure Online Training Institute in Hyderabad.pptx
Terraform Automation in Azure Online Training Institute in Hyderabad.pptxTerraform Automation in Azure Online Training Institute in Hyderabad.pptx
Terraform Automation in Azure Online Training Institute in Hyderabad.pptx
sivavisualpath
 
Room 2 - 3 - Nguyễn Hoài Nam & Nguyễn Việt Hùng - Terraform & Pulumi Comparin...
Room 2 - 3 - Nguyễn Hoài Nam & Nguyễn Việt Hùng - Terraform & Pulumi Comparin...Room 2 - 3 - Nguyễn Hoài Nam & Nguyễn Việt Hùng - Terraform & Pulumi Comparin...
Room 2 - 3 - Nguyễn Hoài Nam & Nguyễn Việt Hùng - Terraform & Pulumi Comparin...
Vietnam Open Infrastructure User Group
 
Devops interview questions 1 www.bigclasses.com
Devops interview questions  1  www.bigclasses.comDevops interview questions  1  www.bigclasses.com
Devops interview questions 1 www.bigclasses.com
bigclasses.com
 
presentation @ docker meetup
presentation @ docker meetuppresentation @ docker meetup
presentation @ docker meetup
Daniël van Gils
 
What are the Benefits of Using Terraform?
What are the Benefits of Using Terraform?What are the Benefits of Using Terraform?
What are the Benefits of Using Terraform?
Ravendra Singh
 
Terraform Automation in Azure Cloud Online Training in Hyderabad.pptx
Terraform Automation in Azure Cloud Online Training in Hyderabad.pptxTerraform Automation in Azure Cloud Online Training in Hyderabad.pptx
Terraform Automation in Azure Cloud Online Training in Hyderabad.pptx
sivavisualpath
 
What is the Benefit of Using Terraform?
What is the Benefit of Using Terraform?What is the Benefit of Using Terraform?
What is the Benefit of Using Terraform?
Ravendra Singh
 
Terraform Q&A - HashiCorp User Group Oslo
Terraform Q&A - HashiCorp User Group OsloTerraform Q&A - HashiCorp User Group Oslo
Terraform Q&A - HashiCorp User Group Oslo
Anton Babenko
 
Collaborative Terraform with Atlantis
Collaborative Terraform with AtlantisCollaborative Terraform with Atlantis
Collaborative Terraform with Atlantis
Ferenc Kovács
 
Unit No. III Docker ppt part 2.pdf Cloud Microservices & Application
Unit No. III Docker ppt part 2.pdf Cloud Microservices & ApplicationUnit No. III Docker ppt part 2.pdf Cloud Microservices & Application
Unit No. III Docker ppt part 2.pdf Cloud Microservices & Application
Priyanka855141
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Ridwan Fadjar
 
What is Docker & Why is it Getting Popular?
What is Docker & Why is it Getting Popular?What is Docker & Why is it Getting Popular?
What is Docker & Why is it Getting Popular?
Mars Devs
 
Terraform modules and some of best-practices - March 2019
Terraform modules and some of best-practices - March 2019Terraform modules and some of best-practices - March 2019
Terraform modules and some of best-practices - March 2019
Anton Babenko
 
Docker, Cloud Foundry, Bosh & Bluemix
Docker, Cloud Foundry, Bosh & BluemixDocker, Cloud Foundry, Bosh & Bluemix
Docker, Cloud Foundry, Bosh & Bluemix
IBM
 
Programming the world with Docker
Programming the world with DockerProgramming the world with Docker
Programming the world with Docker
Patrick Chanezon
 

Recently uploaded (20)

New Microsoft PowerPoint Presentation.pptx
New Microsoft PowerPoint Presentation.pptxNew Microsoft PowerPoint Presentation.pptx
New Microsoft PowerPoint Presentation.pptx
milanasargsyan5
 
CBSE - Grade 8 - Science - Chemistry - Metals and Non Metals - Worksheet
CBSE - Grade 8 - Science - Chemistry - Metals and Non Metals - WorksheetCBSE - Grade 8 - Science - Chemistry - Metals and Non Metals - Worksheet
CBSE - Grade 8 - Science - Chemistry - Metals and Non Metals - Worksheet
Sritoma Majumder
 
Phoenix – A Collaborative Renewal of Children’s and Young People’s Services C...
Phoenix – A Collaborative Renewal of Children’s and Young People’s Services C...Phoenix – A Collaborative Renewal of Children’s and Young People’s Services C...
Phoenix – A Collaborative Renewal of Children’s and Young People’s Services C...
Library Association of Ireland
 
Niamh Lucey, Mary Dunne. Health Sciences Libraries Group (LAI). Lighting the ...
Niamh Lucey, Mary Dunne. Health Sciences Libraries Group (LAI). Lighting the ...Niamh Lucey, Mary Dunne. Health Sciences Libraries Group (LAI). Lighting the ...
Niamh Lucey, Mary Dunne. Health Sciences Libraries Group (LAI). Lighting the ...
Library Association of Ireland
 
Geography Sem II Unit 1C Correlation of Geography with other school subjects
Geography Sem II Unit 1C Correlation of Geography with other school subjectsGeography Sem II Unit 1C Correlation of Geography with other school subjects
Geography Sem II Unit 1C Correlation of Geography with other school subjects
ProfDrShaikhImran
 
LDMMIA Reiki Master Spring 2025 Mini Updates
LDMMIA Reiki Master Spring 2025 Mini UpdatesLDMMIA Reiki Master Spring 2025 Mini Updates
LDMMIA Reiki Master Spring 2025 Mini Updates
LDM Mia eStudios
 
To study the nervous system of insect.pptx
To study the nervous system of insect.pptxTo study the nervous system of insect.pptx
To study the nervous system of insect.pptx
Arshad Shaikh
 
2541William_McCollough_DigitalDetox.docx
2541William_McCollough_DigitalDetox.docx2541William_McCollough_DigitalDetox.docx
2541William_McCollough_DigitalDetox.docx
contactwilliamm2546
 
One Hot encoding a revolution in Machine learning
One Hot encoding a revolution in Machine learningOne Hot encoding a revolution in Machine learning
One Hot encoding a revolution in Machine learning
momer9505
 
GDGLSPGCOER - Git and GitHub Workshop.pptx
GDGLSPGCOER - Git and GitHub Workshop.pptxGDGLSPGCOER - Git and GitHub Workshop.pptx
GDGLSPGCOER - Git and GitHub Workshop.pptx
azeenhodekar
 
Presentation of the MIPLM subject matter expert Erdem Kaya
Presentation of the MIPLM subject matter expert Erdem KayaPresentation of the MIPLM subject matter expert Erdem Kaya
Presentation of the MIPLM subject matter expert Erdem Kaya
MIPLM
 
Odoo Inventory Rules and Routes v17 - Odoo Slides
Odoo Inventory Rules and Routes v17 - Odoo SlidesOdoo Inventory Rules and Routes v17 - Odoo Slides
Odoo Inventory Rules and Routes v17 - Odoo Slides
Celine George
 
Anti-Depressants pharmacology 1slide.pptx
Anti-Depressants pharmacology 1slide.pptxAnti-Depressants pharmacology 1slide.pptx
Anti-Depressants pharmacology 1slide.pptx
Mayuri Chavan
 
How to track Cost and Revenue using Analytic Accounts in odoo Accounting, App...
How to track Cost and Revenue using Analytic Accounts in odoo Accounting, App...How to track Cost and Revenue using Analytic Accounts in odoo Accounting, App...
How to track Cost and Revenue using Analytic Accounts in odoo Accounting, App...
Celine George
 
Unit 6_Introduction_Phishing_Password Cracking.pdf
Unit 6_Introduction_Phishing_Password Cracking.pdfUnit 6_Introduction_Phishing_Password Cracking.pdf
Unit 6_Introduction_Phishing_Password Cracking.pdf
KanchanPatil34
 
Exploring-Substances-Acidic-Basic-and-Neutral.pdf
Exploring-Substances-Acidic-Basic-and-Neutral.pdfExploring-Substances-Acidic-Basic-and-Neutral.pdf
Exploring-Substances-Acidic-Basic-and-Neutral.pdf
Sandeep Swamy
 
How to Set warnings for invoicing specific customers in odoo
How to Set warnings for invoicing specific customers in odooHow to Set warnings for invoicing specific customers in odoo
How to Set warnings for invoicing specific customers in odoo
Celine George
 
YSPH VMOC Special Report - Measles Outbreak Southwest US 4-30-2025.pptx
YSPH VMOC Special Report - Measles Outbreak  Southwest US 4-30-2025.pptxYSPH VMOC Special Report - Measles Outbreak  Southwest US 4-30-2025.pptx
YSPH VMOC Special Report - Measles Outbreak Southwest US 4-30-2025.pptx
Yale School of Public Health - The Virtual Medical Operations Center (VMOC)
 
How to manage Multiple Warehouses for multiple floors in odoo point of sale
How to manage Multiple Warehouses for multiple floors in odoo point of saleHow to manage Multiple Warehouses for multiple floors in odoo point of sale
How to manage Multiple Warehouses for multiple floors in odoo point of sale
Celine George
 
Marie Boran Special Collections Librarian Hardiman Library, University of Gal...
Marie Boran Special Collections Librarian Hardiman Library, University of Gal...Marie Boran Special Collections Librarian Hardiman Library, University of Gal...
Marie Boran Special Collections Librarian Hardiman Library, University of Gal...
Library Association of Ireland
 
New Microsoft PowerPoint Presentation.pptx
New Microsoft PowerPoint Presentation.pptxNew Microsoft PowerPoint Presentation.pptx
New Microsoft PowerPoint Presentation.pptx
milanasargsyan5
 
CBSE - Grade 8 - Science - Chemistry - Metals and Non Metals - Worksheet
CBSE - Grade 8 - Science - Chemistry - Metals and Non Metals - WorksheetCBSE - Grade 8 - Science - Chemistry - Metals and Non Metals - Worksheet
CBSE - Grade 8 - Science - Chemistry - Metals and Non Metals - Worksheet
Sritoma Majumder
 
Phoenix – A Collaborative Renewal of Children’s and Young People’s Services C...
Phoenix – A Collaborative Renewal of Children’s and Young People’s Services C...Phoenix – A Collaborative Renewal of Children’s and Young People’s Services C...
Phoenix – A Collaborative Renewal of Children’s and Young People’s Services C...
Library Association of Ireland
 
Niamh Lucey, Mary Dunne. Health Sciences Libraries Group (LAI). Lighting the ...
Niamh Lucey, Mary Dunne. Health Sciences Libraries Group (LAI). Lighting the ...Niamh Lucey, Mary Dunne. Health Sciences Libraries Group (LAI). Lighting the ...
Niamh Lucey, Mary Dunne. Health Sciences Libraries Group (LAI). Lighting the ...
Library Association of Ireland
 
Geography Sem II Unit 1C Correlation of Geography with other school subjects
Geography Sem II Unit 1C Correlation of Geography with other school subjectsGeography Sem II Unit 1C Correlation of Geography with other school subjects
Geography Sem II Unit 1C Correlation of Geography with other school subjects
ProfDrShaikhImran
 
LDMMIA Reiki Master Spring 2025 Mini Updates
LDMMIA Reiki Master Spring 2025 Mini UpdatesLDMMIA Reiki Master Spring 2025 Mini Updates
LDMMIA Reiki Master Spring 2025 Mini Updates
LDM Mia eStudios
 
To study the nervous system of insect.pptx
To study the nervous system of insect.pptxTo study the nervous system of insect.pptx
To study the nervous system of insect.pptx
Arshad Shaikh
 
2541William_McCollough_DigitalDetox.docx
2541William_McCollough_DigitalDetox.docx2541William_McCollough_DigitalDetox.docx
2541William_McCollough_DigitalDetox.docx
contactwilliamm2546
 
One Hot encoding a revolution in Machine learning
One Hot encoding a revolution in Machine learningOne Hot encoding a revolution in Machine learning
One Hot encoding a revolution in Machine learning
momer9505
 
GDGLSPGCOER - Git and GitHub Workshop.pptx
GDGLSPGCOER - Git and GitHub Workshop.pptxGDGLSPGCOER - Git and GitHub Workshop.pptx
GDGLSPGCOER - Git and GitHub Workshop.pptx
azeenhodekar
 
Presentation of the MIPLM subject matter expert Erdem Kaya
Presentation of the MIPLM subject matter expert Erdem KayaPresentation of the MIPLM subject matter expert Erdem Kaya
Presentation of the MIPLM subject matter expert Erdem Kaya
MIPLM
 
Odoo Inventory Rules and Routes v17 - Odoo Slides
Odoo Inventory Rules and Routes v17 - Odoo SlidesOdoo Inventory Rules and Routes v17 - Odoo Slides
Odoo Inventory Rules and Routes v17 - Odoo Slides
Celine George
 
Anti-Depressants pharmacology 1slide.pptx
Anti-Depressants pharmacology 1slide.pptxAnti-Depressants pharmacology 1slide.pptx
Anti-Depressants pharmacology 1slide.pptx
Mayuri Chavan
 
How to track Cost and Revenue using Analytic Accounts in odoo Accounting, App...
How to track Cost and Revenue using Analytic Accounts in odoo Accounting, App...How to track Cost and Revenue using Analytic Accounts in odoo Accounting, App...
How to track Cost and Revenue using Analytic Accounts in odoo Accounting, App...
Celine George
 
Unit 6_Introduction_Phishing_Password Cracking.pdf
Unit 6_Introduction_Phishing_Password Cracking.pdfUnit 6_Introduction_Phishing_Password Cracking.pdf
Unit 6_Introduction_Phishing_Password Cracking.pdf
KanchanPatil34
 
Exploring-Substances-Acidic-Basic-and-Neutral.pdf
Exploring-Substances-Acidic-Basic-and-Neutral.pdfExploring-Substances-Acidic-Basic-and-Neutral.pdf
Exploring-Substances-Acidic-Basic-and-Neutral.pdf
Sandeep Swamy
 
How to Set warnings for invoicing specific customers in odoo
How to Set warnings for invoicing specific customers in odooHow to Set warnings for invoicing specific customers in odoo
How to Set warnings for invoicing specific customers in odoo
Celine George
 
How to manage Multiple Warehouses for multiple floors in odoo point of sale
How to manage Multiple Warehouses for multiple floors in odoo point of saleHow to manage Multiple Warehouses for multiple floors in odoo point of sale
How to manage Multiple Warehouses for multiple floors in odoo point of sale
Celine George
 
Marie Boran Special Collections Librarian Hardiman Library, University of Gal...
Marie Boran Special Collections Librarian Hardiman Library, University of Gal...Marie Boran Special Collections Librarian Hardiman Library, University of Gal...
Marie Boran Special Collections Librarian Hardiman Library, University of Gal...
Library Association of Ireland
 
Ad

Terraform in Depth (MEAP V01) Robert Hafner

  • 1. Terraform in Depth (MEAP V01) Robert Hafner pdf download https://ebookmeta.com/product/terraform-in-depth-meap-v01-robert- hafner/ Download more ebook from https://ebookmeta.com
  • 2. We believe these products will be a great fit for you. Click the link to download now, or visit ebookmeta.com to discover even more! Machine Learning Algorithms in Depth MEAP V01 Vadim Smolyakov https://ebookmeta.com/product/machine-learning-algorithms-in- depth-meap-v01-vadim-smolyakov/ CSS in Depth, Second Edition (MEAP V01) Keith Grant https://ebookmeta.com/product/css-in-depth-second-edition- meap-v01-keith-grant/ Terraform in Action 1st Edition Scott Winkler https://ebookmeta.com/product/terraform-in-action-1st-edition- scott-winkler/ Voyages of Discovery The Cinema of Frederick Wiseman Nonfictions Barry Keith Grant https://ebookmeta.com/product/voyages-of-discovery-the-cinema-of- frederick-wiseman-nonfictions-barry-keith-grant/
  • 3. The New Manager’s Survival Guide: Everything You Need to Know to Succeed in the Corporate World 1st Edition Steven Haines https://ebookmeta.com/product/the-new-managers-survival-guide- everything-you-need-to-know-to-succeed-in-the-corporate- world-1st-edition-steven-haines/ Korean Food Systems: Secrets of the K-Diet for Healthy Aging Dong-Hwa Shin (Editor) https://ebookmeta.com/product/korean-food-systems-secrets-of-the- k-diet-for-healthy-aging-dong-hwa-shin-editor/ Expatriate Compensation A practical and informative textbook for managing expatriate compensation mobility and international assignments in the world of work 1st Edition Mark Bussin https://ebookmeta.com/product/expatriate-compensation-a- practical-and-informative-textbook-for-managing-expatriate- compensation-mobility-and-international-assignments-in-the-world- of-work-1st-edition-mark-bussin/ Truth and Fake in the Post Factual Digital Age Distinctions in the Humanities and IT Sciences 1st Edition Klimczak https://ebookmeta.com/product/truth-and-fake-in-the-post-factual- digital-age-distinctions-in-the-humanities-and-it-sciences-1st- edition-klimczak/ Russian National Myth in Transition 24th Edition Ljubov Kisseljova https://ebookmeta.com/product/russian-national-myth-in- transition-24th-edition-ljubov-kisseljova/
  • 4. Cybersecurity A Practical Engineering Approach Chapman Hall CRC Textbooks in Computing 1st Edition Henrique M. D. Santos https://ebookmeta.com/product/cybersecurity-a-practical- engineering-approach-chapman-hall-crc-textbooks-in-computing-1st- edition-henrique-m-d-santos/
  • 6. Terraform in Depth MEAP v01 1. 1_A_brief_overview_of_Terraform 2. 2_Terraform_HCL_Components 3. 3_Terraform_Variables_and_Modules
  • 7. 1 A brief overview of Terraform This chapter covers Basic Terraform Components Introducing Infrastructure as Code Defining Declarative Languages A brief overview of Graphs The Terraform Deployment Workflow The first time I set up an AWS VPC, which is the system AWS uses to isolate networks from each other, by hand it took me several days. Admittedly I had never done it before so there was some research involved, but even once I’d done it a few times it still took several hours to manually create and configure a VPC that spanned multiple availability zones and had both public and private subnets. When I first discovered Terraform I attempted to build a VPC again. Instead of creating it manually, I wrote code using the Terraform language to describe my VPC and all of the components that it needed. When I first ran the code it’s not an exaggeration to say I was blown away- Terraform launched over 70 resources needed to create that highly available VPC Structure and it did it in about a minute. From then on whenever I needed a VPC it was a simple matter of reusing that already written code. A task that previously took hours was now an afterthought. In some ways just as important, that task was suddenly easy. Developers at the company I worked at who had no understanding of networking were able to spin up VPCs on their own because the difficult bits had already been programmed. They were no longer gated by someone with infrastructure experience. All they needed to know was that they
  • 8. needed the component and that they could get it by using the module we already built. This didn’t stop at networking, before long we had modules for launching web services, creating databases, storing objects, and utilizing CDNs. This had a huge effect on the company. Infrastructure stopped being “a project” and turned into a series of building blocks that we could reuse over and over again for completely different systems. Even the quality of these systems improved, as making an improvement for one project normally involved updating the building block component with new or improved functionality. If someone needed a new feature for the VPC module that feature became available to every project in the company. Terraform also led another huge culture shift at the companies I’ve worked at. Once Terraform is introduced systems become reproducible. That is to say, if you build out a platform with Terraform it is really easy to spin up another copy of it. Instead of having a single Test Environment for our products, each developer could spin up environments whenever they wanted. Developers could work on new features while having the entire real system there while working on new features. If someone wanted to experiment with changes it was easy for them to apply those changes to their own environment and iterate on them at will. The goal of this book is to help you learn how to use Terraform so you can bring these benefits to your projects. We’re going to start with the very basics so you can reap the benefits immediately and then expand on that knowledge with more advanced topics. 1.1 Terraform Overview Terraform exists to create and manage infrastructure. One of the major reasons that it is so powerful is that it provides a single unified interface to thousands of different vendors and software systems. It
  • 9. doesn’t matter if you’re creating files on a local system, launching machines into the cloud, editing DNS records, or even ordering a pizza- when you use Terraform you only have one language you need to know. Terraform accomplishes this by abstracting all of the system-specific components into Providers. Each vendor has their own resources and APIs, but all of that is wrapped up behind the Provider where the developer doesn’t need to worry about it. Instead, the Terraform Core (which lives in the Terraform CLI) translates between the Terraform Language that the developers have written to launch their systems and the underlying Providers, and the Providers then handle communication back to their vendor systems. Figure 1.1 Terraform has multiple levels of abstraction that allow developers to get things done without worrying about vendor-specific minutiae.
  • 11. This breakdown of components is powerful. The provider system lets vendors and community members develop their own Terraform interfaces which can be updated and released independently of Terraform. There are currently over 3280 providers on the Terraform Provider Registry that can all be used by developers. Terraform takes this approach in other areas as well. Terraform has a concept of State, which is a collection of metadata about the resources it manages. Every deployment has its own State. To manage that Terraform has Backends, which tell Terraform where to store the state. Backends are capable of storing multiple deployments, which Terraform breaks up into Workspaces. If you were to think about Terraform as a desktop program, like a word processor, then your backends would be like your filesystem and each workspace would be a different file you saved there. 1.1.1 Terraform Language One of the things that makes Terraform particularly unique amongst Infrastructure as Code (IaC) frameworks is its use of HCL (the Hashicorp Configuration Language). HCL is designed to be easily readable, even by people who may not be well-versed in the language. HCL is also a Declarative Language, which means that developers define their ideal end state rather than the steps needed to get there. Other IaC frameworks tend to either use existing Imperative Languages or try to build on top of data-only languages like YAML. Using a data-only language such as YAML has many limitations that are often addressed by using interpolation schemes that work against readability. HCL was created by Hashicorp and is used by multiple products- Packer, Nomad, and Consul all use HCL. Each Hashicorp project that uses HCL exposes its own resources and functions inside of HCL, with other subtle differences such as how they structure resources. This
  • 12. book is going to focus on the Terraform flavor of HCL, but once you understand the syntax it should be easy to jump between HCL flavors. Unless otherwise mentioned this book uses Terraform HCL in all examples. 1.1.2 Terraform CLI and Core The Terraform CLI is the primary way that Terraform projects are run and managed. It contains the engine that bridges the HCL written by developers with the vendor-specific libraries and APIs that are needed to manage the underlying resources. The CLI is used to create new infrastructure, update it, destroy it, and apply manual changes. The CLI has features that make it easier to run with CI/CD platforms, and many such platforms are built around it. The CLI also has commands meant to help developers, such as a built-in code formatting system and a system for generating visualizations of Terraform-managed infrastructure. The CLI is very heavily entwined with Terraform itself. The Terraform Core is built into the CLI and can only be accessed by the CLI. Speciality Continuous Integration and Deployment (CI/CD) systems that run Terraform, such as Terraform Cloud or Spacelift (which we’ll discuss in Chapter 5), are built around the CLI and call it directly. This differs from other languages like Go or C where you can compile code, but is similar to interpreted languages such as Python or Node where you need a tool to run the programs. For most developers, the CLI is going to be used extensively even if they also have CI/CD systems available. This book will include examples using the CLI as new topics are introduced. 1.1.3 Providers
  • 13. A Provider is a collection of Data Sources and Resources (both of which we’ll discuss in detail in the next chapter) for managing infrastructure with a particular vendor. Some providers are managed directly by Hashicorp while others are released by their specific vendors. Providers are generally written in Go (the same language Terraform is written in) and communicate with Terraform over gRPC (a high- performance Remote Procedure Call framework). They act as an interface between Terraform and the vendor systems the developer is trying to work with. In theory, providers can be written in other languages as long as they implement the appropriate gRPC interfaces, but in practice, there are only a few very experimental examples out there and none that are production ready. Don’t worry if you’ve never used gRPC before. It is not something you need to know to work with Terraform unless you’re making your own custom provider, and even then you’ll mostly be working with the existing Terraform libraries that work with GRPC. Since most vendors create and manage their own providers the vast majority of Terraform users will never need to create one on their own. Figure 1.2 Providers tend to have a one-to-one relationship with a Vendor or Platform. If you want to interact with AWS then you use the AWS
  • 14. Provider. GCP also has a provider, while Azure has released multiple providers to cover their products. Just like when using third-party libraries in another programming language, providers will have their own nomenclature, style, and documentation. 1.1.4 Vendors The whole purpose of Terraform is to manage infrastructure. Terraform itself is vendor agnostic- it doesn’t care what kind of infrastructure it manages, as long as it has a provider that exposes it. Each vendor has its own API, Resources, and methodology of working that has to be abstracted behind the provider. There are vendors for just about anything you can think of: Cloud Providers DNS Providers Data Analytics Virtual Machine Hosts Git Repositories Authentication Systems There are even providers for pizza delivery and another that gives read-only access to which Mcdonald's milkshake machines are currently broken. Terraform is an extremely well-adopted platform, and as a result, most vendors maintain fairly up-to-date providers. 1.1.5 Backends Backends are used to customize where a Workspace stores its state files. By default, a workspace uses the Local Backend, which means that if you run a workspace locally with no other changes then the state files will be stored directly on your local filesystem. This is great for testing but it means that the only way your workspace can be acted on is from your computer, which really doesn’t scale to teams.
  • 15. Backends solve that problem by allowing the state to be stored in another location. There are backends for the object storage systems for the major cloud vendors (AzureRM, GCS, S3, etc), for open source databases, and even an HTTP one that can be used to create simple custom services. Some backends go further than that and expose APIs that Terraform can use to run special operations. When using a backend other than local it is much easier to work as a team. In Chapter 6 we’ll discuss the different types of backends and their benefits. 1.1.6 Workspaces A Terraform Workspace represents a deployment of a Terraform code base with a specific backend. When comparing Terraform to other software development projects a Workspace can be compared to a specific installation of a program- like other software, you can have as many installations as you want, and each installation is completely independent of the others with its own configuration and saved data. Every Terraform Workspace includes the code base, the configuration for the specific workspace, and a list of all resources currently created in the workspace (this list is known as the state, and will be discussed further in chapter 4). Once code has been written a Terraform Workspace can be initialized from that code. Once configured and initialized the infrastructure from that code can be created, updated, and destroyed. A Terraform code base can have an unlimited amount of deployments. If each of these deployments was using the same backend, then each deployment would be given its own backend. It’s very common to have production, staging, and ephemeral feature deployments all sharing a common backend. Some deployments are long-lasting while others may exist for only as long as a feature is being developed. Developers working on Terraform projects will often
  • 16. have a local workspace they use so they can iterate quickly, with their local filesystem as the backend.. 1.2 Infrastructure as Code Infrastructure as Code (often abbreviated as IaC) is a class of technology that allows developers to provision infrastructure using coding practices. Terraform is not the only IaC tool- Pulumi is another vendor-agnostic framework, while AWS Cloudformation and GCP Deployment Manager are vendor-specific solutions. Unlike vendor- specific systems, such as Cloudformation, Terraform isn’t restricted to just working with a single vendor. Terraform also uses a custom declarative language that makes it much easier to use than other frameworks. Infrastructure as Code is a natural evolution of how systems get managed. There was a time individual machines would be individually configured for their job. System admins would share scripts or tutorials but mostly worked with machines directly. As cloud computing became more popular this simply did not scale. Configuration Management tools such as Puppet and Chef were developed to configure large groups of machines, while tools such as Packer were created to build golden images of machines for reuse. Infrastructure as Code frameworks take the next step and allow for entire platforms to be codified and repeatedly deployed. 1.2.1 Software Development Practices with IaC The first use of the phrase “software engineering” was in 1950, and in the over seventy years since then, the field has evolved and matured considerably. A huge part of the appeal of Infrastructure as Code is that many of the tools and practices that have been developed over the years for software development can be directly applied to infrastructure. Infrastructure as Code can be versioned with Git, scanned with linters for quality control and security, and get
  • 17. automatically tested using CI/CD. Even more than that, teams can apply the principles and practices developed for software engineering directly to infrastructure. This has benefits everywhere in the stack. The use of a version control system (VCS) such as git alongside a modern VCS Host such as Github or Gitlab adds numerous benefits, such as audit trails, versioning, and the ability for multiple people to work on the same project without stepping on each other’s toes as much. Branches can be created to test new features, while pull requests can require reviews from different teams and passing tests. This all adds up to improved quality, particularly for more complex systems. When done right this also means the ability to develop faster and with higher confidence even as system complexity grows. 1.2.2 Repeatability and Shareability Software allows for repeatability. If you write a program you can run that program over and over again. Bringing this repeatability to the infrastructure world allows developers to create building blocks that can be used repeatedly across their codebase and even across projects. In general configuring a piece of infrastructure- whether it’s a VPC (Virtual Private Cloud, a common component provided by cloud vendors such as GCP and AWS), an Autoscaling Group, or an Orchestration System such as Kubernetes- takes research and work. It also tends to take a lot of time to do manually. Wrapping that knowledge into a reproducible piece of software allows others to take advantage of and build on that work without needing to reproduce that labor. The reusable modules can also be improved over time, which allows those improvements to get pushed out across the stack. As an example, a company can create a VPC module that gets shared across multiple teams. Over time they may add more functionality,
  • 18. such as the use of VPC Endpoints or increased security monitoring. Terraform and other Infrastructure as Code frameworks allow those improvements to spread across the organization in the same way that software engineers upgrade the libraries they use for development. 1.2.3 Continuous Integration and Deployment An important part of software is integrating and deploying changes. Working with Infrastructure as Code is no exception. There are even CI/CD platforms that are built specifically for running Terraform. These Terraform-specific systems have gotten so popular that they’ve even gotten their own name: TACOS (for Terraform Automation & Collaboration Software). Hashicorp, the makers of Terraform, run a solution called Terraform Cloud that works as a SaaS and a self-hosted version called Terraform Enterprise. There are also third-party vendors like Spacelift and Scalr who run their own systems. Each of these platforms provides integration with Github and Gitlab. This allows them to automatically publish modules from git tags, run speculative plans to see what would happen if the code changes in a pull request were run, and even manage the deployment of changes as they are merged in. It’s common to use both a specialty system such as Terraform Cloud as well as a more traditional CI/CD system. The more general systems have the advantage of being more flexible in the types of jobs they can run. This lets developers add jobs for testing, formatting, linting, and more while keeping the results alongside the results for other projects that make up their platform. Continuous Integration and Deployment is one of the most important topics in Terraform, so much so that Chapter 7 is devoted to the topic. 1.3 Declarative Languages
  • 19. Terraform uses a Declarative Language to codify infrastructure. Declarative Languages are a class of language where the developer defines how something should look after the code has been run. With a declarative language, the focus is on defining the end state, and then the engine running the language creates a plan of actions to bring the system to the desired end state. Declarative Languages create their plans using a computer science concept called Directed Acyclic Graphs (DAGs), which in this context are basically a list of actions that have to be completed in a specific order. Terraform refers to these as “plans”. We’ll discuss DAGs in more depth in Chapter 5 when we discuss how to debug issues with Terraform Plans. Declarative Languages tend to be more popular among Configuration Management and Infrastructure as Code frameworks. Terraform HCL, the Kubernetes YAML language, Cloudformation’s YAML, and Puppet’s DSL are all examples of Declarative Languages. 1.3.1 Declarative versus Imperative Languages Most developers are familiar with Imperative Languages. When using languages such as Javascript and Bash the developer uses statements to explicitly change the state of the system. Imperative Languages describe how to do something, while Declarative Languages describe what the outcome should be. Declarative languages focus on the outcome rather than the steps to get to that outcome and are very different from Imperative Languages. One way to think about this is that Declarative Languages primarily use Nouns and Adjectives, while Imperative Languages primarily use Verbs. With Terraform you will never say “Check if this machine exists, create the machine if it does not exist, and then apply this configuration”. Instead, you will describe the machine that you want and Terraform itself will translate that into actions that result in that machine being created.
  • 20. Exploring the Variety of Random Documents with Different Content
  • 21. COMPOSITION. 1914 1915 1916 1917 Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigad Infantry. 1 Gd. Res. 1 Gd. Res. 1 Gd. Res. 1 Gd. Res. 1 Gd. Res. 1 Gd. Res. 1 Gd. Res. 1 Gd. Res. 1 Gd. Res. 2 Gd. Res. 2 Gd. Res. 2 Gd. Res. 2 Gd. Res. 15 Res. 64 Res. 15 Res. 64 Res. 64 Res. 64 Res. 93 Res. 93 Res. Gd. Res. Snipers Btn. Gd. Res. Snipers Btn. 1 Sqn. Gd. Res. Cavalry. Gd. Res. Dragoons (3 Sqns.). Gd. Res. Drag. Rgt. Gd. Res. Dragoon Rgt. (z Sqns.). Gd. Res. Drag. Rgt. (1st Sqn.). 1 Sqn. Rgt. Artillery. 1 Gd. Res. F. A. Rgt. 1 Gd. Res. F. A. Rgt. 1 Gd. Res. F. A. Rgt. 7 Gd. Art. Command. 8 Gd. A 3 Gd. Res. F. A. Rgt. 3 Gd. Res. F. A. Rgt. 3 Gd. Res. F. A. Rgt. 1 Gd. Res. F. A. Rgt. (9 Batteries). 1 Gd 2 Abt (Staff Btries 701 L 1269 1328 Engineers and Liaisions. 2d and 3d Field Cos. (1 Eng. Btn. 28). 2d and 3d Field Cos. (1 Eng. Btn. 28). (z) Eng. Btn. 28 Pion 1 Gd. Res. Pontoon Engs. 1 Gd. Res. Pontoon Engs. 2d and 3d Cos. 28 Pion. 2 Co. 1 Gd. Res. Tel. Detch. 1 Gd. Res. Tel. Detch. 5 Gd. T. M. Co. 3 Co. 5 Gd. T. M. Co. 401 (Gd.) Tel. Detch. 61 Se Sectio 401 Gd Comm 401 ( 17 W Medical and Veterinary. 266 Ambulance Co. 266 Am 395 Field Hospital. 389 Fie Vet. Hospital. 395 Fie 401 Vet Transport. M. T. Col. 701 M.
  • 22. HISTORY. 1914. Belgium. 1. At the beginning of the war the 1st Guard Reserve Division forming, together with the 3d Guard Division, the Guard Reserve Corps swept into Belgium—as part of the 2d Army under von Buelow—the 16th of August, crossed the Meuse at Ardenne (massacres) the 20th, and pushed on as far as Namur. On the 29th the two divisions (Guard Reserve Corps) were brought back to Aix-la-Chapelle, and left for east Prussia September 1. Poland. 2. The beginning of October the Guard Reserve Corps, attached to the Southern Army Group, took part in the invasion of the southern part of Poland, fought at Opatow (Oct. 4), and suffered severe losses at Lodz while retreating from the Russian armies. 3. During the winter of 1914–15 it fought on the Bzura. 1915. Poland. 1. In February, 1915, the Guard Reserve Corps was split up. The 1st Guard Reserve Division was sent to the north of the Vistula, in the Mlawa-Prasnysz region. By the 6th of March the 1st Guard Reserve Infantry Regiment had already had its thirty-ninth engagement there (letter). 2. In March the 93d Reserve Regiment was attached to the 4th Guard Division (new). During the summer of 1915 the 1st Guard Reserve Division was engaged in the operations to the north of the Vistula (von Gallwitz’s army). Smorgoni. 3. The pursuit of the Russians brought the division as far as the neighborhood of Smogorni-Vishnev, where it took part in violent fighting and where it was relieved the middle of September. France. 4. During the early days of October it entrained at Grodno for the western front. (Itinerary: Warsaw, Posen, Berlin, Hanover, Aix-la-Chapelle, Liège, Cambrai.) Cambrai.
  • 23. 5. It went into rest cantonments on the banks of the Scheldt between Marcoing and Bouchain (November-December). 1916. 1. The 1st Guard Reserve Division and the 4th Guard Division then formed the reconstituted Guard Reserve Corps. 2. During January and February, 1916, the division was employed on defensive works in the Wytschaete-Messines sector; it also held a sector in that region. At the same time it underwent a course of training in the neighborhood of Cambrai. Artois. 3. The beginning of May the division took over the sector south of Neuville-St. Vaast. Somme. 4. At the end of July it was engaged on the Somme (Belloy-Barleux). 5. After August 19 it spent some days at rest near Cambrai, and came back into line until September 8 between the Mouquet Farm and Martinpuich. It suffered local attacks, in which it was constantly pushed back with heavy losses. Flanders. 6. After a rest in the neighborhood of Cambrai it was sent to a calm sector to the north of Ypres, near the Ypres-Pilkem road. Somme. 7. November 5 the division returned to the Somme (Warlencourt) where it spent the winter of 1916–17. 1917. Somme. 1. In March, 1917, the 1st Guard Reserve Division commenced the withdrawal movement on the Hindenburg Line, leaving prisoners in rear-guard actions (PysGrevillers region). It was withdrawn from the front about March 20 to go to rest near Tournai. 2. The 1st Guard Reserve Division and the 4th Guard Division then became independent divisions. Artois. 3. April 25 the division took over the Oppy-Gavrelle sector and fought off the British attacks.
  • 24. 4. Relieved the beginning of May, it was sent to rest at Templeuve, and was later employed in the construction of defensive works near Cambrai (May). Flanders. 5. The 1st of June it was carried to Tourcoing, and from there to Warneton, June 8 it went into line to the east of Messines, where it relieved the 3d Bavarian Division, very much worn out the day before. It was itself withdrawn as early as the 12th. Artois. 6. The division then went back to Artois and held the Moeuvres-Pronville front (June 21–22 to Aug. 16) taking part in no important action. Lens. 7. After some days rest at Douai, it became reengaged August 21, on the Lens front, in a series of very heavy conflicts following the attack of August 15. The 64th Reserve Infantry Regiment was particularly exhausted. Gas attacks caused it to suffer equally heavy losses in September and December. 8. The division remained in this sector until the end of 1917. In November it sent some elements to reinforce the Cambrai front against the British attack. VALUE—1917 ESTIMATE. The division was recruited in all provinces of Prussia, like the rest of the Guard. Despite their numbers, the 64th and 93d Reserve Infantry Regiments do not come (to any considerable extent) from the 3d and 4th Corps Districts. The 93d Reserve Infantry Regiments came from what was, before its dissolution, a “guard landwehr battalion (Magdeburg)” (seal of pay book). The 1st Guard Reserve Division is not above the average German division in value. The Alsatians in its ranks were withdrawn and sent to Russia in 1916, but there are still numerous Poles, who do not constitute an element of strength. It seems much less to be feared than most of the Prussian organizations that do not have the “Litze” (braiding), less, too, than the Wurttemburgers of the 13th Corps District and the better Bavarian troops. (British document, February, 1918.) 1918. Lens. 1. The 1st Guard Reserve Division was relieved in the Lens sector by the 220th Division the first of the year and was withdrawn, remaining at rest in this region until it relieved the 220th Division, February 4. Carvin. 2. The division was relieved by the 220th Division February 20 and went to the Carvin area, where it went through a course of training in open warfare so as to become the assault division of the Souchez Group.
  • 25. Somme. 3. The opening day of the March 21 offensive the division was identified at Lagnicourt (northeast of Bapaume). It was very probably “leap-frogged” by some other division the next day, but it reappeared the 27th near Bucquoy, in a straight line with the advance taken as a whole. It suffered exceedingly heavy losses, finally having to utilize its pioneers as Infantry. La Bassée. 4. April 20 the division was withdrawn from the Somme front and marched to Givenchy (just north of the La Bassée Canal) the next day, where it relieved the 4th Ersatz Division. It fought there until about May 21, giving a good account of itself, considering its weakened condition, and as a result its brigade commander was promoted a lieutenant general, and the division commander received Pour le Mérite. Grammont. 5. The division moved to the Grammont area, where it underwent a course of training with artillery and aeroplanes in preparation for a coming offensive. La Bassée. 6. It relieved the 38th Division at Festubert, north of the La Bassée Canal July 5; it was relieved July 14 by the 18th Reserve Division. 7. The division rested in the Fauquissart area, and then relieved the 12th Reserve Division north of Hinges the night of August 2–3. It was relieved about August 26 by extension of front of the neighboring divisions. Cambrai. 8. The 2d of September the division reinforced the front north of the Arras-Cambrai Road. About the 10th it side-slipped south, for it was identified southwest of Moeuvres. It remained here, suffering heavy casualties (450 prisoners), and was relieved by the 7th Cavalry Division during the night of September 22–23. 9. It remained in this region, however, and was thrown back into line in attempt to stem the British advance, being identified at Bourlon September 28; withdrawn about October 5. 10. The division returned October 16–17, relieving the 30th Division east of Neuvilly, and was withdrawn about the 20th. 11. November 4 it was identified north of Landrecies. It took part in the general retirement, being identified south of Berlaimont November 5, and east of Maubeuge on the 9th. VALUE—1918 ESTIMATE. The 1st Guard Reserve Division was rated as in the first of four classes. During 1918 it did not fight brilliantly, but it was always to be depended upon. It was called upon to fight much in heavy engagements, and suffered very severe losses.
  • 27. COMPOSITION. 1914–15 1916 1917 1918 Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Infantry. 1 Gd. Mixed Ers. 1 Gd. Ers. (1, 2, and 6 Gd. Bde. Ers. Btns.). 1 Gd. Mixed Ers. 6 Gd. (former 1 Gd. Ers.). Gd. Ers. 6 Gd. 7 Gd. 399. Gd. Ers. 6 Gd. 7 Gd. 399. 2 Gd. Ers. (3,4 and 5 Gd. Bde. Ers. Btns.). 7 Gd. (former 2 Gd. Ers.). 5 Gd. Mixed Ers. 357 (5 Ers. Btn. 2d C. Dist. and 5 Ers. Btn. 1 C. Dist.). 5 Gd. Mixed Ers. 357. 358. 358 (6, 7, and 8 Ers. Btns. 2d C. Dist.). Cavalry. Gd. Ers. Cav. Detach. 1st Sqn. Gd. Cav. Rgt. 5th Sqn. 2d Gd. Uhlan Regt. 5 Sqn. 2 Gd. Uhlan Rgt. Artillery. 1st Ers. Abt. (1st and 2d Gd. F. A. Rgt.). 7th Gd. F. A. Rgt. 6th Gd. Art. Command: 6 Gd. Art. Command: 38th F. A. Rgt. 7 Gd. F. A. Rgt. 7 Gd. F. A. Rgt. 89 Ft. A. Btn. 759 Light Am. Col. 814 Light Am. Col. 886 Light Am. Col. Engineers and Liaisons. 1 Co. Gd. Ers. Pion. Btn. 301 (Gd.) Pion. Co. Eng. Btn.: 501 Pion. Btn.: 1 Ers. Co. 2 Pion. Btn. 302 Pion. Co. 301 (Gd.) Pion. Co. 301 Gd. Pion. Co. 7 Gd. T. M. Co. 302 Pion. Co. 302 Pion. Co. 7 Gd. T. M. Co. 49 Searchlight Section. 292 Searchlight Section. 551 Signals Command: 551 Gd. Tel. Detch. 551 Gd. Tel. Detch. 36 Wireless Detch. Medical and Veterinary. 62 Ambulance Co. 63 Ambulance Co. 133 Field Hospital. 133 Field Hospital. 134 Field Hospital. 134 Field Hospital. 209 Vet. Hospital. 209 Vet. Hospital. Transport. M. T. Col. 761 M. T. Col.
  • 28. Attached. 32 Ldw. Btn. 2d C. Dist. (1915). 81 Labor Btn.
  • 29. HISTORY. 1914–15. Formed in August, 1914, by grouping the Guard Ersatz Battalions and the Ersatz Battalions of the 2d Corps District, the division detrained at Saverne August 19. In reserve during the battle on the 20th, it crossed the frontier on the 23d with the 6th Army, fought southeast of Lunéville the first days of September, and toward the end of the same month it went to Haye (Woevre). Haye. 1. There it formed part of the Ersatz Corps and held various sectors of the region until March, 1916 (St. Baussant, Flirey, Bois de Mort-Mare, etc.). 1916. 1. In March, 1916, the 1st Guard Ersatz Mixed Bde. (6th and 7th Guard Regiments) left the Apremont region to go to the north of Combres and to the south of Fresnes-en-Woevre. Verdun. 2. After a rest of 10 days at St. Marie aux Chênes (Apr. 24-May 3) it went to the front north of Verdun. May 11–12 it entered line in the Bois-Nawé (west of Douaumont), where it took part in several attacks (notably that of May 25). It rested in June, and fought again, beginning July 1, to the southeast of the Thiaumont works. 3. The 5th Guard Ersatz Mixed Bde. which had remained in the Montsec region, entrained at Vigneulles-St. Benoît (July 23–26), detrained at Spincourt, and during the night of August 3–4 entered line to the east of Fleury. Together with the 1st Bde., it took part in the attack of August 5, and both suffered heavy losses. 4. The Guard Ersatz Division was withdrawn from line the end of August, after having lost 50 per cent of its infantry before Verdun. Flirey-en-Haye. 5. After a rest in the region west of Spincourt it went back into line to the north of Flirey-en- Haye; it remained there until about the 5th of November. In September the 357th and the 358th Infantry Regiments were attached to the Bavarian Ersatz Division and the 214th Division, respectively. The Guard Ersatz Division received in exchange a regiment newly formed from companies taken from the 6th and 7th Guard and the 357th Infantry Regiments.
  • 30. Cote du Poivre. 6. The division rested in November, leaving December 18 to go to the region north of Côte du Poivre, following the French attack of December 15. 1917. 1. About January 15, 1917, the Guard Ersatz Division was withdrawn from the Verdun front and sent to Champagne (St. Hilaire sector). 2. Relieved toward the end of March, the division was sent to reserve in the Chateau-Porcien region, which it quitted April 12. Aisne. 3. April 16 and the days following elements of the division counterattacked toward Bermericourt; then relieving (Apr. 18) the remnants of the 21st Division, the Guard Ersatz Division went through the French attack of May 4. It left this front soon after. 4. May; rest in rear of the Champagne front. Russia. 5. After a stay in a sector in Haye to the north of Flirey (from the beginning of June to the middle of July), the division was carried to the eastern front (July 23–27). (Itinerary: Sarrebrucken, Kreuznach, Frankfort, Leipsic, Cottbus, Glogau, Warsaw, Grodno, Vilna.) 6. The Kaiser reviewed the division July 29. From the 1st to the 17th of August it was trained in open warfare near Vilna. Riga. 7. Taken to Chavli (Aug. 28), then to the Gross-Ekkau region, the division entered line in the Uxkuell region and participated in the Riga offensive, entering Riga September 3–4. France. 8. September 8 the division entrained for the western front. (Itinerary: Chavli, Kovno, Eydtkuhnen, Insterberg, Posen, Cottbus, Leipsic, Frankfort, Thionville, Briey.) It encamped near Spincourt, and then, about October 10, entered line to the north of Bezonvaux. VALUE—1917 ESTIMATE. The Guard Ersatz Division was recruited all over Prussia just as all the other Guard divisions.
  • 31. Good division. The 6th and 7th Guard Regiments are not to be considered as tried troops. The 399th Infantry Regiment seems to have but a slight combative value. The men are said to have shown dissatisfaction when they left Russia for the western front. Desertions are said to have taken place en route. (Inter. pris. Dec. 15–17.) 1918. Verdun. 1. The division remained north of Verdun until February 20, when it was relieved and went to Damvillers, entrained, and went to the Arlon area and was trained until March 15. Somme. 2. It entrained at Arlon on that date and traveled via Charleroi to Mons, where it arrived the following day. By night marches the division passed through Maubeuge-Bavai-Englefontaine- Fontaine au Bois-Bazuel-Le Cateau-Busigny-Bohain-Fresnoy-Péronne, without taking part in any fighting. It came into line March 25–26, and was heavily engaged at Proyart the 27th. Hangard. 3. The division was withdrawn about April 6, after having large casualties, and reinforced the front near Hangard the night of April 9–10, not being relieved until about May 4. Flanking divisions extended their fronts. Mons. 4. It rested northwest of Mons until the end of June. Champagne. 5. It then went to reserve in Champagne, and entered line west of Auberive July 15. It was withdrawn on the 21st. Oulchy le Chateau. 6. The division was identified in line north of Oulchy le Chateau July 29, where it fought until withdrawn, about August 9. Alsace.
  • 32. 7. It went into rest cantonments at Helfrantzkirch (northeast of Basle), and remained there until September 25. Ypres. 8. Prisoners of the division were captured southwest of Roulers, and they stated that it entered line October 5–6. The division remained in line fighting stubbornly, but to no purpose, until withdrawn, November 7. VALUE—1918 ESTIMATE. Reliable information is to the effect that the Guard Ersatz, the Guard Cavalry, and the Jaeger Divisions bore the title “Oberste Heeresleitungs Angriffsdivisionen,” and that they were held under the direct control of the Supreme Command. Nevertheless, the Guard Ersatz has always been considered as being in the second of four classes.
  • 34. COMPOSITION. 1918 Brigade. Regiment. Infantry. 5 Ldw. Inf. Cavalry. 11 Cav. 1 Cuirassier. 8 Drag. 14 Cav. 5 Uhlan. 8 Hus. 11 Hus. 38 Cav. 2 Mounted Jag. 6 Mounted Jag. 4 Cuirassier. Gd. Cuirassier (1 Sqn. of 4 Mounted Jag.). Artillery. 132 Art. Command: 3 Gd. F. A. Rgt. 226 F. A. Rgt. Engineers and Liaisons. 412 Pion. Btn.: 307 Pion. Co. 2 Ers. Pion. Co. 183 Wireless Detch. 286 and 385 T. M. Cos. Medical and Veterinary. 257 Ambulance Co. 302 Field Hospital. 315 Field Hospital. 286 Vet. Hospital. Attached. Balloon Sqn. No. 33. 290 Reconnaissance Flight.
  • 35. HISTORY. 1918. 1. The division left the eastern theater in the middle of March. It was reconstituted in the camp at Zossen (south of Berlin), and was then moved to the Maubeuge area, where it underwent six weeks’ training for open warfare. It now consisted of 9 dismounted regiments, grouped in 3 brigades, 2 companies of pioneers, and a trench mortar company. Champagne. 2. About May 28 the division relieved the 23d Division east of the Suippe. It was relieved about July 2, and on the 15th returned to strengthen the battle front near Souain. It was relieved about July 20. Soissons. 3. The division was moved to the Soissons area, and on August 22 relieved the Jaeger Division east of Soissons. It retired from the front about September 5. Champagne. 4. On September 23–24 it relieved the 15th Bavarian Division north of Prosnes, and was thereafter constantly in line in Champagne. The
  • 36. direction of its final retreat lay through Herpy (Nov. 1), St. Ferguex (5th), Rethel (6th), and Rocquigny (7th). VALUE. The division was rated as second class. It was reported to be one of the General Headquarters attack divisions held under direct control of the Supreme Command. After the failure of the July offensive east of Reims the division was constantly on the defensive.
  • 38. COMPOSITION. 1914 1915 1916 1917 Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigad Infantry. 1. 1 Gren. 1. 1 Gren. 1. 1 Gren. 1. 1 Gren. 1. 41. 41. 41. 3 Gren. 2. 3 Gren. 2. 3 Gren. 2. 3 Gren. 43. 43. 43. 43. Cavalry. 8 Uhlan. Regt. (?) (?) 3d Sqn. 8 Uhlan. Regt. 3 Sqn. Artillery. 1 Brig.: 1 Brig.: 1 Brig.: (z) Art. Commandt: 1 Art. C 16 F. A. Rgt. 16 F. A. Rgt. 16 F. A. Rgt. 16 F. A. Rgt. 16 F. 52 F. A. Rgt. 52 F. A. Rgt. 52 F. A. Rgt. 52 F. A. Rgt. 1 Abt (Staff Btries 1083 1095 1096 Engineers and Liaisons. 1 Eng. Btn. (1 C. Dist.): 1 Eng. Btn. (1 C. Dist.): 112 Eng. Btn.: 110 Pio Field Co. 1 Pion. 271 Pion. Co. (Oct., 1917). 3d Co. 1 Pions. (z). 3 Co. 1 Pontoon Engs. 1 Pontoon Engs. 271 Pion. Co. 271 P 1 Tel. Detch. 1 Tel. Detch. 1 T. M. Co. 1 T. M 1 T. M. Co. 1 Tel. Detch. 108 S Sectio 3d Co. 1 Pions. 305, 311, 312, and 392 Searchlight Sections. 1 Signa 1 Tel 43 W Medical and Veterinary. 4 Ambulance Co. 4 Ambu Field Hospital. 13 Field 1 Vet. Hospital. 16 Field 1 Vet. H Transport. M. T. Col. 534 M. Attached. 100 Labor Btn. 66 M. G. S. S. Detch. 54, 55, 56, and 57 Light M. G. Sections.
  • 39. HISTORY. 1914–15. Along with the 2d Division, the 1st Division forms the 1st Army Corps (Koenigsberg). Russia. 1. The 1st Army Corps was engaged on the Russian front at the very beginning of the war. 2. Up until November the 1st Division participated in the operations of East Prussia, and notably in the battle of Tannenberg (Aug. 27–29). 3. In December the two divisions of the 1st Corps separated. The 2d Division remained in the north; the 1st Division went to the 9th Army, from December, 1914, to January, 1915 (Bzura-Rawka), then to the Army of the South, operating in the Carpathians and on the Dniester, from February, 1915, to February, 1916. 1916. France. 1. The division went to France in March, 1916. The 41st Infantry Regiment detrained March 13 near Metz; the 48th Infantry Regiment at Hagondange March 5. Verdun. 2. The division was put in line near Vaux April 20, fought in the bois de la Caillette in May, in the bois de Vaux Chapitre, and the bois Fumin in June and July. It suffered enormous losses there. In the 1st Company of the 41st Infantry Regiment, the numbers on the pay books passed from 1,359 (Apr. 10) to 1,674 (July 19), indicating the arrival of at least 316 reinforcements. From the beginning of the war until July, 1916, the regiment had received an average of 1,360 men per company. Russia. 3. At the end of July, 1916, the 1st Division, leaving behind the 41st Infantry Regiment, which fought before Verdun in August, was once more taken to the eastern front, where it formed part of the Carpathian Corps. 1917. Bukovina. 1. In July, 1917, the division was in the Kirlibaba-Dorna-Vatra region. Beginning July 27, it followed up the retreating Russians, halting, early in August, in the Sereth region.
  • 40. France. 2. The division entrained, the beginning of December, near Czernowitz, and was carried to the French front. (Itinerary: Kolomea, Stanislau, Lemberg, Tarnow, Oppeln, Breslau, Dresden, Leipsic, Halle, Cassel, Coblentz, Treves.) Ordered to Lorraine, it was sent to the region east of Etain, relieving the 13th Reserve Division and occupying the sector in front of Moulainville (Dec. 27; still there Jan. 23, 1918). VALUE—1917 ESTIMATE. Theoretically, the regiments of the 1st Division are recruited in East Prussia, but since the 1st Corps District, sparsely populated and of restricted size, could not keep it up alone, the elements coming from outside this district are numerous. During the stay on the eastern front Alsace-Lorrainers were used in considerable number. While in France the division’s ranks were filled up with the aid of the abundant resources of Brandenburg and Silesia (3rd and 4th Corps Districts); consequently, the division does not display to any degree the local character like the majority of the German divisions. The 1st Division was on the Russian front from August, 1914, until December, 1917, with the exception of the period April-July, 1916, during which it was engaged before Verdun. The troops of the division fraternized with the Russians for about three weeks in April, but this came to an end early in May with the arrival opposite them of new Russian troops, who received their advances with bullets. (Inter. pris., Jan. 24, 1918.) 1918. Woevre. 1. The division remained in line in the Verdun sector until relieved by the 11th Bavarian division about February 15. 2. It moved to the Conflans area, where it went through a course of training in open warfare in order to fit itself to become an assault division. At this time, too, it exchanged its Alsatians for Prussians of the 78th Reserve Division. Somme. 3. March 27 the division reinforced the front at Bray, north of the Somme. It fought until the 30th, and lost to such an extent that its companies, which had been filled up while in the Conflans area, were reduced to an average strength of 40 men. 4. It was withdrawn March 30, and rested immediately in rear of the position it had held in line until about April 19. 5. The following day the division went back into line just south of the Somme, and immediately suffered heavily. It was relieved May 2 by the 24th Reserve Division. 6. The division went to rest in the Peruwelz area, and then had some more training in the same region. Champagne. 7. Early in July the division was identified in reserve near Hirson. 8. July 16 it entered line near St. Hilaire, and was withdrawn the 20th.
  • 41. Rheims. 9. It was immediately thrown into line in the Bois de Vrigny, where it fought in an attempt to prevent the Allies from annihilating the German troops in the Soissons-Chateau Thierry-Rheims pocket. Laon. 10. About August 10 the division was withdrawn and went to rest in the region of Laon. Laffaux. 11. September 3 it relieved the 27th Division near Laffaux, and, being surprised by a French attack, lost heavily (2,300 prisoners). 12. September 16 it was relieved by the 29th Division. Rheims. 13. The division came back into line near Betheny (northeast of Rheims) on October 2 and was withdrawn about the 8th. St. Fergeux. 14. It reentered line in the St. Fergeux region October 14, and was again withdrawn the 29th. Liart. 15. November 7 the division was identified near Liart (south of Rocroi), and remained in line until the armistice. VALUE—1918 ESTIMATE. The division was rated as third class.
  • 43. COMPOSITION. 1914 1915 1916 1917 Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigade. Regiment. Brigad Infantry. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res. 1 Res. 3 Res. 3 Res. 3 Res. 3 Res. 72 Res. 18 Res. 72 Res. 18 Res. 72 Res. 18 Res. 59 Res. 59 Res. 59 Res. 59 Res. 1 Res. Jag. Btn. 1 Res. Jag. Btn. 1 Res. Jag. Btn. 1 Res. Jag. Btn. Cavalry. 1 Res. Uhl. Rgt. (3 Sqns.). 1 Res. Uhl. Rgt. 1 Res. Uhl. Rgt. 1 Res. Uhl. Rgt. (. Sqns.). 4 Sqn. 1 Res. Ers. Cav. Rgt. (3 Sqns.). 1 Res. Ers. Cav. Regt. Artillery. 1 Res. F. A. Rgt. (6 Btries.). 1 Res. F. A. Rgt. 1 Res. F. A. Rgt. 1 Res. F. A. Rgt. (9 Btries.). 1 Res. F 2 Abt. 1 Rgt. 1363 Li 1390 Li 1393 Li Engineers and Liaisons. 2 Eng. Btn. No. 1: 4 Field Co. 2d Pion. Btn. 301 Eng. Btn. (.): 301 Pio Res. Co. 1 Pion. Btn. 201 T. M. Co. 4 Co. Pion. Btn. 4 Co. 1 Res. Pontoon Engs. 1 Res. Pontoon Engs. 1 Co. Pion. Btn. 1 Co. 1 Res. Tel. Detch. 1 Res. Tel. Detch. 201 T. M. Co. 201 T 348 Searchlight Section. 31 Se Sectio Tel. Detch. 401 Sig 401 T 158 W Medical and Veterinary. 501 Ambulance Co. 501 Am 399 Field Hospital. 399 Fie 9 Res. Field Hospital. 9 Res. F Vet. Hospital. 137 Vet Transport. M. T. Col.
  • 44. HISTORY. 1914–15. Russia. 1. The 1st Reserve Division was on the Russian front from August, 1914, until November 1, 1917, at which time it entrained for France. East Prussia-Poland. 2. In 1914 it and the 36th Reserve Division formed the 1st Reserve Corps (Gen. Otto von Buelow). It took part in the operations of East Prussia (Hindenburg’s Army), in the Lodz maneuver (Von Mackensen’s Army), and in the combats on the Bzura. 3. In February, 1915, the division was in the Prasnysz region, northeast of the Bohr-Narew line. Courland. 4. In May, as part of Eichhorn’s Army, it took part in the raid on Courland. 1916. Galicia. 1. It was on the Dvina in the Friedrichstadt region until July. 2. In August it was identified in Galicia, in Bothmer’s Army, opposed to the Broussiloff offensive. Here it had heavy losses. (The 11th Company of the 3d Infantry Regiment, in particular, was reduced to 30 men.) During September the division was reinforced. The depot at Friedrichstadt, near Warsaw, was completely emptied to make good its losses. Courland. 3. Toward the end of September elements of the division were in line near Friedrichstadt, along the Dvina, in a calm sector. The 18th Reserve Infantry Regiment was attached to the newly formed 225th Division. 1917. 1. January 5, 1917, the division was taken to the Mitau region, where it helped stop the Russian attack. Losses in this sector were light, but there was considerable discontent due to the cold. 2. The division was relieved about the 15th of March and sent to the neighborhood of Gross-Eckau, near Mitau, where it rested two months.