|
1 | | -# Developer Self Service |
| 1 | +# Developer Self-Service |
2 | 2 |
|
3 | | -Developer Self-Service lets developers deploy and manage their apps and infrastructure themselves, without always needing help from the platform team. |
| 3 | +Developer self-service enables developers to deploy and manage their applications and infrastructure independently, without constant reliance on the platform team. |
4 | 4 |
|
5 | | -Effective developer self-service then requires a set of patterns, practices, rules, constraints and governance pre-baked into the modules that engineers use to represent their infrastructure. Some teams call these modules "approved blueprints" or "blessed modules". At Gruntwork we generally refer to this as the **Infrastructure Catalog** that lives in a repository we call `infrastructure-catalog` (previously `infrastructure-modules`). |
| 5 | +Effective self-service requires patterns, practices, rules, constraints, and governance to be embedded within the modules developers use to define their infrastructure. These modules are often referred to as "approved blueprints" or "blessed modules." At Gruntwork, we call this the **Infrastructure Catalog**, which resides in a repository named `infrastructure-catalog` (formerly `infrastructure-modules`). |
6 | 6 |
|
7 | | -Inside the `infrastructure-catalog` we recommend following the [infrastructure-live pattern](https://docs.gruntwork.io/2.0/docs/overview/concepts/infrastructure-live#separating-modules-from-live-infrastructure) and storing catalog module code in a folder called `modules`. |
| 7 | +Within the `infrastructure-catalog`, we recommend following the [infrastructure-live pattern](https://docs.gruntwork.io/2.0/docs/overview/concepts/infrastructure-live#separating-modules-from-live-infrastructure) and organizing catalog module code in a folder named `modules`. |
8 | 8 |
|
9 | 9 | ## Why self-service |
10 | 10 |
|
11 | | -### Benefits to Developers |
| 11 | +### Benefits to developers |
12 | 12 |
|
13 | | -Developers benefit by avoiding "reinventing the wheel". They're able to leverage pre-built, tested, and secure modules that have already been approved for use at your organization. Handoffs between platform and development teams are reduced resulting in faster delivery and fewer bottlenecks. |
| 13 | +Self-service allows developers to avoid "reinventing the wheel" by using pre-built, tested, and secure modules that are already approved for use. This reduces handoffs between platform and development teams, speeding up delivery and minimizing bottlenecks. |
14 | 14 |
|
15 | | -### Benefits to Platform Teams |
| 15 | +### Benefits to platform teams |
16 | 16 |
|
17 | | -Platform teams are able to operate effectively at scale. They retain centralized control of reusable modules, and are able to focus on standardizing testing, security, compliance, and governance. The day to day workload of assisting Developers with infrastructure code is reduced, while retaining oversight. |
| 17 | +Self-service enables platform teams to operate efficiently at scale. By centralizing control over reusable modules, platform teams can focus on standardizing testing, security, compliance, and governance. The workload of assisting developers with infrastructure code is reduced, while maintaining oversight and control. |
18 | 18 |
|
19 | | -## Terragrunt Catalog |
| 19 | +## Terragrunt catalog |
20 | 20 |
|
21 | | -Terragrunt has [native support](https://terragrunt.gruntwork.io/docs/features/catalog/) for an interface that allows developers to browse modules using a terminal based UI, and then [scaffold](https://terragrunt.gruntwork.io/docs/features/scaffold/) out new modules using [boilerplate](https://github.com/gruntwork-io/boilerplate). All repositories vended as part of Devops Foundations include a `catalog` configuration in the root `terragrunt.hcl` file that points to a starter `infrastructure-catalog` repository that provides examples on how to further build out the catalog. |
| 21 | +Terragrunt provides [native support](https://terragrunt.gruntwork.io/docs/features/catalog/) for an interface that allows developers to browse modules using a terminal-based UI and [scaffold](https://terragrunt.gruntwork.io/docs/features/scaffold/) new modules with [boilerplate](https://github.com/gruntwork-io/boilerplate). Repositories vended through DevOps Foundations include a `catalog` configuration in the root `terragrunt.hcl` file, pointing to a starter `infrastructure-catalog` repository with examples for expanding the catalog. |
22 | 22 |
|
23 | | -### Using Catalog |
| 23 | +### Using catalog |
24 | 24 |
|
25 | | -Within a DevOps Foundations repository, create a new directory to contain your new terragrunt unit, then navigate to this directory. |
| 25 | +In a DevOps Foundations repository, create a new directory for the new Terragrunt unit, then navigate to this directory. |
26 | 26 |
|
27 | | -Running `terragrunt catalog` will open an interactive terminal UI allowing you to browse the available units from your `infrastructure-catalog`. |
| 27 | +Running `terragrunt catalog` opens an interactive terminal UI to browse available units in the `infrastructure-catalog`. |
28 | 28 |
|
29 | | -When browsing your catalog, you can select a unit, and hit **S** to scaffold it out. |
30 | | -The scaffold command does the following automatically: |
| 29 | +To scaffold a unit, select it and press **S**. The scaffold process automatically: |
31 | 30 |
|
32 | | -- Download and template the unit into the current directory. |
| 31 | +- Downloads and templates the unit into the current directory. |
| 32 | +- Determines the module URL and latest version (tag), populating the source URL. |
| 33 | +- Parses the module’s input variables and generates placeholders in the `inputs = { }` block for easy configuration. |
33 | 34 |
|
34 | | -- Figures out the module URL and the latest version (tag) available, and fills that into the source URL. |
| 35 | +After replacing the placeholders, commit the new unit and push it to a new Pull Request for [Gruntwork Pipelines](/2.0/docs/pipelines/concepts/overview) to begin planning the changes. |
35 | 36 |
|
36 | | -- Parse all of the module’s input variables and generate placeholders in the inputs = { } block to make it easy to fill those variables in. |
37 | | - |
38 | | -Once you've replaced these placeholders, commit the new unit, and push it to a new Pull Request for [Gruntwork Pipelines](/2.0/docs/pipelines/concepts/overview) to being planning the changes. |
39 | | - |
40 | | -## Self-Service Best Practices |
| 37 | +## Self-service best practices |
41 | 38 |
|
42 | 39 | ### Versioning |
43 | 40 |
|
44 | | -Implement a consistent versioning strategy, such as [semantic versioning](https://semver.org/), for all modules in your infrastructure catalog. This allows you to: |
| 41 | +Adopt a consistent versioning strategy, such as [semantic versioning](https://semver.org/), for all modules in the infrastructure catalog. This approach helps: |
| 42 | + |
| 43 | +- **Track changes:** Maintain a clear history of updates and modifications. |
| 44 | +- **Enable rollbacks:** Revert to previous versions if issues arise. |
| 45 | +- **Ensure clarity:** Use semantic versioning (e.g., v1.2.3) to communicate the scope of changes (major, minor, patch). |
45 | 46 |
|
46 | | -* **Track Changes:** Maintain a clear history of module updates and modifications. |
47 | | -* **Enable Rollbacks:** Revert to previous versions in case of issues or errors. |
48 | | -* **Ensure Clarity:** Use semantic versioning (e.g., v1.2.3) to communicate the nature of changes (major, minor, patch). |
| 47 | +Leverage [Gruntwork Patcher](/2.0/docs/patcher/concepts/) to roll out breaking changes efficiently while minimizing disruptions. |
49 | 48 |
|
50 | | -Use [Gruntwork Patcher](/2.0/docs/patcher/concepts/) to efficiently roll out breaking changes across your infrastructure and minimize disruption. |
| 49 | +### Infrastructure tagging and labeling |
51 | 50 |
|
52 | | -### Infrastructure Tagging and Labeling |
| 51 | +A centralized catalog facilitates consistent tagging and labeling across infrastructure components, enabling: |
53 | 52 |
|
54 | | -A central catalog allows core teams to implement a consistent tagging and labeling strategy across all infrastructure components. This enables: |
| 53 | +- **Cost tracking and allocation:** Assign costs to specific teams or projects using tags. |
| 54 | +- **Access control:** Manage and control resource access with tags. |
| 55 | +- **Automation:** Automate tasks such as provisioning, termination, and reporting based on tags. |
| 56 | +- **Monitoring and alerting:** Group and filter resources for effective monitoring and alerting. |
55 | 57 |
|
56 | | -* **Cost Tracking and Allocation:** Assign costs to specific teams or projects based on tags. |
57 | | -* **Access Control:** Use tags to manage and control access to resources. |
58 | | -* **Automation:** Automate tasks like provisioning, termination, and reporting based on tags. |
59 | | -* **Monitoring and Alerting:** Filter and group resources for monitoring and alerting purposes. |
| 58 | +### Wrapper modules / services |
60 | 59 |
|
| 60 | +Use wrapper modules or services to simplify deployments and configurations. Wrappers can: |
61 | 61 |
|
62 | | -### Wrapper Modules / Services |
| 62 | +- **Encapsulate best practices:** Integrate security, compliance, and operational standards into reusable modules. |
| 63 | +- **Reduce boilerplate:** Eliminate repetitive code for developers. |
| 64 | +- **Standardize deployments:** Ensure consistency and reduce errors across deployments. |
| 65 | +- **Abstract complexity:** Hide infrastructure complexity, allowing developers to focus on application logic. |
63 | 66 |
|
64 | | -Create wrapper modules or services to simplify complex deployments and configurations. These wrappers can: |
65 | 67 |
|
66 | | -* **Encapsulate Best Practices:** Bundle security, compliance, and operational best practices into reusable units. |
67 | | -* **Reduce Boilerplate:** Minimize repetitive code and configuration for developers. |
68 | | -* **Standardize Deployments:** Ensure consistency and reduce errors across different deployments. |
69 | | -* **Abstract Complexity:** Hide the underlying complexity of infrastructure from developers, allowing them to focus on application logic. |
| 68 | +### Using stacks to keep developer code DRY |
70 | 69 |
|
| 70 | +Organize infrastructure into [stacks](https://terragrunt.gruntwork.io/docs/features/stacks/) to enhance reusability and maintainability. Terragrunt Stacks enable you to: |
71 | 71 |
|
72 | | -### Using Stacks to keep developer code DRY |
| 72 | +- **Group related resources:** Manage interconnected units as a single entity. |
| 73 | +- **Reduce code duplication:** Avoid repeating code across environments or projects. |
| 74 | +- **Promote modularity:** Break complex infrastructure into manageable components. |
| 75 | +- **Simplify management:** Deploy, update, and destroy stacks with ease. |
73 | 76 |
|
74 | | -Organize infrastructure into stacks to promote code reusability and maintainability. Terragrunt Stacks allow you to: |
75 | 77 |
|
76 | | -* **Group Related Resources:** Manage interconnected units as a single entity. |
77 | | -* **Reduce Code Duplication:** Avoid repeating the same code across different environments or projects. |
78 | | -* **Promote Modularity:** Break down complex infrastructure into smaller, manageable components. |
79 | | -* **Simplify Management:** Deploy, update, and destroy entire stacks with ease. |
0 commit comments