Open In App

How To Create EMR Cluster In AWS Using Terraform ?

In today’s data-driven world, big data processing has become an integral part of many organizations’ workflows. Amazon EMR (Elastic MapReduce) is a cloud-based platform provided by Amazon Web Services (AWS) that simplifies the process of running and scaling Apache Hadoop and Apache Spark clusters for big data processing. EMR takes care of provisioning compute resources, installing and configuring the required software, and managing the cluster lifecycle, allowing you to focus on your data processing tasks rather than the underlying infrastructure.

While you can create an EMR cluster using the AWS Management Console or Command Line Interface (CLI), managing infrastructure as code with Terraform offers several advantages. Terraform is an open-source Infrastructure as Code (IaC) tool that enables you to define, provision, and manage your cloud infrastructure resources in a consistent, repeatable, and version-controlled manner.



What is an AWS EMR cluster?

AWS EMR (Amazon Elastic MapReduce) is a cloud-based big data solution manufactured by Amazon Web Services (AWS), which takes all the complexity involved with deploying, managing, and scaling Hadoop and Spark clusters. An EMR cluster is an assembly of EC2 instances that have been configured and tuned for running data processing frameworks like Apache Hadoop and Apache Spark, which are designed for performing distributed data processing.

EMR often takes away the tediousness of setting up and running computational clusters, thus giving you more time to execute your data processing jobs without thinking much about the low-level setup demands. undefined



What is Terraform?

The Terraform is an open-source utility developed on infrastructure as a code (IaC) which is being offered by HashiCorp. Its one of the many features that functions as an imperative way for creating and overseeing cloud infrastructure resources like instances, databases, files, and many more from AWS, Microsoft, Google, and more distinct platforms. Using terraform, you can declare all your infrastructure setup within a human-readable configuration language, and log it version – controlled to help you easily replicate it across different environments.

This utility works to manage resource dependencies, making sure that the resources are created, updated or deleted with the order moved. Terraform has a state file that is always updated with the latest information about the state of the provisioned resources so that you can check whether the existing resources still exist and/or plan for future changes. Fully compatible with almost every cloud solution, easy-to-implement and has zero touch technology features. All these capabilities make it a very good solution regarding many DevOps tasks which are managed on the infrastructure level.

Create EMR cluster in AWS using terraform: Practical Step-by-Step Guide

Step 1: Install Terraform

If you haven’t already, install Terraform on your machine. You can download by referring to Install Terraform

Step 2: Configure AWS Provider

Create a new Terraform configuration file, let’s call it main.tf. In this file, you need to define the AWS provider and specify your AWS credentials. Here’s an example:

provider "aws" {
region = "us-east-1" # Replace with your desired AWS region
access_key = "YOUR_AWS_ACCESS_KEY"
secret_key = "YOUR_AWS_SECRET_KEY"
}

Replace YOUR_AWS_ACCESS_KEY and YOUR_AWS_SECRET_KEY with your actual AWS access key and secret key. Alternatively, you can use environment variables or an AWS credentials file.

Step 3: Create EMR cluster

Open the main.tf file and paste the following Terraform configuration. This configuration creates an EMR cluster with a single master node and a single core node, both using the t2.micro instance type (eligible for the AWS Free Tier).

resource "aws_iam_role" "emr_service_role" {
name = "emr_service_role"

assume_role_policy = <<EOF
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "elasticmapreduce.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF

managed_policy_arns = ["arn:aws:iam::aws:policy/service-role/AmazonElasticMapReduceRole"]
}

# Define the EC2 instance profile
resource "aws_iam_role" "emr_ec2_instance_role" {
name = "emr_ec2_instance_role"

assume_role_policy = <<EOF
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
}

resource "aws_iam_role_policy_attachment" "emr_ec2_instance_role_policy_attachment" {
role = aws_iam_role.emr_ec2_instance_role.name
policy_arn = "arn:aws:iam::aws:policy/AmazonElasticMapReduceFullAccess"
}

resource "aws_iam_instance_profile" "emr_instance_profile" {
name = "emr_instance_profile"
role = aws_iam_role.emr_ec2_instance_role.name
}

resource "aws_emr_cluster" "example_cluster" {
name = "Example Cluster"
release_label = "emr-5.32.0"
applications = ["Spark", "Hadoop"]
service_role = aws_iam_role.emr_service_role.arn

ec2_attributes {
instance_profile = aws_iam_instance_profile.emr_instance_profile.arn
}

master_instance_group {
instance_type = "m5.xlarge"
}

core_instance_group {
instance_type = "m5.xlarge"
instance_count = 1
}
}

Step 4: Initialize Terraform

Open your terminal or command prompt, navigate to the directory containing your main.tf file, and run the following command to initialize Terraform:

terraform init

Step 5: Review the Execution Plan

Before applying the configuration, you can review the execution plan by running:

terraform plan

Step 6: Apply the Configuration

If the execution plan looks good, apply the configuration by running:

terraform apply

This command will prompt you to confirm the changes. Type yes to proceed. Terraform will create the AWS cluster in AWS according to your configuration.


Step 7: Verify the deployment via the AWS console

Step 8: Delete the deployment.

You can delete the AWS ECR once it’s not required via the following command in the cli:

terraform destory

Advantages of using Terraform to create AWS EMR

Using Terraform to create AWS EMR clusters offers several advantages:Using Terraform to create AWS EMR clusters offers several advantages:

Disadvantages of using Terraform to create AWS EMR

While using Terraform to create AWS EMR clusters offers numerous advantages, there are also some potential disadvantages to consider:While using Terraform to create AWS EMR clusters offers numerous advantages, there are also some potential disadvantages to consider:

Conclusion

In this article we looked at how we can use Terraform in order to establish an ECR repository in the AWS collection. Through a process of defining the contributions required, we utilized needed Terraform, which included the AWS provider and an ECR resource. We also covered the issues of secure trust management as one of the concerns by the repository access credentials. The Terraform CLI (Command Line Interface) tool enables the users to create and manage cloud resources including ECR repositories. It has numerous advantages. It allows infrastructure-as-a-code that helps avoid inconsistency and makes the systems reproducible across all environments. The Terrraform’s declarative method and automated provisioning functionalities enable such deployments to be automated and speeded up along with the human error risk being reduced. On top of this, terraform’s state management approach provides a clear picture of all the resources that are provisioned and simplifies the process of revision and updating.

ECR Repository In AWS Using Terraform – FAQ’s

What Terraform resource is used to create an EMR cluster?

The aws_emr_cluster resource is used to create an EMR (Elastic MapReduce) cluster in AWS using Terraform.

What are some key configurations for an EMR cluster in Terraform?

Some key configurations include the cluster name, release label, applications to install, instance groups (master, core, and task), EC2 attributes (subnet, security groups, IAM role), and log URI.

How do you specify the instance types and configuration for the cluster nodes?

You can use nested blocks like master_instance_group, core_instance_group, and aws_emr_instance_group to specify the instance types, instance count, and other configurations for the master, core, and task nodes, respectively.

What other resources are typically required for an EMR cluster in Terraform?

An EMR cluster often depends on other resources like IAM roles, subnets, security groups, and instance profiles. You need to create or reference these resources in your Terraform configuration.

How do you apply the Terraform configuration to create the EMR cluster?

After defining your Terraform configuration, you can follow the standard Terraform workflow: run terraform init to initialize the working directory, terraform plan to preview the changes, and terraform apply to create the EMR cluster and other resources.


Article Tags :