Skip to content

appvia/terraform-aws-eks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Github Actions

Terraform AWS EKS Module

A comprehensive Terraform module for provisioning Amazon Elastic Kubernetes Service (EKS) clusters with integrated platform services, pod identity management, and networking capabilities.

Description

This module provides a production-ready EKS cluster with integrated platform services and best practices. It includes:

  • EKS Cluster Management: Full EKS cluster provisioning with configurable versions and logging
  • Platform Integrations: Built-in support for ArgoCD, cert-manager, External DNS, External Secrets, and more
  • Pod Identity Management: AWS Pod Identity for secure workload-to-AWS service authentication
  • Networking: Optional VPC creation with transit gateway support
  • Security: Configurable security groups, access entries, and KMS encryption
  • Cross-Account Support: Hub-spoke architecture for multi-account deployments

Key Features

🚀 EKS Cluster Management

  • Kubernetes version 1.32+ support
  • Configurable cluster logging (API, audit, authenticator, controller manager, scheduler)
  • Public/private endpoint access control
  • KMS encryption for cluster secrets
  • Auto-scaling with Karpenter integration

🔐 Security & Access Control

  • AWS Pod Identity for secure workload authentication
  • Configurable access entries for cluster access
  • Security group management with customizable rules
  • Cross-account role support for hub-spoke architectures

🌐 Platform Integrations

  • ArgoCD: GitOps deployment platform
  • cert-manager: Automated certificate management
  • External DNS: Route53 integration for service discovery
  • External Secrets: AWS Secrets Manager and SSM Parameter Store integration
  • Terranetes: Terraform-as-a-Service platform
  • AWS ACK IAM: AWS Controllers for Kubernetes
  • CloudWatch Observability: Monitoring and logging
  • Kubecost: Cost monitoring and optimization with AWS CUR integration

Usage

Basic EKS Cluster

module "eks" {
  source = "appvia/eks/aws"
  version = "1.0.0"

  cluster_name = "my-eks-cluster"
  tags = {
    Environment = "Production"
    Product     = "EKS"
    Owner       = "Engineering"
  }
}

EKS Cluster with Platform Services

module "eks" {
  source = "appvia/eks/aws"
  version = "1.0.0"

  cluster_name = "production-eks"
  tags = {
    Environment = "Production"
    Product     = "EKS"
    Owner       = "Engineering"
  }

  # Enable platform services
  argocd = {
    enabled = true
    namespace = "argocd"
    service_account = "argocd"
  }

  cert_manager = {
    enabled = true
    namespace = "cert-manager"
    service_account = "cert-manager"
    route53_zone_arns = ["arn:aws:route53:::hostedzone/Z1234567890"]
  }

  external_dns = {
    enabled = true
    namespace = "external-dns"
    service_account = "external-dns"
    route53_zone_arns = ["arn:aws:route53:::hostedzone/Z1234567890"]
  }

  external_secrets = {
    enabled = true
    namespace = "external-secrets"
    service_account = "external-secrets"
    secrets_manager_arns = ["arn:aws:secretsmanager:*:*"]
    ssm_parameter_arns = ["arn:aws:ssm:*:*:parameter/eks/*"]
  }
}

EKS Cluster with Pod Identity

module "eks" {
  source = "appvia/eks/aws"
  version = "1.0.0"

  cluster_name = "pod-identity-eks"
  tags = {
    Environment = "Production"
    Product     = "EKS"
    Owner       = "Engineering"
  }

  # Custom pod identities
  pod_identity = {
    my-app = {
      enabled = true
      name = "my-app-pod-identity"
      namespace = "my-app"
      service_account = "my-app-sa"
      managed_policy_arns = {
        "S3ReadOnly" = "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
        "DynamoDBReadWrite" = "arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess"
      }
      policy_statements = [
        {
          sid = "CustomPolicy"
          effect = "Allow"
          actions = ["s3:GetObject"]
          resources = ["arn:aws:s3:::my-bucket/*"]
        }
      ]
    }
  }
}

Hub-Spoke Architecture

module "eks" {
  source = "appvia/eks/aws"
  version = "1.0.0"

  cluster_name = "spoke-eks"
  tags = {
    Environment = "Production"
    Product     = "EKS"
    Owner       = "Engineering"
  }

