{"id":20925576,"url":"https://github.com/padok-team/docs-terraform-guidelines","last_synced_at":"2025-06-17T17:39:11.974Z","repository":{"id":93608004,"uuid":"476292905","full_name":"padok-team/docs-terraform-guidelines","owner":"padok-team","description":"Guidelines to work with Terraform","archived":false,"fork":false,"pushed_at":"2024-02-16T16:32:44.000Z","size":1612,"stargazers_count":21,"open_issues_count":6,"forks_count":1,"subscribers_count":11,"default_branch":"main","last_synced_at":"2024-02-16T17:50:19.630Z","etag":null,"topics":["best-practices","guidelines","iac","terraform","terragrunt"],"latest_commit_sha":null,"homepage":"https://padok-team.github.io/docs-terraform-guidelines/","language":null,"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/padok-team.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2022-03-31T12:20:10.000Z","updated_at":"2024-02-14T15:19:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"210ca6c1-e82b-4ee9-8401-fc2731cb119c","html_url":"https://github.com/padok-team/docs-terraform-guidelines","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padok-team%2Fdocs-terraform-guidelines","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padok-team%2Fdocs-terraform-guidelines/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padok-team%2Fdocs-terraform-guidelines/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padok-team%2Fdocs-terraform-guidelines/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/padok-team","download_url":"https://codeload.github.com/padok-team/docs-terraform-guidelines/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225248115,"owners_count":17444181,"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","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":["best-practices","guidelines","iac","terraform","terragrunt"],"created_at":"2024-11-18T20:33:30.650Z","updated_at":"2024-11-18T20:33:31.125Z","avatar_url":"https://github.com/padok-team.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# IAC Guidelines\n\nGuidelines to work with Terraform and Terragrunt\n\n- [IAC Guidelines](#iac-guidelines)\n  - [🎯 Our purpose](#-our-purpose)\n    - [The 3 standards for a layer/code](#the-3-standards-for-a-layercode)\n    - [The standard for communicating between your layers](#the-standard-for-communicating-between-your-layers)\n    - [The standard use of modules](#the-standard-use-of-modules)\n    - [The standard naming convention](#the-standard-naming-convention)\n  - [🚀 Guidelines](#-guidelines)\n    - [🛗 Patterns](#-patterns)\n    - [🎓 Standards](#-standards)\n      - [Terraform](#terraform)\n      - [Terragrunt](#terragrunt)\n    - [🚩 Red flags](#-red-flags)\n    - [🛠️ Tooling](#️-tooling)\n  - [License](#license)\n\n## 🎯 Our purpose\n\nThis documentation is provided by the Padok IaC Guild. Its purpose is to present guidelines and best practices about terraform development.\n\nYou do not have to see these guidelines as an absolute truth, but more as a proposition to answer frequently asked questions and avoid issues you will often face in your projects.\n\nHere are the key learning :\n\n### The 3 standards for a layer/code\n\n- Your layer design reflects a business need\n- Only one team contributes has ownership of a layer (you have a clear vision of contribution \u0026 ownership)\n- Your state refresh time is acceptable for a contribution purpose\n\n### The standard for communicating between your layers\n\n- You can rebuild your infrastructure without the `-target` flag\n- You do not have any cyclical dependencies between resources\n- You use data blocks only in layers\n\n### The standard use of modules\n\n- A module should be created\n  - To abstract complexity\n  - If you have to reuse it frequently (More than twice)\n- You should not create a module to be a flat pass between resources\n- Your module’s dependencies are provided by the caller\n- You use remote modules to avoid repetition between your different projects\n\n### The standard naming convention\n\n- The name of the file or folder should reflect what you are creating\n- Adapt your codebase to your client needs and standards\n- Avoid stuttering when naming Terraform resources.\n- Use snake_case convention\n\nWe recommend everyone to follow the [WYSIWYG pattern](terraform/wysiwg_patterns.md) for vanilla terraform.\n\n## 🚀 Guidelines\n\nYou’ll find below details of the standards to follow when working with Terraform and Terragrunt.\n\n### 🛗 Patterns\n\n\u003e Reusable solution to a commonly occurring problem within a given context\n\n- [WYSIWYG pattern](terraform/wysiwg_patterns.md)\n- [Context pattern aka the Terragrunt implementation](terragrunt/context_pattern.md)\n\n### 🎓 Standards\n\n\u003e Standards help to avoid waste and ensure that we deliver value\n\n#### Terraform\n\n- [Distant values references](terraform/refering_to_resources_from_other_layers.md)\n- [Versioning](terraform/terraform_versioning.md)\n- [Naming](terraform/terraform_naming.md)\n- [Pre-commits](terraform/pre-commits.md)\n- [Iterate on your resources](terraform/iterate_on_your_resources.md)\n- [Optional attributes](terraform/optional-attributes.md)\n\n#### Terragrunt\n\n- [Why Terragrunt (ADR)](terragrunt/adr-terragrunt.md)\n- [Terragrunt guidelines](terragrunt/context_pattern.md)\n- [Distant values references](./terragrunt/refering_to_resources_from_other_layers.md)\n\n### 🚩 Red flags\n\n\u003e Red flag is something that you must pay attention about. This is an advice or recommendation, not a requirement.\n\n- [Dont’s](terraform/donts.md)\n- [Child modules depth limit](terraform/child_modules_depth_limit.md)\n\n### 🛠️ Tooling\n\n- [Useful tooling for Terragrunt/Terraform](tooling/README.md)\n- [Terraform pre-commits](terraform/pre-commits.md)\n\n## License\n\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpadok-team%2Fdocs-terraform-guidelines","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpadok-team%2Fdocs-terraform-guidelines","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpadok-team%2Fdocs-terraform-guidelines/lists"}