{"id":35640896,"url":"https://github.com/dfds/infrastructure-modules","last_synced_at":"2026-04-27T10:01:36.805Z","repository":{"id":37431686,"uuid":"152559953","full_name":"dfds/infrastructure-modules","owner":"dfds","description":"Terraform modules for infrastructure","archived":false,"fork":false,"pushed_at":"2026-04-17T11:47:12.000Z","size":166440,"stargazers_count":36,"open_issues_count":12,"forks_count":17,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-04-17T13:28:36.614Z","etag":null,"topics":["aws","hacktoberfest","infrastructure","infrastructure-modules","terraform-modules"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dfds.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":".github/CODEOWNERS","security":"security/azure-defender-cloudformation/main.tf","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":"2018-10-11T08:46:10.000Z","updated_at":"2026-04-17T11:24:54.000Z","dependencies_parsed_at":"2026-03-07T15:03:01.688Z","dependency_job_id":null,"html_url":"https://github.com/dfds/infrastructure-modules","commit_stats":null,"previous_names":[],"tags_count":1735,"template":false,"template_full_name":null,"purl":"pkg:github/dfds/infrastructure-modules","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfds%2Finfrastructure-modules","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfds%2Finfrastructure-modules/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfds%2Finfrastructure-modules/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfds%2Finfrastructure-modules/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dfds","download_url":"https://codeload.github.com/dfds/infrastructure-modules/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfds%2Finfrastructure-modules/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32331305,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"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","hacktoberfest","infrastructure","infrastructure-modules","terraform-modules"],"created_at":"2026-01-05T11:18:37.159Z","updated_at":"2026-04-27T10:01:36.775Z","avatar_url":"https://github.com/dfds.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![QA Pipeline](https://github.com/dfds/infrastructure-modules/actions/workflows/qa.yml/badge.svg)](https://github.com/dfds/infrastructure-modules/actions/workflows/qa.yml)\n[![Gitleaks](https://github.com/dfds/infrastructure-modules/actions/workflows/secret-detection.yml/badge.svg)](https://github.com/dfds/infrastructure-modules/actions/workflows/secret-detection.yml)\n[![Trivy IAC with Quality Gate](https://github.com/dfds/infrastructure-modules/actions/workflows/trivy.yml/badge.svg)](https://github.com/dfds/infrastructure-modules/actions/workflows/trivy.yml)\n[![TFLint](https://github.com/dfds/infrastructure-modules/actions/workflows/tflint.yml/badge.svg)](https://github.com/dfds/infrastructure-modules/actions/workflows/tflint.yml)\n\n# infrastructure-modules\n\nTerraform modules for AWS infrastructure.\n\nContainers to run this: https://hub.docker.com/u/dfdsdk\n\n## Terraform Best Practices\n\n### Terraform Files\n\n- main.tf\n- outputs.tf\n- vars.tf\n\n### Terraform Module Folder Structure\n\nWe recommend a folder structure for Terraform modules like so:\n\n```\nmodule-category\n └ module-name\n    └ README.md\n    └ main.tf\n    └ outputs.tf\n    └ vars.tf\n```\n\nExample:\n```\nsecurity\n └ iam-account-alias\n    └ README.md\n    └ main.tf\n    └ outputs.tf\n    └ vars.tf\n └ org-account\n    └ README.md\n    └ main.tf\n    └ outputs.tf\n    └ vars.tf\nnetwork\n └ ...\n```\n\n## Test/QA\n\n### Find compatible AMI images\n\n```bash\nEKS_CLUSTER_VERSION=1.34\nAWS_REGION=eu-west-1\n\naws ssm get-parameter --name /aws/service/eks/optimized-ami/$EKS_CLUSTER_VERSION/amazon-linux-2023/x86_64/standard/recommended/image_id --region $AWS_REGION --query \"Parameter.Value\" --output text\n```\n\n## Release process\n\nBranch protection is not enabled on this repo. Instead we rely on release tags to ensure we do not commit straight to production.\n\nRelease tags are created automatically when merging to master branch. The release tag is calculated based on labels (release:najor, release:minor, release:patch or norelease). The norelease label is used when updating test cases or the QA environment, but not when updating the modules.\n\n### Pre-Commit Hooks (Optional)\n\nThis repo defines Git pre-commit hooks intended for use with pre-commit.\n\n- Install pre-commit. E.g. brew install pre-commit. https://pre-commit.com/#install\n- Run `pre-commit install` in the repo.\n- That’s it! Now every time you commit a code change (.tf file), the hooks in the hooks: config will execute.\n\n### Credits\n\nThe general structure of these modules, file layout etc. are largely based on Gruntwork's recommendations. More specifically the blog posts:\n\n* [Gruntwork blog: How to manage Terraform state](https://blog.gruntwork.io/how-to-manage-terraform-state-28f5697e68fa)\n* [Gruntwork blog: How to create reusable infrastructure with Terraform modules](https://blog.gruntwork.io/how-to-create-reusable-infrastructure-with-terraform-modules-25526d65f73d)\n* [Gruntwork blog: How to use Terraform as a team](https://blog.gruntwork.io/how-to-use-terraform-as-a-team-251bc1104973)\n\nGruntwork's example repos, of both modules and live/input data, along with their README files have also proven very useful:\n\n* [Github: gruntwork-io/terragrunt-infrastructure-live-example](https://github.com/gruntwork-io/terragrunt-infrastructure-live-example)\n* [Github: gruntwork-io/terragrunt-infrastructure-modules-example](https://github.com/gruntwork-io/terragrunt-infrastructure-modules-example)\n\nTo workaround some of Terraform's quirks and shortcomings:\n\n* [Gruntwork blog: Terraform tips \u0026 tricks: loops, if-statements, and gotchas](https://blog.gruntwork.io/terraform-tips-tricks-loops-if-statements-and-gotchas-f739bbae55f9)\n\nOther inspiration:\n\n* https://www.ybrikman.com/writing/2017/10/13/reusable-composable-battle-tested-terraform-modules/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfds%2Finfrastructure-modules","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdfds%2Finfrastructure-modules","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfds%2Finfrastructure-modules/lists"}