  # Hub account configuration
  hub_account_id = "123456789012"
  hub_account_role = "argocd-pod-identity-hub"
  hub_account_roles_prefix = "argocd-cross-account-*"

  # Enable ArgoCD for GitOps
  argocd = {
    enabled = true
    namespace = "argocd"
    service_account = "argocd"
  }
}

Networking Options

VPC & Networking

The module assumes the account alread has an existing VPC to provision the cluster within. We need the VPC ID and the subnet IDs for the private subnets where the cluster should be located.

# Use existing VPC
vpc_id = "vpc-1234567890"
private_subnet_ids = ["subnet-1234567890", "subnet-0987654321"]

Security Features

Access Control

Configure cluster access using access entries.

access_entries = {
  admin = {
    principal_arn = "arn:aws:iam::123456789012:role/AdminRole"
    policy_associations = {
      cluster_admin = {
        policy_arn = "arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy"
        access_scope = {
          type = "cluster"
        }
      }
    }
  }
}

Pod Identity

Secure workload-to-AWS service authentication.

pod_identity = {
  my-workload = {
    enabled = true
    name = "my-workload-identity"
    namespace = "my-namespace"
    service_account = "my-service-account"
    managed_policy_arns = {
      "S3Access" = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
    }
  }
}

Security Groups

Customize security group rules for cluster and nodes.

cluster_security_group_additional_rules = {
  custom_ingress = {
    description = "Custom ingress rule"
    protocol    = "tcp"
    from_port   = 8080
    to_port     = 8080
    type        = "ingress"
    cidr_blocks = ["10.0.0.0/8"]
  }
}

