Skip to content

Commit 45b3be8

Browse files
authored
Merge pull request #36 from azavea/feature/efs-csi
Install EFS CSI plugin
2 parents 6072ad7 + f25c830 commit 45b3be8

File tree

6 files changed

+133
-3
lines changed

6 files changed

+133
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
resource "helm_release" "efs_csi_driver" {
2+
count = local.use_efs
3+
namespace = "kube-system"
4+
5+
name = "aws-efs-csi-driver"
6+
repository = "https://kubernetes-sigs.github.io/aws-efs-csi-driver/"
7+
chart = "aws-efs-csi-driver"
8+
9+
set {
10+
name = "controller.serviceAccount.name"
11+
value = "efs-csi-controller-sa"
12+
}
13+
14+
set {
15+
name = "node.serviceAccount.name"
16+
value = "efs-csi-node-sa"
17+
}
18+
19+
set {
20+
name = "image.repository"
21+
value = "602401143452.dkr.ecr.${var.aws_region}.amazonaws.com/eks/aws-efs-csi-driver"
22+
}
23+
}
24+
25+
resource "kubernetes_storage_class_v1" "efs_sc" {
26+
count = local.use_efs
27+
28+
metadata {
29+
name = "efs-sc"
30+
}
31+
storage_provisioner = "efs.csi.aws.com"
32+
33+
depends_on = [ helm_release.efs_csi_driver[0] ]
34+
}

deployment/aws-terraform/1-services/irsa.tf

+71-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
# These EBS-CSI plugin configs are here because they require the Kubernetes TF
2-
# plugin, which needs to be configured with information from the 0-hardware stage
1+
# The EBS CSI plugin IRSA configs are here, and not in 0—hardware where the EBS
2+
# CSI plugin was installed, because they require the Kubernetes TF provider,
3+
# which needs to be configured with outputs from the 0-hardware stage
34
module "ebs_csi_irsa" {
45
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
56

@@ -27,3 +28,71 @@ resource "kubernetes_annotations" "ebs_csi_iam_annotation" {
2728
"eks.amazonaws.com/role-arn": module.ebs_csi_irsa.iam_role_arn
2829
}
2930
}
31+
32+
module "efs_csi_irsa" {
33+
count = local.use_efs
34+
35+
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
36+
37+
role_name_prefix = "efs-csi-${local.cluster_name}"
38+
attach_efs_csi_policy = true
39+
40+
oidc_providers = {
41+
main = {
42+
provider_arn = module.eks.oidc_provider_arn
43+
namespace_service_accounts = [
44+
"kube-system:efs-csi-controller-sa"
45+
]
46+
}
47+
}
48+
49+
tags = local.tags
50+
}
51+
52+
module "efs_csi_irsa_node" {
53+
count = local.use_efs
54+
55+
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
56+
57+
role_name_prefix = "efs-csi-node-${local.cluster_name}"
58+
attach_efs_csi_policy = true
59+
60+
oidc_providers = {
61+
main = {
62+
provider_arn = module.eks.oidc_provider_arn
63+
namespace_service_accounts = [
64+
"kube-system:efs-csi-node-sa"
65+
]
66+
}
67+
}
68+
69+
tags = local.tags
70+
}
71+
72+
resource "kubernetes_annotations" "efs_csi_iam_annotation" {
73+
count = local.use_efs
74+
75+
api_version = "v1"
76+
kind = "ServiceAccount"
77+
metadata {
78+
name = "efs-csi-controller-sa"
79+
namespace = "kube-system"
80+
}
81+
annotations = {
82+
"eks.amazonaws.com/role-arn": module.efs_csi_irsa[0].iam_role_arn
83+
}
84+
}
85+
86+
resource "kubernetes_annotations" "efs_csi_node_annotation" {
87+
count = local.use_efs
88+
89+
api_version = "v1"
90+
kind = "ServiceAccount"
91+
metadata {
92+
name = "efs-csi-node-sa"
93+
namespace = "kube-system"
94+
}
95+
annotations = {
96+
"eks.amazonaws.com/role-arn": module.efs_csi_irsa_node[0].iam_role_arn
97+
}
98+
}

deployment/aws-terraform/1-services/locals.tf

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ locals {
22
cluster_name = "${var.project_prefix}-${var.environment}"
33
db_count = var.create_rds_instance ? 1 : 0
44
cognito_pool_count = var.create_cognito_pool ? 1 : 0
5+
use_efs = var.use_efs_csi ? 1 : 0
56

67
tags = {
78
Name = var.project_prefix
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
data "aws_vpc" "cluster_vpc" {
2+
id = module.eks.vpc_id
3+
}
4+
5+
resource "aws_security_group" "efs" {
6+
name = "EFS inbound"
7+
description = "EFS inbound traffic"
8+
vpc_id = module.eks.vpc_id
9+
10+
ingress {
11+
description = "NFS traffic"
12+
from_port = 2049
13+
to_port = 2049
14+
protocol = "tcp"
15+
cidr_blocks = [data.aws_vpc.cluster_vpc.cidr_block]
16+
}
17+
18+
tags = local.tags
19+
}

deployment/aws-terraform/1-services/variables.tf

+6
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ variable "google_identity_client_secret" {
4444
description = "Client ID for Google identity provider"
4545
}
4646

47+
variable "use_efs_csi" {
48+
type = bool
49+
description = "Install EFS CSI driver"
50+
default = false
51+
}
52+
4753
variable "r53_rds_private_hosted_zone" {
4854
type = string
4955
default = null

modules/aws/infrastructure/eks.tf

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module "eks" {
2-
source = "terraform-aws-modules/eks/aws"
2+
source = "terraform-aws-modules/eks/aws"
3+
version = "18.31.2"
34

45
cluster_name = local.cluster_name
56
cluster_version = var.cluster_version

0 commit comments

Comments
 (0)