Skip to content

AWS EKS EFS Dynamic Provisioning with Terraform

Step-01: Introduction

  • Implement and Test EFS Dynamic Provisioning Usecase

Step-02: Project-03: Review Terraform Manifests

  • Project Folder: 03-efs-dynamic-prov-terraform-manifests
  • c1-versions.tf
  • c2-remote-state-datasource.tf
  • c3-providers.tf
  • c4-01-efs-resource.tf

Step-03: c4-02-storage-class.tf

  • Project Folder: 03-efs-dynamic-prov-terraform-manifests
    # Resource: Kubernetes Storage Class
    resource "kubernetes_storage_class_v1" "efs_sc" {  
      metadata {
        name = "efs-sc"
      }
      storage_provisioner = "efs.csi.aws.com"  
      parameters = {
        provisioningMode = "efs-ap"
        fileSystemId =  aws_efs_file_system.efs_file_system.id 
        directoryPerms = "700"
        gidRangeStart = "1000" # optional
        gidRangeEnd = "2000" # optional
        basePath = "/dynamic_provisioning" # optional
      }
    }
    

Step-04: Project-04: Review Terraform Manifests

  • Project Folder: 03-efs-dynamic-prov-terraform-manifests
  • c4-03-persistent-volume-claim.tf
  • c5-write-to-efs-pod.tf
  • c6-01-myapp1-deployment.tf
  • c6-02-myapp1-loadbalancer-service.tf
  • c6-03-myapp1-network-loadbalancer-service.tf

Step-05: Project-04: Execute Terraform Commands

# Change Directory 
cd 03-efs-dynamic-prov-terraform-manifests

# Terraform Initialize
terraform init

# Terraform Validate
terraform validate

# Terraform Plan
terraform plan

# Terraform Apply
terraform apply -auto-approve

Step-06: Verify Kubernetes Resources

# Verify Storage Class
kubectl get sc

# Verify PVC (Persistent Volume Claim)
kubectl get pvc

# Verify PV (Persistent Volume)
kubectl get pv

Step-07: Verify EFS File System, Mount Targets, Network Interfaces and Security Groups

# Verify EFS File System
Go to Services -> EFS -> File Systems -> efs-demo

# Verify Mount Targets
Go to Services -> EFS -> File Systems -> efs-demo -> Network Tab

# Verify Network Interfaces
Go to Services -> EC2 -> Network & Security -> Network Interfaces -> GET THE ENI ID from Mount Targets

# Security Groups
Go to Services -> EC2 -> Network & Security -> Security Groups -> hr-dev-efs-allow-nfs-from-eks-vpc

Step-08: Connect to efs-write-app Kubernetes pods and Verify

# efs-write-app - Connect to Kubernetes Pod
kubectl exec --stdin --tty <POD-NAME> -- /bin/sh
kubectl exec --stdin --tty efs-write-app  -- /bin/sh
cd /data
ls
tail -f efs-dynamic.txt

Step-09: Connect to myapp1 Kubernetes pods and Verify

# List Pods
kubectl get pods 

# myapp1 POD1 - Connect to Kubernetes Pod
kubectl exec --stdin --tty <POD-NAME> -- /bin/sh
kubectl exec --stdin --tty myapp1-667d8656cc-2x824 -- /bin/sh
cd /usr/share/nginx/html/efs
ls
tail -f efs-dynamic.txt

# myapp1 POD2 - Connect to Kubernetes Pod
kubectl exec --stdin --tty <POD-NAME> -- /bin/sh
kubectl exec --stdin --tty myapp1-667d8656cc-bg8bg  -- /bin/sh
cd /usr/share/nginx/html/efs
ls
tail -f efs-dynamic.txt

Step-10: Access Application

# Access Application
http://<CLB-DNS-URL>/efs/efs-dynamic.txt
http://<NLB-DNS-URL>/efs/efs-dynamic.txt

Step-11: Clean-Up

# Change Directory
cd 03-efs-dynamic-prov-terraform-manifests

# Destroy Resources
terraform apply -destroy -auto-approve
rm -rf .terraform*

Step-12: Clean-Up EKS Cluster, EFS CSI Driver

  • Destroy the Terraform Projects in below two folders
  • Terraform Project Folder: 01-ekscluster-terraform-manifests
  • Terraform Project Folder: 02-efs-install-terraform-manifests
  • We are going to use them for all upcoming Usecases.
  • Destroy Resorces Order
  • 02-efs-install-terraform-manifests
  • 01-ekscluster-terraform-manifests
    ##############################################################
    ## Delete EFS CSI Driver
    # Change Directory
    cd 02-efs-install-terraform-manifests
    
    # Terraform Destroy
    terraform init
    terraform apply -destroy -auto-approve
    ##############################################################
    ## Destroy EKS Cluster
    # Change Directroy
    cd 01-ekscluster-terraform-manifests
    
    # Terraform Destroy
    terraform init
    terraform apply -destroy -auto-approve
    ##############################################################
    

References

🎉 New Course
Ultimate DevOps Real-World Project Implementation on AWS
$15.99 $84.99 81% OFF
DEVOPS2026FEB
Enroll Now on Udemy →
🎉 Offer