Complete Guide to Terraform AWS

We’re continuing our series on Terraform AWS with a post that breaks down the basics.

APR 30, 2021 | JESSICA ERDMAN
undefined

We’re continuing our series on Terraform AWS with a post that breaks down the basics. The world of Terraform AWS can be described as complex--from AWS storage to AWS best practices, there’s a depth of knowledge necessary to get familiar with Terraform AWS.

Whether you’re an expert at Terraform AWS or just getting started, it’s our goal at InfraCode to provide you with clear and easy-to-understand information at every level. The number of resources out there is abundant but overwhelming. That’s why we create simplified guides that are immediately usable and always understandable.

If you’re interested in what we’re working on at InfraCode, we encourage you to join our Slack and try out our free tool, InfraSketch.

In this article, we’ll dive into:

  • A Beginner’s Overview to Terraform AWS
  • Managing AWS Storage
  • Terraform AWS Best Practices

A Beginner’s Overview to Terraform AWS

AWS is a cloud platform with cloud-based products such as storage, networking, and analytics. AWS gives you a platform to set up your infrastructure, but you’ll still need some type of tool that helps you write your Infrastructure as Code and later spin up the infrastructure on AWS. Enter Terraform.

Of course, there are some prerequisites before you create a Terraform AWS template, such as installing Terraform, setting up an AWS account, receiving an access key, and configuring your infrastructure through a command.

For a full guide and walk-through, check out our blog post on getting started with Terraform AWS.

A Terraform template defines your infrastructure state and includes 3 files such as main.tf; variables.tf; and outputs.tf.

The first step is to create a main.tf file where we can describe the provider and resources.

Note: For a full tutorial (including usable code), please refer to this article.

After defining the provider block, you’ll need to define the resource block. Inside the resource block, you can write configurations that can be selected from Amazon marketplace based on your specific needs. Then, you’ll specify what kind of EC2 instance you need, which will dictate the memory available.

For those short on time, you can refer to the below image to remember how to spin off a Terraform AWS server:

For more in-depth information, we have many articles on Terraform AWS that go into detail. You can find them here.

Managing AWS Storage

Storage is a vital part of cloud computing and the process of choosing storage for data can make a huge difference in your work. For Terraform AWS, we’ll go over 3 types of storage which include:


1. Terraform AWS S3 buckets to create a static website
AWS S3 (Simple Storage Service) is an object storage service provided by AWS. S3 has a rich set of features and APIs which makes it very easy to use and integrate with other services. S3 offers various storage classes that differ in terms of availability, durability, and accessibility.


2. Provisioning EBS volume and attaching it to a Terraform EC2 instance
Elastic Block Store are disk volumes that can be attached to EC2 instances. Imagine EC2 instances as machines with CPUs and RAM with some storage capacity. This storage capacity is essentially an EBS store, unless you chose an AMI with instance store.

Additional EBS volumes can also be attached and mounted to EC2 instances for additional storage. EBS volumes exist independently, meaning their lifecycle is not dependent on the EC2 instance they are attached to.

Learn how to create an EBS volume using Terraform and attach it to an EC2 instance - again using Terraform.


3. Provisioning RDS instances
RDS is a managed relational database service by AWS. It allows us to create a hosted database using engines like MySQL, Aurora, Oracle, MariaDB, MS SQL Server, and PostgreSQL. RDS offers features like Multi-AZ deployments and read replicas which improve the availability and resiliency of databases drastically, as compared to traditional database deployments.

Here’s how to create an RBS instance.

Remember that each of the subdirectories contains a file - provider.tf - which declares the Terraform AWS provider and the intended region. The subdirectories also have - variables.tf and variables.tfvars - files. For a full explanation, refer to Terraform for AWS Compute.

Terraform AWS Best Practices

As with any operational practice, it’s best to adhere to best practices before getting too tangled in the details. For Terraform AWS specifically, we believe there are 5 best practices to follow.

We’ll give you a brief summary here, and if you’d like to go into more detail, you can check out this article.

AWS Best Practice 1: Operational Excellence

The most important feature of any operational procedure in today’s age is automation, which is the key to any DevOps practice trying to roll out product features more frequently than ever.

AWS Best Practice 2: Performance Efficiency

There are ways in which you can gain advantages by shifting your current on-prem data centers to the cloud.

Keep a constant eye on improving the infrastructure and reflect any insights directly in Terraform code.

AWS Best Practice 3: Security

Security is, perhaps, one of the most discussed topics in the cloud ecosystem.

Use Terraform to define in-depth security policies for users as well as cloud infrastructure. Regarding user management, AWS works on the principle of least privilege. Use Terraform scripts to define your authorization model for any user that has access to AWS resources.

AWS Best Practice 4: Reliability

Production systems are usually designed in high availability architecture.

It ensures that the services are available irrespective of any event. Managing sudden or scheduled traffic surges, failovers caused due to any reason becomes easy by leveraging AWS platform features like autoscaling and multi-AZ deployments.

AWS Best Practice 5: Monitoring and Cost Optimization

To gain transparency of your workloads running in AWS, monitoring needs to be implemented to keep track of resource utilization. Monitoring is not a switch that can be turned on or off. Most of the time, customers require tailor-made monitoring solutions.

Note: For examples and code, check out the full article on Managing AWS Best Practices.


Conclusion

In this post, we gave an overview of how to manage AWS storage, Terraform AWS best practices, and a general introduction to Terraform AWS.

We have a ton of other resources available to learn about Terraform for AWS. You can find them here.

Interested in learning more about Terraform for AWS? Join our Slack community to connect with DevOps experts and continue the conversation.