Deploying an AWS EKS Cluster with Terraform | A Comprehensive Guide

Amazon Elastic Kubernetes Service (EKS) is a managed Kubernetes service that simplifies the deployment, management, and scaling of containerized applications using Kubernetes on AWS. Terraform, an Infrastructure as Code (IaC) tool, provides a convenient and efficient way to define and provision AWS resources, including EKS clusters. 

Deploying an AWS EKS Cluster with Terraform

Setting Up Your Terraform Environment

Before you begin, ensure that you have Terraform installed on your local machine. You can download Terraform from the official website and follow the installation instructions for your operating system.

Once Terraform is installed, create a new directory for your Terraform configuration files and navigate into it using your terminal or command prompt.

Writing Terraform Configuration Files

Create a new Terraform configuration file with a .tf extension, such as, and open it in a text editor. Define your AWS EKS cluster configuration using Terraform’s declarative language. Below is a basic example of a Terraform configuration for creating an AWS EKS cluster:

provider "aws" {
  region = "us-west-2"
resource "aws_eks_cluster" "my_cluster" {
  name     = "my-eks-cluster"
  role_arn = aws_iam_role.my_eks_cluster_role.arn
  version  = "1.21"
  vpc_config {
    subnet_ids         = ["subnet-12345678", "subnet-87654321"]
    security_group_ids = ["sg-12345678"]
resource "aws_iam_role" "my_eks_cluster_role" {
  name = "my-eks-cluster-role"
  assume_role_policy = <<EOF
  "Version": "2012-10-17",
  "Statement": [
      "Effect": "Allow",
      "Principal": {
        "Service": ""
      "Action": "sts:AssumeRole"

In this configuration, we specify the AWS provider and region, define an AWS EKS cluster resource, and configure the cluster’s VPC settings and IAM role.

Initializing and Applying Terraform Configuration

After writing your Terraform configuration file, initialize the Terraform environment by running the following command in your terminal:


terraform init

This command initializes the directory and downloads any necessary plugins. Next, apply your Terraform configuration to create the AWS EKS cluster by running:

terraform apply

Terraform will display a plan of the actions it will take based on your configuration. Review the plan, and if everything looks correct, type yes to apply the changes.

Verifying Your AWS EKS Cluster

Once Terraform has applied the configuration, you can verify that the AWS EKS cluster has been created by logging in to the AWS Management Console, navigating to the EKS dashboard, and confirming the presence of the newly created cluster.

Frequently Asked Questions (FAQ)

Can I customize my AWS EKS cluster configuration further using Terraform?

Yes, Terraform allows you to customize various aspects of your AWS EKS cluster configuration, including node groups, scaling settings, logging, and networking. You can refer to the Terraform documentation for a comprehensive list of available resources and configuration options.

How can I manage multiple AWS EKS clusters with Terraform?

Terraform supports environment-specific configuration files and variable overrides, allowing you to manage multiple AWS EKS clusters using the same Terraform codebase. You can use Terraform workspaces or separate directories for each cluster to maintain isolation and consistency.

Is it possible to destroy the AWS EKS cluster created with Terraform?

Yes, you can destroy the AWS EKS cluster and associated resources provisioned with Terraform by running the terraform destroy command. Be cautious when executing this command, as it will permanently delete the resources and cannot be undone.


Deploying an AWS EKS cluster using Terraform provides a scalable and repeatable approach to provisioning Kubernetes infrastructure on AWS. By following the steps outlined in this guide and leveraging Terraform’s declarative syntax and automation capabilities, you can create and manage AWS EKS clusters efficiently and consistently across your projects.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *