{"id":20768166,"url":"https://github.com/softwaremill/terraform-eks-bootstrap","last_synced_at":"2026-03-19T17:26:27.099Z","repository":{"id":38447441,"uuid":"495346879","full_name":"softwaremill/terraform-eks-bootstrap","owner":"softwaremill","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-11T15:58:09.000Z","size":133,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":21,"default_branch":"main","last_synced_at":"2025-09-11T18:31:42.018Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/softwaremill.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-23T09:44:13.000Z","updated_at":"2025-09-11T15:58:12.000Z","dependencies_parsed_at":"2023-11-10T12:32:11.849Z","dependency_job_id":"905a7f7f-3341-436f-a980-79ac1cde9c29","html_url":"https://github.com/softwaremill/terraform-eks-bootstrap","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/softwaremill/terraform-eks-bootstrap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwaremill%2Fterraform-eks-bootstrap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwaremill%2Fterraform-eks-bootstrap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwaremill%2Fterraform-eks-bootstrap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwaremill%2Fterraform-eks-bootstrap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/softwaremill","download_url":"https://codeload.github.com/softwaremill/terraform-eks-bootstrap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwaremill%2Fterraform-eks-bootstrap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28928641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T02:59:34.861Z","status":"ssl_error","status_checked_at":"2026-01-31T02:59:05.369Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T11:36:10.302Z","updated_at":"2026-01-31T04:01:32.361Z","avatar_url":"https://github.com/softwaremill.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terraform EKS module\n\nThe module is designed to create AWS EKS cluster with all necessary AWS resources such as: \n\n- VPC network and subnets with [proper tagging](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html#:~:text=.-,Subnet%20tagging,-For%201.18%20and), \n- Security Groups\n- NAT Gateways\n- AWS KMS encryption key to envelope encrypt Kubernetes Secrets\n- AWS EKS clusters with default node group\n\n### Available Features\n\u003c!-- BEGIN_TF_DOCS --\u003e\n## Requirements\n\nNo requirements.\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_aws\"\u003e\u003c/a\u003e [aws](#provider\\_aws) | 6.13.0 |\n| \u003ca name=\"provider_kubernetes\"\u003e\u003c/a\u003e [kubernetes](#provider\\_kubernetes) | 2.38.0 |\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_ebs_csi_irsa_role\"\u003e\u003c/a\u003e [ebs\\_csi\\_irsa\\_role](#module\\_ebs\\_csi\\_irsa\\_role) | terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks | 5.24.0 |\n| \u003ca name=\"module_eks\"\u003e\u003c/a\u003e [eks](#module\\_eks) | terraform-aws-modules/eks/aws | 19.19.0 |\n| \u003ca name=\"module_vpc\"\u003e\u003c/a\u003e [vpc](#module\\_vpc) | terraform-aws-modules/vpc/aws | 5.0.0 |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [kubernetes_storage_class.storage_class](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/storage_class) | resource |\n| [aws_availability_zones.available](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/availability_zones) | data source |\n| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |\n| [aws_partition.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/partition) | data source |\n| [aws_vpc.selected](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/vpc) | data source |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_additional_tags\"\u003e\u003c/a\u003e [additional\\_tags](#input\\_additional\\_tags) | Additional tags to include | `map(string)` | `{}` | no |\n| \u003ca name=\"input_create_aws_auth_configmap\"\u003e\u003c/a\u003e [create\\_aws\\_auth\\_configmap](#input\\_create\\_aws\\_auth\\_configmap) | Should Terraform create aws\\_auth ConfigMap used for setting up cluster access | `bool` | `false` | no |\n| \u003ca name=\"input_create_vpc\"\u003e\u003c/a\u003e [create\\_vpc](#input\\_create\\_vpc) | Specifies if new VPC be created, if not `vpc_id` and `subnet_ids` variables need to be provided | `bool` | `true` | no |\n| \u003ca name=\"input_eks_additional_cluster_addons\"\u003e\u003c/a\u003e [eks\\_additional\\_cluster\\_addons](#input\\_eks\\_additional\\_cluster\\_addons) | Map of additional cluster addon configurations to enable for the cluster. | `any` | `{}` | no |\n| \u003ca name=\"input_eks_cluster_auth_role\"\u003e\u003c/a\u003e [eks\\_cluster\\_auth\\_role](#input\\_eks\\_cluster\\_auth\\_role) | AWS roles with access permission to EKS cluster | \u003cpre\u003elist(object({\u003cbr/\u003e    rolearn : string\u003cbr/\u003e    username : string\u003cbr/\u003e    groups = list(string)\u003cbr/\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_eks_cluster_auth_user\"\u003e\u003c/a\u003e [eks\\_cluster\\_auth\\_user](#input\\_eks\\_cluster\\_auth\\_user) | AWS users with access permission to EKS cluster | \u003cpre\u003elist(object({\u003cbr/\u003e    userarn : string\u003cbr/\u003e    username : string\u003cbr/\u003e    groups = list(string)\u003cbr/\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_eks_cluster_endpoint_access\"\u003e\u003c/a\u003e [eks\\_cluster\\_endpoint\\_access](#input\\_eks\\_cluster\\_endpoint\\_access) | EKS managed node group default configurations | \u003cpre\u003eobject({\u003cbr/\u003e    enable_public_access : bool\u003cbr/\u003e    enable_private_access : bool\u003cbr/\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr/\u003e  \"enable_private_access\": false,\u003cbr/\u003e  \"enable_public_access\": true\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_eks_cluster_fargate_profiles\"\u003e\u003c/a\u003e [eks\\_cluster\\_fargate\\_profiles](#input\\_eks\\_cluster\\_fargate\\_profiles) | EKS Fargate profile object | `map(object({}))` | `{}` | no |\n| \u003ca name=\"input_eks_cluster_log_types\"\u003e\u003c/a\u003e [eks\\_cluster\\_log\\_types](#input\\_eks\\_cluster\\_log\\_types) | A list of the desired control plane logs to enable | `list(string)` | \u003cpre\u003e[\u003cbr/\u003e  \"api\",\u003cbr/\u003e  \"audit\",\u003cbr/\u003e  \"authenticator\"\u003cbr/\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_eks_cluster_name\"\u003e\u003c/a\u003e [eks\\_cluster\\_name](#input\\_eks\\_cluster\\_name) | Name of the Kubernetes cluster | `string` | `\"eks-cluster\"` | no |\n| \u003ca name=\"input_eks_cluster_node_groups\"\u003e\u003c/a\u003e [eks\\_cluster\\_node\\_groups](#input\\_eks\\_cluster\\_node\\_groups) | EKS managed additional node group | `any` | `{}` | no |\n| \u003ca name=\"input_eks_cluster_node_groups_default_configuration\"\u003e\u003c/a\u003e [eks\\_cluster\\_node\\_groups\\_default\\_configuration](#input\\_eks\\_cluster\\_node\\_groups\\_default\\_configuration) | EKS managed node group default configurations | `any` | \u003cpre\u003e{\u003cbr/\u003e  \"attach_cluster_primary_security_group\": true,\u003cbr/\u003e  \"desired_size\": 3,\u003cbr/\u003e  \"disk_size\": 40,\u003cbr/\u003e  \"instance_types\": [\u003cbr/\u003e    \"m5.large\"\u003cbr/\u003e  ],\u003cbr/\u003e  \"labels\": {\u003cbr/\u003e    \"node-group\": \"default\"\u003cbr/\u003e  },\u003cbr/\u003e  \"max_size\": 5,\u003cbr/\u003e  \"min_size\": 1\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_eks_cluster_version\"\u003e\u003c/a\u003e [eks\\_cluster\\_version](#input\\_eks\\_cluster\\_version) | Kubernetes cluster version | `string` | `\"1.33\"` | no |\n| \u003ca name=\"input_eks_create\"\u003e\u003c/a\u003e [eks\\_create](#input\\_eks\\_create) | Specifies if actually create the EKS cluster | `bool` | `true` | no |\n| \u003ca name=\"input_eks_create_kms_key\"\u003e\u003c/a\u003e [eks\\_create\\_kms\\_key](#input\\_eks\\_create\\_kms\\_key) | Should KMS key to encrypt kubernetes secrets be generated | `bool` | `true` | no |\n| \u003ca name=\"input_eks_default_cluster_addons\"\u003e\u003c/a\u003e [eks\\_default\\_cluster\\_addons](#input\\_eks\\_default\\_cluster\\_addons) | Map of default cluster addon configurations to enable for the cluster. | `any` | \u003cpre\u003e{\u003cbr/\u003e  \"coredns\": {\u003cbr/\u003e    \"most_recent\": true,\u003cbr/\u003e    \"preserve\": true,\u003cbr/\u003e    \"resolve_conflicts\": \"OVERWRITE\"\u003cbr/\u003e  },\u003cbr/\u003e  \"kube-proxy\": {\u003cbr/\u003e    \"most_recent\": true,\u003cbr/\u003e    \"preserve\": true,\u003cbr/\u003e    \"resolve_conflicts\": \"OVERWRITE\"\u003cbr/\u003e  },\u003cbr/\u003e  \"vpc-cni\": {\u003cbr/\u003e    \"most_recent\": true,\u003cbr/\u003e    \"preserve\": true,\u003cbr/\u003e    \"resolve_conflicts\": \"OVERWRITE\"\u003cbr/\u003e  }\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_eks_kms_key_administrators\"\u003e\u003c/a\u003e [eks\\_kms\\_key\\_administrators](#input\\_eks\\_kms\\_key\\_administrators) | List of ARNs of users/roles that should have administrator access to the KMS key | `list(string)` | `[]` | no |\n| \u003ca name=\"input_eks_kms_key_enable_default_policy\"\u003e\u003c/a\u003e [eks\\_kms\\_key\\_enable\\_default\\_policy](#input\\_eks\\_kms\\_key\\_enable\\_default\\_policy) | Should default KMS key policy be created | `bool` | `false` | no |\n| \u003ca name=\"input_eks_kms_key_owners\"\u003e\u003c/a\u003e [eks\\_kms\\_key\\_owners](#input\\_eks\\_kms\\_key\\_owners) | List of ARNs of users/roles that should have owner access to the KMS key | `list(string)` | `[]` | no |\n| \u003ca name=\"input_eks_kms_key_service_users\"\u003e\u003c/a\u003e [eks\\_kms\\_key\\_service\\_users](#input\\_eks\\_kms\\_key\\_service\\_users) | A list of IAM ARNs for key service users | `list(string)` | `[]` | no |\n| \u003ca name=\"input_eks_kms_key_users\"\u003e\u003c/a\u003e [eks\\_kms\\_key\\_users](#input\\_eks\\_kms\\_key\\_users) | A list of IAM ARNs for key users | `list(string)` | `[]` | no |\n| \u003ca name=\"input_eks_node_security_group_tags\"\u003e\u003c/a\u003e [eks\\_node\\_security\\_group\\_tags](#input\\_eks\\_node\\_security\\_group\\_tags) | Map of tags for eks node sg | `map(string)` | `{}` | no |\n| \u003ca name=\"input_eks_single_az\"\u003e\u003c/a\u003e [eks\\_single\\_az](#input\\_eks\\_single\\_az) | Specifies if all node's should be deployed in the same AZ | `bool` | `false` | no |\n| \u003ca name=\"input_eks_storage_classes\"\u003e\u003c/a\u003e [eks\\_storage\\_classes](#input\\_eks\\_storage\\_classes) | EBS storage class with custom parameters | \u003cpre\u003elist(object({\u003cbr/\u003e    name                      = string\u003cbr/\u003e    storage_class_provisioner = string\u003cbr/\u003e    parameters                = optional(map(string))\u003cbr/\u003e    volume_binding_mode       = optional(string)\u003cbr/\u003e    reclaim_policy            = optional(string)\u003cbr/\u003e\u003cbr/\u003e    }\u003cbr/\u003e  ))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_enable_bastion\"\u003e\u003c/a\u003e [enable\\_bastion](#input\\_enable\\_bastion) | True if bastion host should be created | `bool` | `false` | no |\n| \u003ca name=\"input_enable_ebs_csi_driver\"\u003e\u003c/a\u003e [enable\\_ebs\\_csi\\_driver](#input\\_enable\\_ebs\\_csi\\_driver) | Specifies if enable the EBS/CSI driver | `bool` | `true` | no |\n| \u003ca name=\"input_environment\"\u003e\u003c/a\u003e [environment](#input\\_environment) | Environment name | `string` | n/a | yes |\n| \u003ca name=\"input_logs_retention_days\"\u003e\u003c/a\u003e [logs\\_retention\\_days](#input\\_logs\\_retention\\_days) | Log retention in days | `number` | `14` | no |\n| \u003ca name=\"input_manage_aws_auth_configmap\"\u003e\u003c/a\u003e [manage\\_aws\\_auth\\_configmap](#input\\_manage\\_aws\\_auth\\_configmap) | Should Terraform manage aws\\_auth ConfigMap used for setting up cluster access | `bool` | `true` | no |\n| \u003ca name=\"input_org\"\u003e\u003c/a\u003e [org](#input\\_org) | Organization name - part of other resource names | `string` | `\"terraform\"` | no |\n| \u003ca name=\"input_private_subnet_ids\"\u003e\u003c/a\u003e [private\\_subnet\\_ids](#input\\_private\\_subnet\\_ids) | List of IDs of existing private subnets, only used when `create_vpc` is set to `false` | `list(string)` | `[]` | no |\n| \u003ca name=\"input_public_subnet_ids\"\u003e\u003c/a\u003e [public\\_subnet\\_ids](#input\\_public\\_subnet\\_ids) | List of IDs of existing public subnets, only used when `create_vpc` is set to `false` | `list(string)` | `[]` | no |\n| \u003ca name=\"input_region\"\u003e\u003c/a\u003e [region](#input\\_region) | n/a | `string` | `\"eu-central-1\"` | no |\n| \u003ca name=\"input_vpc_cidr\"\u003e\u003c/a\u003e [vpc\\_cidr](#input\\_vpc\\_cidr) | VPC CIDR address | `string` | `\"10.0.0.0/16\"` | no |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | ID of existing VPC, only used when `create_vpc` is set to `false` | `string` | `\"\"` | no |\n| \u003ca name=\"input_vpc_nat_setting\"\u003e\u003c/a\u003e [vpc\\_nat\\_setting](#input\\_vpc\\_nat\\_setting) | Enable NAT Gateway | \u003cpre\u003eobject({\u003cbr/\u003e    enable_nat_gateway : bool\u003cbr/\u003e    multi_az_nat_gateway : bool\u003cbr/\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr/\u003e  \"enable_nat_gateway\": true,\u003cbr/\u003e  \"multi_az_nat_gateway\": false\u003cbr/\u003e}\u003c/pre\u003e | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_eks_cluster_arn\"\u003e\u003c/a\u003e [eks\\_cluster\\_arn](#output\\_eks\\_cluster\\_arn) | ARN of the cluster |\n| \u003ca name=\"output_eks_cluster_certificate_authority_data\"\u003e\u003c/a\u003e [eks\\_cluster\\_certificate\\_authority\\_data](#output\\_eks\\_cluster\\_certificate\\_authority\\_data) | Base64 encoded certificate data required to communicate with the cluster |\n| \u003ca name=\"output_eks_cluster_endpoint\"\u003e\u003c/a\u003e [eks\\_cluster\\_endpoint](#output\\_eks\\_cluster\\_endpoint) | Endpoint for your Kubernetes API server |\n| \u003ca name=\"output_eks_cluster_id\"\u003e\u003c/a\u003e [eks\\_cluster\\_id](#output\\_eks\\_cluster\\_id) | The id of the cluster |\n| \u003ca name=\"output_eks_cluster_name\"\u003e\u003c/a\u003e [eks\\_cluster\\_name](#output\\_eks\\_cluster\\_name) | The name of the cluster |\n| \u003ca name=\"output_eks_cluster_oidc_issuer_arn\"\u003e\u003c/a\u003e [eks\\_cluster\\_oidc\\_issuer\\_arn](#output\\_eks\\_cluster\\_oidc\\_issuer\\_arn) | The ARN on the EKS cluster OIDC provider |\n| \u003ca name=\"output_eks_cluster_oidc_issuer_url\"\u003e\u003c/a\u003e [eks\\_cluster\\_oidc\\_issuer\\_url](#output\\_eks\\_cluster\\_oidc\\_issuer\\_url) | The URL on the EKS cluster OIDC Issuer |\n| \u003ca name=\"output_eks_cluster_primary_security_group_id\"\u003e\u003c/a\u003e [eks\\_cluster\\_primary\\_security\\_group\\_id](#output\\_eks\\_cluster\\_primary\\_security\\_group\\_id) | The cluster primary security group ID created by the EKS cluster |\n| \u003ca name=\"output_eks_cluster_version\"\u003e\u003c/a\u003e [eks\\_cluster\\_version](#output\\_eks\\_cluster\\_version) | The Kubernetes server version for the EKS cluster. |\n| \u003ca name=\"output_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#output\\_vpc\\_id) | The VPC ID |\n| \u003ca name=\"output_vpc_name\"\u003e\u003c/a\u003e [vpc\\_name](#output\\_vpc\\_name) | The name of the VPC |\n| \u003ca name=\"output_vpc_nats_ids\"\u003e\u003c/a\u003e [vpc\\_nats\\_ids](#output\\_vpc\\_nats\\_ids) | The list of allocation ID for Elastic IPs |\n| \u003ca name=\"output_vpc_private_route_table_ids\"\u003e\u003c/a\u003e [vpc\\_private\\_route\\_table\\_ids](#output\\_vpc\\_private\\_route\\_table\\_ids) | The list of IDs of private route tables |\n| \u003ca name=\"output_vpc_private_subnets_ids\"\u003e\u003c/a\u003e [vpc\\_private\\_subnets\\_ids](#output\\_vpc\\_private\\_subnets\\_ids) | The list of private subnets IDs associated with the VPC |\n| \u003ca name=\"output_vpc_public_route_table_ids\"\u003e\u003c/a\u003e [vpc\\_public\\_route\\_table\\_ids](#output\\_vpc\\_public\\_route\\_table\\_ids) | The list of IDs of public route tables |\n| \u003ca name=\"output_vpc_public_subnets_ids\"\u003e\u003c/a\u003e [vpc\\_public\\_subnets\\_ids](#output\\_vpc\\_public\\_subnets\\_ids) | The list of public subnets IDs associated with the VPC |\n\u003c!-- END_TF_DOCS --\u003e\n## eks_storage_classes variable\nThe eks_storage_classes variable takes the following parameters:\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"name\"\u003e\u003c/a\u003e [name](#name) | Standard storage class's name in metadata | `string` | \"\" | Required |\n| \u003ca name=\"storage_class_provisioner\"\u003e\u003c/a\u003e [storage_class_provisioner](#storage_class_provisioner) | Indicates the type of the provisioner | `string` | \"\" | Required |\n| \u003ca name=\"parameters\"\u003e\u003c/a\u003e [parameters](#parameters) | The parameters for the provisioner that should create volumes of this storage class. See the documentaion for the [available parameters](https://kubernetes.io/docs/concepts/storage/storage-classes/#parameters) | `map(string)` | {} | Optional |\n| \u003ca name=\"volume_binding_mode\"\u003e\u003c/a\u003e [volume\\_binding\\_mode](#volume\\_binding\\_mode) | Indicates when volume binding and dynamic provisioning should occur | `string` | \"WaitForFirstConsumer\" | Optional |\n| \u003ca name=\"reclaim_policy\"\u003e\u003c/a\u003e [reclaim\\_policy](#reclaim\\_policy) | Indicates the reclaim policy to use | `string` | \"Delete\" | Optional |\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwaremill%2Fterraform-eks-bootstrap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoftwaremill%2Fterraform-eks-bootstrap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwaremill%2Fterraform-eks-bootstrap/lists"}