node_security_group_additional_rules = {
  custom_egress = {
    description = "Custom egress rule"
    protocol    = "tcp"
    from_port   = 443
    to_port     = 443
    type        = "egress"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Platform Services

ArgoCD

GitOps deployment platform for Kubernetes applications.

argocd = {
  enabled = true
  namespace = "argocd"
  service_account = "argocd"
}

cert-manager

Automated certificate management for Kubernetes.

cert_manager = {
  enabled = true
  namespace = "cert-manager"
  service_account = "cert-manager"
  route53_zone_arns = ["arn:aws:route53:::hostedzone/Z1234567890"]
}

External DNS

Route53 integration for automatic DNS record management.

external_dns = {
  enabled = true
  namespace = "external-dns"
  service_account = "external-dns"
  route53_zone_arns = ["arn:aws:route53:::hostedzone/Z1234567890"]
}

External Secrets

AWS Secrets Manager and SSM Parameter Store integration.

external_secrets = {
  enabled = true
  namespace = "external-secrets"
  service_account = "external-secrets"
  secrets_manager_arns = ["arn:aws:secretsmanager:*:*"]
  ssm_parameter_arns = ["arn:aws:ssm:*:*:parameter/eks/*"]
}

Terranetes

Terraform-as-a-Service platform for infrastructure management.

terranetes = {
  enabled = true
  namespace = "terraform-system"
  service_account = "terranetes-executor"
  managed_policy_arns = {
    "AdministratorAccess" = "arn:aws:iam::aws:policy/AdministratorAccess"
  }
}

AWS ACK IAM

AWS Controllers for Kubernetes IAM management.

aws_ack_iam = {
  enabled = true
  namespace = "ack-system"
  service_account = "ack-iam-controller"
  managed_policy_arns = {}
}

CloudWatch Observability

Monitoring and logging with CloudWatch.

cloudwatch_observability = {
  enabled = true
  namespace = "cloudwatch-observability"
  service_account = "cloudwatch-observability"
}

Kubecost Cost Monitoring

Kubecost provides comprehensive cost monitoring and optimization for Kubernetes clusters with advanced AWS integration capabilities.

Overview

Kubecost offers three main deployment modes:

  1. Standalone: Single cluster cost monitoring
  2. Federated Storage: Multi-cluster aggregation for centralized monitoring
  3. Cloud Costs: Integration with AWS Cost and Usage Reports (CUR) via Athena

Prerequisites

Before setting up Kubecost, ensure you have:

  • An active AWS account with appropriate permissions
  • S3 buckets for data storage and Athena query results
  • AWS Cost and Usage Report (CUR) configured (for cloud costs feature)
  • Amazon Athena setup with Glue database and table (for cloud costs feature)

AWS CUR Setup

To enable cloud costs analysis, you need to set up AWS Cost and Usage Reports:

  1. Create CUR in AWS Billing Console:

    • Navigate to AWS Billing Dashboard
    • Create a new Cost and Usage Report with daily granularity
    • Enable Resource IDs and Athena integration
    • Specify an S3 bucket for CUR data storage
  2. Set up Athena Integration:

    • Use the AWS-provided CloudFormation template to create Athena resources
    • Create an S3 bucket for Athena query results
    • Configure Athena workgroup and database

IAM Permissions

The module automatically provisions the necessary IAM roles and policies:

  • S3 Access: Read/write access to federated and CUR buckets
  • Athena Operations: Query execution, monitoring, and result retrieval
  • Glue Metadata: Database and table schema access for CUR data

Cost monitoring and optimization for Kubernetes clusters with AWS integration.

Standalone Kubecost

Basic cost monitoring for a single cluster.

kubecosts = {
  enabled = true
}

Federated Storage (Multi-Cluster Aggregation)

Aggregate cost data from multiple clusters into a primary cluster for centralized monitoring.

# Primary cluster (aggregates data from all clusters)
kubecosts = {
  enabled = true
  federated_storage = {
    federated_bucket_arn = "arn:aws:s3:::kubecost-federated-bucket"
    create_bucket = true
    allowed_principals = [
      "ACCOUNT_ID"
    ]
  }
}

# Secondary clusters (send data to primary)
kubecosts_agent = {
  enabled = true
  federated_bucket_name = "arn:aws:s3:::kubecost-federated-bucket"
}

Cloud Costs via AWS CUR

Integrate with AWS Cost and Usage Reports (CUR) via Amazon Athena for comprehensive cloud cost analysis.

kubecosts = {
  enabled = true
  fedarated_storage = {
    federated_bucket_arn = "my-kubecost-bucket"
  }
  
  # Cloud costs integration with AWS CUR via Athena
  cloud_costs = {
    enable = true
    cur_bucket_name = "my-cur-bucket"
    athena_bucket_arn = "arn:s3:aws:::my-athena-results-bucket"
    athena_database_name = "cost_and_usage_data"
    athena_table_name = "cur_table"
  }
}

Verification

After deployment, verify Kubecost is working correctly:

  1. Access the Dashboard:

    kubectl port-forward -n kubecost svc/kubecost-cost-analyzer 9090:9090
  2. Check Cloud Integration:

    • Navigate to Settings → Cloud Cost Settings
    • Verify AWS integration is active
    • Check for any error messages
  3. Monitor Logs:

    kubectl logs -n kubecost deployment/kubecost-cost-analyzer

Additional Resources

Examples

See the examples directory for complete usage examples:

Requirements

Name Version
terraform >= 1.0
aws >= 5.34

Providers

Name Version
aws >= 5.34

Update Documentation

The terraform-docs utility is used to generate this README. Follow the below steps to update:

  1. Make changes to the .terraform-docs.yml file
  2. Fetch the terraform-docs binary (https://terraform-docs.io/user-guide/installation/)
  3. Run terraform-docs markdown table --output-file ${PWD}/README.md --output-mode inject .

Providers

Name Version
aws >= 6.0

Inputs

Name Description Type Default Required
cluster_name Name of the Kubenetes cluster string n/a yes
private_subnet_ids List of private subnet IDs, if you want to use existing subnets list(string) n/a yes
tags Tags to apply to all resources map(string) n/a yes
vpc_id ID of the VPC where the EKS cluster will be created string n/a yes
access_entries Map of access entries to add to the cluster. This is required if you use a different IAM Role for Terraform Plan actions.
map(object({
## The list of kubernetes groups to associate the principal with
kubernetes_groups = optional(list(string), [])
## The list of kubernetes users to associate the principal with
principal_arn = string
## The list of kubernetes users to associate the principal with
policy_associations = optional(map(object({
## The policy arn to associate with the principal
policy_arn = string
## The access scope for the policy i.e. cluster or namespace
access_scope = object({
## The namespaces to apply the policy to
namespaces = optional(list(string), [])
## The type of access scope i.e. cluster or namespace
type = optional(string, "cluster")
})
})))
}))
null no
addons Map of EKS addons to enable
map(object({
## The name of the EKS addon
name = optional(string)
## Indicates if we should deploy the EKS addon before the compute nodes
before_compute = optional(bool, false)
## Indicates if we should use the most recent version of the EKS addon
most_recent = optional(bool, true)
## The version of the EKS addon
addon_version = optional(string)
## The configuration values for the EKS addon
configuration_values = optional(string)
## The pod identity association for the EKS addon
pod_identity_association = optional(list(object({
## The role ARN for the EKS addon pod identity association
role_arn = string
## The service account for the EKS addon
service_account = string
})))
## Indicates if we should preserve the EKS addon
preserve = optional(bool, true)
## The resolve conflicts on create for the EKS addon
resolve_conflicts_on_create = optional(string, "OVERWRITE")
## The resolve conflicts on update for the EKS addon
resolve_conflicts_on_update = optional(string, "OVERWRITE")
## The service account role ARN for the EKS addon
service_account_role_arn = optional(string, null)
## The timeouts for the EKS addon
timeouts = optional(object({
## The timeout for the EKS addon create
create = optional(string, "10m")
## The timeout for the EKS addon update
update = optional(string, "10m")
## The timeout for the EKS addon delete
delete = optional(string, "10m")
}), {})
## The tags for the EKS addon
tags = optional(map(string), {})
}))
null no
argocd The ArgoCD configuration
object({
## Indicates if we should enable the ArgoCD platform
enable = optional(bool, false)
## The namespace to deploy the ArgoCD platform to
namespace = optional(string, "argocd")
## The service account to deploy the ArgoCD platform to
service_account = optional(string, "argocd")
})
{} no
aws_ack_iam The AWS ACK IAM configuration
object({
## Indicates if we should enable the AWS ACK IAM platform
enable = optional(bool, true)
## The namespace to deploy the AWS ACK IAM platform to
namespace = optional(string, "ack-system")
## The service account to deploy the AWS ACK IAM platform to
service_account = optional(string, "ack-iam-controller")
## Managed policies to attach to the AWS ACK IAM platform
managed_policy_arns = optional(map(string), {
"admin" = "arn:aws:iam::aws:policy/IAMFullAccess"
})
})
{} no
aws_eks_ack The AWS EKS ACK Controller configuration
object({
## Indicates if we should enable the AWS EKS ACK Controller platform
enable = optional(bool, true)
## The namespace to deploy the AWS EKS ACK Controller platform to
namespace = optional(string, "ack-system")
## The service account to deploy the AWS EKS ACK Controller platform to
service_account = optional(string, "ack-eks-controller")
## Managed policies to attach to the AWS EKS ACK Controller platform
managed_policy_arns = optional(map(string), {})
})
{} no
aws_prometheus The AWS Prometheus configuration
object({
## Indicates if we should enable the managed Prometheus
enable = optional(bool, false)
## Collection of workspaces to provide permissions to i.e. arn:aws:prometheus:::workspace/
workspaces = optional(list(string), ["arn:aws:prometheus:
::workspace/"])
## The service account to deploy the AWS Prometheus to
service_account = optional(string, "prometheus")
## The namespace to deploy the AWS Prometheus to
namespace = optional(string, "prometheus")
})
{} no
cert_manager The cert-manager configuration
object({
## Indicates if we should enable the cert-manager platform
enable = optional(bool, false)
## The namespace to deploy the cert-manager platform to
namespace = optional(string, "cert-manager")
## The service account to deploy the cert-manager platform to
service_account = optional(string, "cert-manager")
## Route53 zone id to use for the cert-manager platform
hosted_zone_arns = optional(list(string), ["arn:aws:route53:::hostedzone/*"])
})
{} no
cloudwatch_observability The CloudWatch Observability configuration
object({
## Indicates if we should enable the CloudWatch Observability platform
enable = optional(bool, false)
## The namespace to deploy the CloudWatch Observability platform to
namespace = optional(string, "cloudwatch-observability")
## The service account to deploy the CloudWatch Observability platform to
service_account = optional(string, "cloudwatch-observability")
})
{} no
cluster_enabled_log_types List of log types to enable for the EKS cluster. list(string)
[
"api",
"audit",
"authenticator",
"controllerManager",
"scheduler"
]
no
create_kms_key Whether to create a KMS key for the EKS cluster. bool true no
ebs_csi_driver The EBS CSI driver configuration
object({
## Indicates if we should enable the EBS CSI driver
enable = optional(bool, false)
## The KMS key ARNs to allow the EBS CSI driver to manage encrypted volumes
kms_key_arns = optional(list(string), [])
## The version of the EBS CSI driver
version = optional(string, "v1.51.0-eksbuild.1")
## The service account to deploy the EBS CSI driver to
service_account = optional(string, "ebs-csi-controller-sa")
## The namespace to deploy the EBS CSI driver to
namespace = optional(string, "kube-system")
})
{} no
efs_csi_driver The EFS CSI driver configuration
object({
## Indicates if we should enable the EFS CSI driver
enable = optional(bool, false)
## The version of the EFS CSI driver
version = optional(string, "v1.6.0-eksbuild.1")
## The service account to deploy the EFS CSI driver to
service_account = optional(string, "efs-csi-controller-sa")
## The namespace to deploy the EFS CSI driver to
namespace = optional(string, "kube-system")
})
{} no
enable_cluster_creator_admin_permissions Whether to enable cluster creator admin permissions (else create access entries for the cluster creator) bool false no
enable_irsa Whether to enable IRSA for the EKS cluster. bool true no
enable_private_access Whether to enable private access to the EKS API server endpoint. bool true no
enable_public_access Whether to enable public access to the EKS API server endpoint. bool false no
endpoint_public_access_cidrs List of CIDR blocks which can access the Amazon EKS API server endpoint. list(string)
[
"0.0.0.0/0"
]
no
external_dns The External DNS configuration
object({
## Indicates if we should enable the External DNS platform
enable = optional(bool, false)
## The namespace to deploy the External DNS platform to
namespace = optional(string, "external-dns")
## The service account to deploy the External DNS platform to
service_account = optional(string, "external-dns")
## The route53 zone ARNs to attach to the External DNS platform
hosted_zone_arns = optional(list(string), ["arn:aws:route53:::hostedzone/*"])
})
{} no
external_secrets The External Secrets configuration
object({
## Indicates if we should enable the External Secrets platform
enable = optional(bool, false)
## The namespace to deploy the External Secrets platform to
namespace = optional(string, "external-secrets")
## The service account to deploy the External Secrets platform to
service_account = optional(string, "external-secrets")
## The secrets manager ARNs to attach to the External Secrets platform
secrets_manager_arns = optional(list(string), ["arn:aws:secretsmanager:::secret/"])
## The SSM parameter ARNs to attach to the External Secrets platform
ssm_parameter_arns = optional(list(string), ["arn:aws:ssm:::parameter/eks/
"])
})
{} no
hub_account_id The AWS account ID of the hub account string null no
hub_account_role Indicates we should create a cross account role for the hub to assume string "argocd-pod-identity-hub" no
hub_account_roles_prefix The prefix of the roles we are permitted to assume via the argocd pod identity string "argocd-cross-account-*" no
kms_key_administrators A list of IAM ARNs for EKS key administrators. If no value is provided, the current caller identity is used to ensure at least one key admin is available. list(string) [] no
kms_key_service_users A list of IAM ARNs for EKS key service users. list(string) [] no
kms_key_users A list of IAM ARNs for EKS key users. list(string) [] no
kubecosts The Kubecost configuration
object({
## Indicates if we should enable the Kubecost platform
enable = optional(bool, false)
## The namespace to deploy the Kubecost platform to
namespace = optional(string, "kubecost")
## The service account to deploy the Kubecost platform to
service_account = optional(string, "kubecost")
## Fedarate storage configuration
federated_storage = optional(object({
## Indicates if we should create the federated bucket
create_bucket = optional(bool, false)
## KMS key ARN to use for the federated bucket
kms_key_arn = optional(string, null)
## The ARN of the federated bucket to use for the Kubecost platform
federated_bucket_arn = optional(string, null)
## List of principals to allowed to write to the federated bucket
allowed_principals = optional(list(string), [])
}), {})
## Cloud Costs feature
cloud_costs = optional(object({
## Indicates if we should enable cloud costs via Athena
enable = optional(bool, false)
## The ARN of the S3 bucket for Cost and Usage Report (CUR) data
cur_bucket_arn = optional(string, null)
## The ARN of the S3 bucket for Athena query results
athena_bucket_arn = optional(string, null)
## The name of the Athena database for CUR data
athena_database_name = optional(string, null)
## The ARN of the Athena table for CUR data
athena_table_name = optional(string, null)
}), {})
})
null no
kubecosts_agent The Kubecost Agent configuration
object({
## Indicates if we should enable the Kubecost Agent platform
enable = optional(bool, false)
## The namespace to deploy the Kubecost Agent platform to
namespace = optional(string, "kubecost")
## The service account to deploy the Kubecost Agent platform to
service_account = optional(string, "kubecost-agent")
## The ARN of the federated bucket to use for the Kubecost Agent platform
federated_bucket_arn = string
})
null no
kubernetes_version Kubernetes version for the EKS cluster string "1.34" no
node_pools Collection of nodepools to create via auto-mote karpenter list(string)
[
"system"
]
no
node_security_group_additional_rules List of additional security group rules to add to the node security group created. Set source_cluster_security_group = true inside rules to set the cluster_security_group as source. any {} no
pod_identity The pod identity configuration
map(object({
## Indicates if we should enable the pod identity
enabled = optional(bool, true)
## The namespace to deploy the pod identity to
description = optional(string, null)
## The service account to deploy the pod identity to
service_account = optional(string, null)
## The managed policy ARNs to attach to the pod identity
managed_policy_arns = optional(map(string), {})
## The permissions boundary ARN to use for the pod identity
permissions_boundary_arn = optional(string, null)
## The namespace to deploy the pod identity to
namespace = optional(string, null)
## The name of the pod identity role
name = optional(string, null)
## Additional policy statements to attach to the pod identity role
policy_statements = optional(list(object({
## The statement ID
sid = optional(string, null)
## The actions to allow
actions = optional(list(string), [])
## The resources to allow
resources = optional(list(string), [])
## The effect to allow
effect = optional(string, null)
})), [])
}))
{} no
registries Provision pull-through cache for registries
map(object({
## The name of the registry
name = string
## The URL of the registry
url = string
## Optional credentials arn to use for the registry
credentials_arn = optional(string, null)
## Optional credentials to use for the registry
credentials = optional(object({
## Name of the secret to provision in aws secrets manager
secret_name = optional(string, null)
## The username to use for the registry
username = string
## The password to use for the registry
password = string
}), null)
}))
{} no
security_group_additional_rules List of additional security group rules to add to the cluster security group created any {} no
terranetes The Terranetes platform configuration
object({
## Indicates if we should enable the Terranetes platform
enable = optional(bool, false)
## The namespace to deploy the Terranetes platform to
namespace = optional(string, "terraform-system")
## The service account to deploy the Terranetes platform to
service_account = optional(string, "terranetes-executor")
## The permissions boundary ARN to use for the Terranetes platform
permissions_boundary_arn = optional(string, null)
## Managed policies to attach to the Terranetes platform
managed_policy_arns = optional(map(string), {
"AdministratorAccess" = "arn:aws:iam::aws:policy/AdministratorAccess"
})
})
{} no

Outputs

Name Description
account_id The AWS account ID.
cluster_arn The ARN of the EKS cluster
cluster_certificate_authority_data The base64 encoded certificate data for the EKS cluster
cluster_endpoint The endpoint for the EKS Kubernetes API
cluster_name The name of the EKS cluster.
cluster_oidc_provider_arn The ARN of the OIDC provider for the EKS cluster
cross_account_role_arn The cross account arn when we are using a hub
ebs_csi_driver_pod_identity_arn The ARN of the EBS CSI driver pod identity
efs_csi_driver_pod_identity_arn The ARN of the EFS CSI driver pod identity
region The AWS region in which the cluster is provisioned

About

Terraform module used to provision a container platform using https://github.com/appvia/kubernetes-platform

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •