{"id":25735671,"url":"https://github.com/upmaru/terraform-aws-instellar","last_synced_at":"2025-09-10T06:37:38.645Z","repository":{"id":104407544,"uuid":"568336735","full_name":"upmaru/terraform-aws-instellar","owner":"upmaru","description":"Terraform module for bootstrapping LXD cluster for using with https://opsmaru.com","archived":false,"fork":false,"pushed_at":"2024-07-15T03:12:15.000Z","size":246,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2025-07-10T08:35:44.678Z","etag":null,"topics":["clustering","infrastructure-as-code","lxd","terraform-module"],"latest_commit_sha":null,"homepage":"https://registry.terraform.io/modules/upmaru/instellar/aws/latest","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/upmaru.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}},"created_at":"2022-11-20T07:45:23.000Z","updated_at":"2024-12-18T08:31:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"810c46ea-d284-4121-a406-e4af880a05f8","html_url":"https://github.com/upmaru/terraform-aws-instellar","commit_stats":null,"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/upmaru/terraform-aws-instellar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upmaru%2Fterraform-aws-instellar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upmaru%2Fterraform-aws-instellar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upmaru%2Fterraform-aws-instellar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upmaru%2Fterraform-aws-instellar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/upmaru","download_url":"https://codeload.github.com/upmaru/terraform-aws-instellar/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/upmaru%2Fterraform-aws-instellar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274422374,"owners_count":25282125,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-10T02:00:12.551Z","response_time":83,"last_error":null,"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":["clustering","infrastructure-as-code","lxd","terraform-module"],"created_at":"2025-02-26T05:31:36.951Z","updated_at":"2025-09-10T06:37:38.603Z","avatar_url":"https://github.com/upmaru.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terraform AWS Module for Instellar\n\nThis module automatically forms LXD cluster on amazon AWS. This terraform module will do the following:\n\n- [x] Setup networking\n- [x] Setup multi az public subnet\n- [x] Setup bastion node\n- [x] Setup compute instances\n- [x] Setup Private Key access\n- [x] Automatically form a cluster\n- [x] Destroy a cluster\n- [x] Enable removal of specific nodes gracefully\n- [x] Protect against `database-leader` deletion\n\nThese functionality come together to enable the user to fully manage LXD cluster using IaC (infrastructure as code)\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.0.0 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | ~\u003e 5.0 |\n| \u003ca name=\"requirement_tls\"\u003e\u003c/a\u003e [tls](#requirement\\_tls) | 4.0.4 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_aws\"\u003e\u003c/a\u003e [aws](#provider\\_aws) | 5.43.0 |\n| \u003ca name=\"provider_cloudinit\"\u003e\u003c/a\u003e [cloudinit](#provider\\_cloudinit) | 2.3.3 |\n| \u003ca name=\"provider_ssh\"\u003e\u003c/a\u003e [ssh](#provider\\_ssh) | 2.7.0 |\n| \u003ca name=\"provider_terraform\"\u003e\u003c/a\u003e [terraform](#provider\\_terraform) | n/a |\n| \u003ca name=\"provider_tls\"\u003e\u003c/a\u003e [tls](#provider\\_tls) | 4.0.4 |\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_balancer\"\u003e\u003c/a\u003e [balancer](#module\\_balancer) | upmaru/instellar/aws//modules/balancer | ~\u003e 0.9 |\n| \u003ca name=\"module_global_accelerator\"\u003e\u003c/a\u003e [global\\_accelerator](#module\\_global\\_accelerator) | upmaru/instellar/aws//modules/global-accelerator | ~\u003e 0.9 |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [aws_iam_instance_profile.bastion](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_instance_profile) | resource |\n| [aws_iam_instance_profile.nodes](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_instance_profile) | resource |\n| [aws_iam_role.bastion](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_attachment.bastion_core](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_iam_role_policy_attachment.bastion_patch](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_iam_role_policy_attachment.nodes_core](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_iam_role_policy_attachment.nodes_patch](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_instance.bastion](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance) | resource |\n| [aws_instance.bootstrap_node](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance) | resource |\n| [aws_instance.nodes](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance) | resource |\n| [aws_key_pair.bastion](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/key_pair) | resource |\n| [aws_key_pair.terraform_cloud](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/key_pair) | resource |\n| [aws_placement_group.nodes](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/placement_group) | resource |\n| [aws_security_group.bastion_firewall](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group) | resource |\n| [aws_security_group.nodes_firewall](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group) | resource |\n| [aws_vpc_security_group_egress_rule.allow_bastion_outgoing_v4](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_egress_rule) | resource |\n| [aws_vpc_security_group_egress_rule.allow_bastion_outgoing_v6](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_egress_rule) | resource |\n| [aws_vpc_security_group_egress_rule.allow_nodes_outgoing_v4](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_egress_rule) | resource |\n| [aws_vpc_security_group_egress_rule.allow_nodes_outgoing_v6](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_egress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.allow_ssh](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.cross_nodes](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.nodes_from_bastion](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.nodes_public_http_v4](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.nodes_public_http_v6](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.nodes_public_https_v4](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.nodes_public_https_v6](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.nodes_public_lxd_v4](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.nodes_public_lxd_v6](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.nodes_public_uplink_v4](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [aws_vpc_security_group_ingress_rule.nodes_public_uplink_v6](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc_security_group_ingress_rule) | resource |\n| [ssh_resource.cluster_join_token](https://registry.terraform.io/providers/loafoe/ssh/latest/docs/resources/resource) | resource |\n| [ssh_resource.node_detail](https://registry.terraform.io/providers/loafoe/ssh/latest/docs/resources/resource) | resource |\n| [ssh_resource.trust_token](https://registry.terraform.io/providers/loafoe/ssh/latest/docs/resources/resource) | resource |\n| [terraform_data.bastion_cloudinit](https://registry.terraform.io/providers/hashicorp/terraform/latest/docs/resources/data) | resource |\n| [terraform_data.reboot](https://registry.terraform.io/providers/hashicorp/terraform/latest/docs/resources/data) | resource |\n| [terraform_data.removal](https://registry.terraform.io/providers/hashicorp/terraform/latest/docs/resources/data) | resource |\n| [tls_private_key.bastion_key](https://registry.terraform.io/providers/hashicorp/tls/4.0.4/docs/resources/private_key) | resource |\n| [tls_private_key.terraform_cloud](https://registry.terraform.io/providers/hashicorp/tls/4.0.4/docs/resources/private_key) | resource |\n| [aws_ami.ubuntu](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ami) | data source |\n| [aws_iam_policy_document.assume_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |\n| [aws_key_pair.terminal](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/key_pair) | data source |\n| [cloudinit_config.bastion](https://registry.terraform.io/providers/hashicorp/cloudinit/latest/docs/data-sources/config) | data source |\n| [cloudinit_config.node](https://registry.terraform.io/providers/hashicorp/cloudinit/latest/docs/data-sources/config) | data source |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_ami_architecture\"\u003e\u003c/a\u003e [ami\\_architecture](#input\\_ami\\_architecture) | The architecture of the AMI | `string` | `\"amd64\"` | no |\n| \u003ca name=\"input_balancer\"\u003e\u003c/a\u003e [balancer](#input\\_balancer) | Enable Load Balancer | `bool` | `false` | no |\n| \u003ca name=\"input_balancer_deletion_protection\"\u003e\u003c/a\u003e [balancer\\_deletion\\_protection](#input\\_balancer\\_deletion\\_protection) | Enable balancer deletion protection | `bool` | `true` | no |\n| \u003ca name=\"input_balancer_ssh\"\u003e\u003c/a\u003e [balancer\\_ssh](#input\\_balancer\\_ssh) | Enable SSH port on balancer | `bool` | `true` | no |\n| \u003ca name=\"input_bastion_size\"\u003e\u003c/a\u003e [bastion\\_size](#input\\_bastion\\_size) | Bastion instance type? | `string` | `\"t3a.micro\"` | no |\n| \u003ca name=\"input_bastion_ssh\"\u003e\u003c/a\u003e [bastion\\_ssh](#input\\_bastion\\_ssh) | Enable SSH port | `bool` | `true` | no |\n| \u003ca name=\"input_blueprint\"\u003e\u003c/a\u003e [blueprint](#input\\_blueprint) | Identifier of the blueprint | `string` | n/a | yes |\n| \u003ca name=\"input_cluster_topology\"\u003e\u003c/a\u003e [cluster\\_topology](#input\\_cluster\\_topology) | How many nodes do you want in your cluster? | \u003cpre\u003elist(object({\u003cbr\u003e    id   = number\u003cbr\u003e    name = string\u003cbr\u003e    size = optional(string, \"t3.medium\")\u003cbr\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_global_accelerator\"\u003e\u003c/a\u003e [global\\_accelerator](#input\\_global\\_accelerator) | Enable Global Accelerator | `bool` | `false` | no |\n| \u003ca name=\"input_identifier\"\u003e\u003c/a\u003e [identifier](#input\\_identifier) | Name of your cluster | `string` | n/a | yes |\n| \u003ca name=\"input_network_dependencies\"\u003e\u003c/a\u003e [network\\_dependencies](#input\\_network\\_dependencies) | value | `list` | `[]` | no |\n| \u003ca name=\"input_node_detail_revision\"\u003e\u003c/a\u003e [node\\_detail\\_revision](#input\\_node\\_detail\\_revision) | The revision of the node detail | `number` | `1` | no |\n| \u003ca name=\"input_node_monitoring\"\u003e\u003c/a\u003e [node\\_monitoring](#input\\_node\\_monitoring) | Enable / Disable detailed monitoring | `bool` | `false` | no |\n| \u003ca name=\"input_node_size\"\u003e\u003c/a\u003e [node\\_size](#input\\_node\\_size) | Which instance type? | `string` | `\"t3a.medium\"` | no |\n| \u003ca name=\"input_protect_leader\"\u003e\u003c/a\u003e [protect\\_leader](#input\\_protect\\_leader) | Protect the database leader node | `bool` | `true` | no |\n| \u003ca name=\"input_public_subnet_ids\"\u003e\u003c/a\u003e [public\\_subnet\\_ids](#input\\_public\\_subnet\\_ids) | Public subnet ids to pass in if block type is compute | `list(string)` | n/a | yes |\n| \u003ca name=\"input_publicly_accessible\"\u003e\u003c/a\u003e [publicly\\_accessible](#input\\_publicly\\_accessible) | Make the cluster publically accessible? If you use a load balancer this can be false. | `bool` | `true` | no |\n| \u003ca name=\"input_region\"\u003e\u003c/a\u003e [region](#input\\_region) | AWS region | `string` | n/a | yes |\n| \u003ca name=\"input_ssh_keys\"\u003e\u003c/a\u003e [ssh\\_keys](#input\\_ssh\\_keys) | List of ssh key names | `list(string)` | `[]` | no |\n| \u003ca name=\"input_ssm\"\u003e\u003c/a\u003e [ssm](#input\\_ssm) | Enable SSM | `bool` | `false` | no |\n| \u003ca name=\"input_storage_size\"\u003e\u003c/a\u003e [storage\\_size](#input\\_storage\\_size) | How much storage on your nodes? | `number` | `40` | no |\n| \u003ca name=\"input_volume_type\"\u003e\u003c/a\u003e [volume\\_type](#input\\_volume\\_type) | Type of EBS Volume to use | `string` | `\"gp3\"` | no |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | vpc id to pass in if block type is compute | `string` | n/a | yes |\n| \u003ca name=\"input_vpc_ip_range\"\u003e\u003c/a\u003e [vpc\\_ip\\_range](#input\\_vpc\\_ip\\_range) | VPC ip range | `string` | n/a | yes |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_balancer\"\u003e\u003c/a\u003e [balancer](#output\\_balancer) | Load balancer details |\n| \u003ca name=\"output_bastion_access\"\u003e\u003c/a\u003e [bastion\\_access](#output\\_bastion\\_access) | Bastion access output for passing into other modules |\n| \u003ca name=\"output_bastion_security_group_id\"\u003e\u003c/a\u003e [bastion\\_security\\_group\\_id](#output\\_bastion\\_security\\_group\\_id) | Bastion security group id |\n| \u003ca name=\"output_bootstrap_node\"\u003e\u003c/a\u003e [bootstrap\\_node](#output\\_bootstrap\\_node) | Bootstrap node details |\n| \u003ca name=\"output_cluster_address\"\u003e\u003c/a\u003e [cluster\\_address](#output\\_cluster\\_address) | Bootstrap node public ip |\n| \u003ca name=\"output_identifier\"\u003e\u003c/a\u003e [identifier](#output\\_identifier) | Identifier of the cluster |\n| \u003ca name=\"output_nodes\"\u003e\u003c/a\u003e [nodes](#output\\_nodes) | Compute nodes details |\n| \u003ca name=\"output_nodes_iam_role\"\u003e\u003c/a\u003e [nodes\\_iam\\_role](#output\\_nodes\\_iam\\_role) | IAM Role for nodes and bootstrap node |\n| \u003ca name=\"output_nodes_security_group_id\"\u003e\u003c/a\u003e [nodes\\_security\\_group\\_id](#output\\_nodes\\_security\\_group\\_id) | Nodes security group id |\n| \u003ca name=\"output_subnet_ids\"\u003e\u003c/a\u003e [subnet\\_ids](#output\\_subnet\\_ids) | Subnet IDs |\n| \u003ca name=\"output_trust_token\"\u003e\u003c/a\u003e [trust\\_token](#output\\_trust\\_token) | Trust token for the cluster |\n| \u003ca name=\"output_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#output\\_vpc\\_id) | VPC id |\n\u003c!-- END_TF_DOCS --\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fupmaru%2Fterraform-aws-instellar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fupmaru%2Fterraform-aws-instellar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fupmaru%2Fterraform-aws-instellar/lists"}