{"id":28718823,"url":"https://github.com/cloudopusnet/terraform-aws-simple-grafana","last_synced_at":"2025-07-26T07:40:41.027Z","repository":{"id":291959730,"uuid":"979251874","full_name":"cloudopusnet/terraform-aws-simple-grafana","owner":"cloudopusnet","description":"A simple solution for self-hosting Grafana OSS on AWS","archived":false,"fork":false,"pushed_at":"2025-07-23T14:09:57.000Z","size":291,"stargazers_count":1,"open_issues_count":11,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-23T16:18:09.667Z","etag":null,"topics":["aws","grafana","self-hosted","spot","terraform","terraform-module"],"latest_commit_sha":null,"homepage":"https://registry.terraform.io/modules/cloudopusnet/simple-grafana/aws/latest","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/cloudopusnet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-05-07T08:20:41.000Z","updated_at":"2025-05-25T08:26:58.000Z","dependencies_parsed_at":"2025-05-25T09:23:19.561Z","dependency_job_id":"eabc96d7-7a2b-40a7-af99-d800e5926124","html_url":"https://github.com/cloudopusnet/terraform-aws-simple-grafana","commit_stats":null,"previous_names":["cloudopusnet/terraform-aws-simple-grafana"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/cloudopusnet/terraform-aws-simple-grafana","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudopusnet%2Fterraform-aws-simple-grafana","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudopusnet%2Fterraform-aws-simple-grafana/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudopusnet%2Fterraform-aws-simple-grafana/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudopusnet%2Fterraform-aws-simple-grafana/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudopusnet","download_url":"https://codeload.github.com/cloudopusnet/terraform-aws-simple-grafana/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudopusnet%2Fterraform-aws-simple-grafana/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267137097,"owners_count":24041313,"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-07-26T02:00:08.937Z","response_time":62,"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":["aws","grafana","self-hosted","spot","terraform","terraform-module"],"created_at":"2025-06-15T05:04:41.222Z","updated_at":"2025-07-26T07:40:40.948Z","avatar_url":"https://github.com/cloudopusnet.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# terraform-aws-simple-grafana\nA simple solution for self-hosting Grafana OSS on AWS. It is designed for __low cost__ and easy setup, the solution would rely on in-memory sqlite database by design and would utilize __spot__ instance (as it is hard coded into the module)\n\n## Architecture Overview\n![overview](./docs/arch-overview.png)\n\n### Details\n1. The solution should be deployed to a public subnet where, public `Elastic IP Address` can be assigned to a network interface/EC2 instance\n    1. The VPC and Subnet address should be provided as a `module` variable\n1. The solution is utilizing `Spot Instance` type\n    1. Instance type can be provided as a `module` variable\n1. The solution is backing up the Grafana `sqlite` database and `plugins` to AWS S3\n    1. S3 Bucket should be provided as a module variable\n\n# Terraform Module Configuration\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.9.8 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | \u003e= 5.97 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_aws\"\u003e\u003c/a\u003e [aws](#provider\\_aws) | \u003e= 5.97 |\n\n## Modules\n\nNo modules.\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [aws_eip.main](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eip) | resource |\n| [aws_eip_association.main](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eip_association) | resource |\n| [aws_iam_instance_profile.main](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_instance_profile) | resource |\n| [aws_iam_role.profile](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |\n| [aws_iam_role_policy.s3_permissions](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource |\n| [aws_iam_role_policy_attachment.profile_ssm](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource |\n| [aws_instance.main](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance) | resource |\n| [aws_launch_template.main](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/launch_template) | resource |\n| [aws_network_interface.main](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/network_interface) | resource |\n| [aws_security_group.main](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group) | resource |\n| [aws_security_group_rule.main_egress_all](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |\n| [aws_security_group_rule.main_ingress_http](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |\n| [aws_security_group_rule.main_ingress_https](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule) | resource |\n| [aws_iam_policy_document.assume_role](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_backup_bucket_name\"\u003e\u003c/a\u003e [backup\\_bucket\\_name](#input\\_backup\\_bucket\\_name) | Name of the Backup Bucket | `string` | n/a | yes |\n| \u003ca name=\"input_block_device_mappings\"\u003e\u003c/a\u003e [block\\_device\\_mappings](#input\\_block\\_device\\_mappings) | Attached EBS Root volume properties | \u003cpre\u003eobject({\u003cbr/\u003e    volume_type = string\u003cbr/\u003e    volume_size = number\u003cbr/\u003e    encrypted   = bool\u003cbr/\u003e    iops        = number\u003cbr/\u003e    throughput  = number\u003cbr/\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr/\u003e  \"encrypted\": true,\u003cbr/\u003e  \"iops\": 3000,\u003cbr/\u003e  \"throughput\": 125,\u003cbr/\u003e  \"volume_size\": 20,\u003cbr/\u003e  \"volume_type\": \"gp3\"\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_grafana_config_ini\"\u003e\u003c/a\u003e [grafana\\_config\\_ini](#input\\_grafana\\_config\\_ini) | n/a | \u003cpre\u003eobject({\u003cbr/\u003e    paths = object({\u003cbr/\u003e      data               = optional(string, \"/var/lib/grafana\")\u003cbr/\u003e      temp_data_lifetime = optional(string, \"18h\")\u003cbr/\u003e      logs               = optional(string, \"/var/lib/grafana/plugins\")\u003cbr/\u003e      plugins            = optional(string, \"/var/log/grafana\")\u003cbr/\u003e    })\u003cbr/\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr/\u003e  \"paths\": {\u003cbr/\u003e    \"data\": \"/var/lib/grafana\",\u003cbr/\u003e    \"logs\": \"/var/lib/grafana/plugins\",\u003cbr/\u003e    \"plugins\": \"/var/log/grafana\",\u003cbr/\u003e    \"temp_data_lifetime\": \"18h\"\u003cbr/\u003e  }\u003cbr/\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_instance_subnet_id\"\u003e\u003c/a\u003e [instance\\_subnet\\_id](#input\\_instance\\_subnet\\_id) | The Subnet Id where the simple grafana stack will be launched | `string` | n/a | yes |\n| \u003ca name=\"input_instance_type\"\u003e\u003c/a\u003e [instance\\_type](#input\\_instance\\_type) | Instance Type of the Grafana Instance | `string` | `\"t4g.small\"` | no |\n| \u003ca name=\"input_nginx_ssl_cert_key_parameter_name\"\u003e\u003c/a\u003e [nginx\\_ssl\\_cert\\_key\\_parameter\\_name](#input\\_nginx\\_ssl\\_cert\\_key\\_parameter\\_name) | Name of the SSL parameter of TLS Certification Key for NGINX reverse proxy | `string` | n/a | yes |\n| \u003ca name=\"input_nginx_ssl_cert_parameter_name\"\u003e\u003c/a\u003e [nginx\\_ssl\\_cert\\_parameter\\_name](#input\\_nginx\\_ssl\\_cert\\_parameter\\_name) | Name of the SSL parameter of the TLS Certification for NGINX reverse proxy | `string` | n/a | yes |\n| \u003ca name=\"input_security_group_ids\"\u003e\u003c/a\u003e [security\\_group\\_ids](#input\\_security\\_group\\_ids) | Additional Security Group Ids attached to the Grafana Instance | `list(string)` | `[]` | no |\n| \u003ca name=\"input_vpc_id\"\u003e\u003c/a\u003e [vpc\\_id](#input\\_vpc\\_id) | The VPC Id where the simple-grafana stack will be launched | `string` | n/a | yes |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_grafana_instance_public_ip\"\u003e\u003c/a\u003e [grafana\\_instance\\_public\\_ip](#output\\_grafana\\_instance\\_public\\_ip) | Public IP Address of the Grafana Instance |\n\u003c!-- END_TF_DOCS --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudopusnet%2Fterraform-aws-simple-grafana","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudopusnet%2Fterraform-aws-simple-grafana","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudopusnet%2Fterraform-aws-simple-grafana/lists"}