Skip to content

AWS EKS Fargate Mount EFS with Terraform

Step-01: Introduction

  • Mount EFS File System on Workloads Running on AWS Fargate
  • Test both Static and Dynamic Provisioning

Pre-requisites

  • EKS Cluster created and ready (01-ekscluster-terraform-manifests)
  • EFS CSI Driver installed and ready (02-efs-install-terraform-manifests)

Step-02: Project-03: Review Terraform Manifests

  • Project Folder: 03-fargate-profiles-terraform-manifests
  • This a project from Section-43 43-EKS-Fargate-Profiles/04-fargate-profiles-terraform-manifests

Step-03: Create Fargate Profile

# Change Directory
cd 03-fargate-profiles-terraform-manifests

# Terraform Initialize
terraform init

# Terraform Validate
terraform validate

# Terraform Plan
terraform plan

# Terraform Apply
terraform apply -auto-approve

# List Fargate Profiles
aws eks list-fargate-profiles --cluster <CLUSTER_NAME>
aws eks list-fargate-profiles --cluster hr-dev-eksdemo1

Step-03: Project-04: Review Terraform Manifests

  • Project Folder: 04-efs-static-prov-terraform-manifests
  • This a project from Section-47 47-EKS-EFS-Static-Provisioning/03-efs-static-prov-terraform-manifests
  • Following Kubernetes Resources will be created in namespace fp-ns-app1
    # Add Namespace for the Kubernetes Resources in this Demo
        namespace = "fp-ns-app1"    
    
  • 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-04: Deploy EFS Sample App on AWS Fargate

# Change Directory
04-efs-static-prov-terraform-manifests

# Terraform Initialize
terraform init

# Terraform Validate
terraform validate

# Terraform Plan
terraform plan

# Terraform Apply
terraform apply -auto-approve

Step-05: Verify Kubernetes Resources

# Verify Storage Class
kubectl get sc

# Verify PVC (Persistent Volume Claim)
kubectl -n fp-ns-app1 get pvc

# Verify PV (Persistent Volume)
kubectl get pv

# List Nodes
kubectl get nodes
Observation:
1. You should see fargate nodes in addition to regular EC2 Worker Nodes

# List Pods
kubectl get pods -o wide
Observation:
1. You should see these pods scheduled on Fargate Nodes 

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

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

Step-07: Connect to myapp1 Kubernetes pods and Verify

# Verify Fargate Nodes
kubectl get nodes

# List Pods
kubectl -n fp-ns-app1 get pods 
kubectl -n fp-ns-app1 get pods -o wide 

# List Services
kubectl -n fp-ns-app1 get svc

# myapp1 POD1 - Connect to Kubernetes Pod
kubectl -n fp-ns-app1 exec --stdin --tty <POD-NAME> -- /bin/sh
kubectl -n fp-ns-app1 exec --stdin --tty myapp1-667d8656cc-88l57 -- /bin/sh
cd /usr/share/nginx/html/efs
ls
tail -f efs-static.txt

# myapp1 POD2 - Connect to Kubernetes Pod
kubectl -n fp-ns-app1 exec --stdin --tty <POD-NAME> -- /bin/sh
kubectl -n fp-ns-app1 exec --stdin --tty myapp1-667d8656cc-8p9l4   -- /bin/sh
cd /usr/share/nginx/html/efs
ls
tail -f efs-static.txt

Step-08: Access Application

# Get DNS Names of Kubernetes Services
kubectl -n fp-ns-app1 get svc

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

Step-09: Clean-Up

# Change Directory
cd 04-efs-static-prov-terraform-manifests

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

Step-10: Project-05: Review Terraform Manifests

  • Project Folder: 05-efs-dynamic-prov-terraform-manifests
  • This a project from Section-48 48-EKS-EFS-Dynamic-Provisioning/03-efs-dynamic-prov-terraform-manifests
  • Following Kubernetes Resources will be created in namespace fp-ns-app1
    # Add Namespace for the Kubernetes Resources in this Demo
        namespace = "fp-ns-app1"    
    
  • 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-11: Deploy EFS Sample App on AWS Fargate

# Change Directory
05-efs-dynamic-prov-terraform-manifests

# Terraform Initialize
terraform init

# Terraform Validate
terraform validate

# Terraform Plan
terraform plan

# Terraform Apply
terraform apply -auto-approve

Step-12: Verify Kubernetes Resources

# Verify Storage Class
kubectl get sc

# Verify PVC (Persistent Volume Claim)
kubectl -n fp-ns-app1 get pvc

# Verify PV (Persistent Volume)
kubectl get pv

# List Nodes
kubectl get nodes
Observation:
1. You should see fargate nodes in addition to regular EC2 Worker Nodes

# List Pods
kubectl get pods -o wide
Observation:
1. You should see these pods scheduled on Fargate Nodes 

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

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

Step-14: Connect to myapp1 Kubernetes pods and Verify

# Verify Fargate Nodes
kubectl get nodes

# List Pods
kubectl -n fp-ns-app1 get pods 
kubectl -n fp-ns-app1 get pods -o wide 

# List Services
kubectl -n fp-ns-app1 get svc

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

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

Step-15: Access Application

# Get DNS Names of Kubernetes Services
kubectl -n fp-ns-app1 get svc

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

Step-16: Clean-Up

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

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

Step-11: 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
  • Terraform Project Folder: 03-fargate-profiles-terraform-manifests
  • We are going to use them for all upcoming Usecases.
  • Destroy Resorces Order
  • 03-fargate-profiles-terraform-manifests
  • 02-efs-install-terraform-manifests
  • 01-ekscluster-terraform-manifests
    ##############################################################
    ## Delete Fargate Profile
    # Change Directory
    cd 03-fargate-profiles-terraform-manifests
    
    # Terraform Destroy
    terraform init
    terraform apply -destroy -auto-approve
    ##############################################################
    ## 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