{"id":29416339,"url":"https://github.com/bocan/toolbox-eks-cluster","last_synced_at":"2026-02-16T03:32:16.877Z","repository":{"id":302164710,"uuid":"1011482833","full_name":"bocan/toolbox-eks-cluster","owner":"bocan","description":" A Terraform project to produce a secure, autoscaling EKS cluster for testing, demos, and labs - using only Spot instances. ","archived":false,"fork":false,"pushed_at":"2026-01-25T13:58:10.000Z","size":131,"stargazers_count":1,"open_issues_count":14,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-26T06:20:30.345Z","etag":null,"topics":["autoscaling","aws","devops","eks","eks-cluster","framework","karpenter","kubernetes","opentofu","spot","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bocan.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-30T22:25:21.000Z","updated_at":"2025-10-24T22:45:37.000Z","dependencies_parsed_at":"2025-06-30T23:29:32.847Z","dependency_job_id":"359d413c-7926-4f49-9b17-ccb220437ecb","html_url":"https://github.com/bocan/toolbox-eks-cluster","commit_stats":null,"previous_names":["bocan/toolbox-eks-cluster"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/bocan/toolbox-eks-cluster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bocan%2Ftoolbox-eks-cluster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bocan%2Ftoolbox-eks-cluster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bocan%2Ftoolbox-eks-cluster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bocan%2Ftoolbox-eks-cluster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bocan","download_url":"https://codeload.github.com/bocan/toolbox-eks-cluster/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bocan%2Ftoolbox-eks-cluster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29499615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T02:07:14.481Z","status":"online","status_checked_at":"2026-02-16T02:03:22.852Z","response_time":115,"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":true,"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":["autoscaling","aws","devops","eks","eks-cluster","framework","karpenter","kubernetes","opentofu","spot","terraform"],"created_at":"2025-07-11T19:02:59.028Z","updated_at":"2026-02-16T03:32:16.868Z","avatar_url":"https://github.com/bocan.png","language":"HCL","readme":"# toolbox-eks-cluster\n\n[![Pre-commit Checks](https://img.shields.io/badge/pre--commit-enabled-brightgreen)](https://pre-commit.com/)\n[![Terraform](https://img.shields.io/badge/terraform--docs-automated-blueviolet)](https://terraform-docs.io/)\n[![pre-commit checks](https://github.com/bocan/toolbox-eks-cluster/actions/workflows/pre-commit.yml/badge.svg)](https://github.com/bocan/toolbox-eks-cluster/actions/workflows/pre-commit.yml)\n\nA simple tool to quickly provision and manage a cost-effective Amazon EKS (Elastic Kubernetes Service) cluster on AWS, designed for rapid prototyping, dev/test environments, and learning Kubernetes on the cloud. This is NOT mean for production use!\n\nIt has 2 _modes_. It can either create a dedicated VPC and put the EKS cluster into it, or it can use an existing VPC.\n\nTo a normal Terraform user, you'll find this tool a little strange because:\n\n* It avoids public modules almost entirely in favour of pure resources. (There's 1 public module for VPC endpoints, but I'll be removing that soon.)  This is frankly because I've found all the big public modules to be too inflexible for my needs, and too prone to breaking changes.\n* It avoids being too parameterized.  Let's just call it opinionated. Again, this tool isn't meant for flexibility, it's meant for simplicity and ease of use.\n\n**THIS DOCUMENT IS A WORK IN PROGRESS. IT IS NOT COMPLETE AND MAY CHANGE SIGNIFICANTLY.**\n\n---\n\n## Features\n\n- **One-command EKS Cluster Creation:** Spin up an EKS cluster with sane defaults.\n- **Cost-focused:** Uses minimal resources and SPOT instances to keep AWS charges low.\n- **Customizable:** Easy to tweak for your needs.\n- **OpenTofu / Terraform based:** Infrastructure as Code using [OpenTofu](https://opentofu.org/) or [Terraform](https://www.terraform.io/).\n- **Pre-commit hooks:** Ensures code quality, formatting, and updates to documentation via [terraform-docs](https://terraform-docs.io/).\n\n---\n\n## Requirements\n\n- [OpenTofu](https://opentofu.org/docs/intro/install/) or [Terraform](https://www.terraform.io/downloads.html) \u003e= 1.0.0\n- [kubectl](https://kubernetes.io/docs/tasks/tools/) (for interacting with the cluster)\n- [pre-commit](https://pre-commit.com/) (for local checks)\n\n---\n\n## Costings\n\nIf this thing is run solidly for 1 month, it will cost a minimum of $206. That's **before** any Karpenter nodes are added. I'd make a conservative guess that it could maybe double that once you start adding pods in anger.  But all that said, this is designed to be run for a few **hours** at a time, not 24/7. Turn it on, play with it, then turn it off. If you do that, you can expect it to cost between 3 and 6 dollers per day - assuming 8 hours of usage per day.\n\n---\n\n## Getting Started - using OpenTofu\n\n### 1. Clone the repo\n\n```bash\ngit clone https://github.com/bocan/toolbox-eks-cluster.git\ncd toolbox-eks-cluster\n```\n\n### 2. Install pre-commit hooks\n\n```bash\npre-commit install\n```\n\n### 3. Initialize Terraform\n\n```bash\ntofu init\n```\n\n### 4. Review and set variables\n\nCopy `terraform.tfvars.example` to `terraform.tfvars`, edit the variables as needed (see [Inputs](#inputs) below).\n\n### 5. Create your EKS cluster\n\n```bash\ntofu apply\n```\n\n### 6. (Optional) Destroy your EKS cluster\n\n```bash\ntofu destroy\n```\n\n---\n\n## Examples\n\nBasic usage:\n\n```hcl\nmodule \"eks\" {\n  source = \"github.com/bocan/toolbox-eks-cluster\"\n  # ...add required variables here\n}\n```\n\n---\n\n## Documentation\n\n\u003c!-- BEGIN_TF_DOCS --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | \u003e= 1.11.4 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | \u003e= 6.28.0 |\n| \u003ca name=\"requirement_helm\"\u003e\u003c/a\u003e [helm](#requirement\\_helm) | \u003e= 3.1.1 |\n| \u003ca name=\"requirement_kubectl\"\u003e\u003c/a\u003e [kubectl](#requirement\\_kubectl) | \u003e= 1.19.0 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_aws\"\u003e\u003c/a\u003e [aws](#provider\\_aws) | \u003e= 6.28.0 |\n| \u003ca name=\"provider_helm\"\u003e\u003c/a\u003e [helm](#provider\\_helm) | \u003e= 3.1.1 |\n| \u003ca name=\"provider_kubectl\"\u003e\u003c/a\u003e [kubectl](#provider\\_kubectl) | \u003e= 1.19.0 |\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_vpc\"\u003e\u003c/a\u003e [vpc](#module\\_vpc) | ./modules/vpc | n/a |\n| \u003ca name=\"module_vpclookup\"\u003e\u003c/a\u003e [vpclookup](#module\\_vpclookup) | ./modules/vpclookup | n/a |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [aws_eks_addon.coredns](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_addon) | resource |\n| [aws_eks_addon.kube_proxy](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_addon) | resource |\n| [aws_eks_addon.pod_identity](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_addon) | resource |\n| [aws_eks_addon.vpc_cni](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_addon) | resource |\n| [aws_eks_cluster.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_cluster) | resource |\n| [aws_eks_node_group.managed](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_node_group) | resource |\n| [aws_iam_instance_profile.karpenter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_instance_profile) | resource |\n| [aws_iam_openid_connect_provider.eks](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_openid_connect_provider) | resource |\n| [aws_iam_role.eks](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role.karpenter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role.karpenter_irsa](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role.nodes](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role_policy.karpenter_irsa_extra](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |\n| [aws_iam_role_policy.karpenter_node_extra](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |\n| [aws_iam_role_policy_attachment.eks](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_iam_role_policy_attachment.karpenter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_iam_role_policy_attachment.karpenter_irsa](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_iam_role_policy_attachment.nodes_policies](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_kms_key.eks](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/kms_key) | resource |\n| [aws_launch_template.eks_managed](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/launch_template) | resource |\n| [helm_release.karpenter](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |\n| [kubectl_manifest.aws_auth](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |\n| [kubectl_manifest.karpenter_setup_ec2nodeclass](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |\n| [kubectl_manifest.karpenter_setup_nodepool](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource |\n| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |\n| [aws_eks_cluster_auth.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/eks_cluster_auth) | data source |\n| [aws_iam_policy_document.eks_assume](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |\n| [aws_iam_policy_document.nodes_assume](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_architecture\"\u003e\u003c/a\u003e [architecture](#input\\_architecture) | The architecture to use for the EKS cluster | `string` | `\"arm64\"` | no |\n| \u003ca name=\"input_cidr_block\"\u003e\u003c/a\u003e [cidr\\_block](#input\\_cidr\\_block) | CIDR block for the VPC - if we are creating a new VPC | `string` | n/a | yes |\n| \u003ca name=\"input_common_tags\"\u003e\u003c/a\u003e [common\\_tags](#input\\_common\\_tags) | Common tags to apply to all resources | `map(string)` | n/a | yes |\n| \u003ca name=\"input_create_vpc\"\u003e\u003c/a\u003e [create\\_vpc](#input\\_create\\_vpc) | Whether to create a new VPC or use an existing one | `bool` | `true` | no |\n| \u003ca name=\"input_project_name\"\u003e\u003c/a\u003e [project\\_name](#input\\_project\\_name) | The name of the project | `string` | `\"eks-lab\"` | no |\n| \u003ca name=\"input_region\"\u003e\u003c/a\u003e [region](#input\\_region) | AWS region to deploy resources in | `string` | n/a | yes |\n| \u003ca name=\"input_shortname\"\u003e\u003c/a\u003e [shortname](#input\\_shortname) | Your name - shortened | `string` | n/a | yes |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | The ID of the existing VPC to use - if we are not creating a new VPC | `string` | n/a | yes |\n\n## Outputs\n\nNo outputs.\n\u003c!-- END_TF_DOCS --\u003e\n\n---\n\n## Security\n\n- Follows AWS and Kubernetes security best practices where possible.\n- Review IAM roles and policies before applying to production environments.\n\n---\n\n## Contributing\n\nContributions, issues, and feature requests are welcome! Please open an issue or submit a pull request.\n\n---\n\n## License\n\n[MIT License](LICENSE)\n\n---\n\n## Maintainer\n\nChris Funderburg ([@bocan](https://github.com/bocan))\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbocan%2Ftoolbox-eks-cluster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbocan%2Ftoolbox-eks-cluster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbocan%2Ftoolbox-eks-cluster/lists"}