Pure and mixed templates:
Infrastructure-as-a-code is a declarative paradigm that is a
language for describing infrastructure and the state that it must achieve. The
service that understands this language supports tags, RBAC, declarative syntax,
locks, policies, and logs for the resources and their create, update, and
delete operations which can be exposed via the command-line interface, scripts,
web requests, and the user interface. Declarative style also helps to boost
agility, productivity, and quality of work within the organizations.
Template providers often go to great lengths to determine the
convention, syntax and semantics that authors can use to describe the
infrastructure to be setup. Many provide common forms of expressing
infrastructure and equivalents that are similar across providers. Authors,
however, rely on tools to import and export infrastructure. Consequently, they
must mix and match templates.
One such template provider is AWS cloud’s CloudFormation. Terraform
is the open-source equivalent that helps the users with the task of setting up
and provisioning datacenter infrastructure independent of clouds. These cloud
configuration files can be shared among team members, treated as code, edited,
reviewed and versioned.
Terraform allows including Json and Yaml in the templates and
state files using built-in functions called jsonencode and yamlencode
respectively. With the tools to export templates in one of the two well-known
forms, it becomes easy to import in Terraform with these two built-in functions.
Terraform can also be used to read and export existing cloud infrastructure in its
syntax but often they may be exported in ugly compressed hard-to-read format
and these two built-in functions allow multi-line display of the same content
which makes it more readable.
AWS CloudFormation has a certain appeal for being AWS native
with a common language to model and provision AWS and third-party resources. It
abstracts the nuances in managing AWS resources and their dependencies making
it easier for creating and deleting resources in a predictable manner. It makes
versioning and iterating of the infrastructure more accessible. It supports
iterative testing as well as rollback.
Terraform’s appeal is that it can be used for multi-cloud
deployment. For example, it deploys serverless functions with AWS Lambda,
manage Microsoft Azure Active Directory resources, and provision a load
balancer in Google cloud.
Both facilitate state management. With CloudFormation, users
can perform drift detection on all of their assets and get notifications when
something changes. It also determines dependencies and performs certain
validations before a delete command is honored. Terraform stores the state of
the infrastructure on the provisioning computer, or in a remote site in
proprietary JSON which serves to describe and configure the resources. The
state management is automatically done with no user involvement by
CloudFormation whereas Terraform requires you to specify the remote store or
fallback to local disk to save state.
Both have their unique ways for addressing flexibility for
changing requirements. Terraform has modules which are containers for multiple
resources that are used together and CloudFormation utilizes a system called
“nested stacks” where templates can be called from within templates. A benefit
of Terraform is increased flexibility over CloudFormation regarding modularity.
They also differ in how they handle configuration and
parameters. Terraform uses provider specific data sources. The implementation
is modular allowing data to be fetched and reused. CloudFormation uses up to 60
parameters per template that must be of a type that CloudFormation understands.
They must be declared or retrieved from the System Manager parameter store and
used within the template.
Both are powerful cloud infrastructure management tools, but one is more
favorable for cloud-agnostic support. It also ties in very well with DevOps
automations such as GitLab. Finally, having an abstraction over cloud lock-ins
might also be beneficial to the organization in the long run.
No comments:
Post a Comment