Custom Terraform Modules
Note: This feature is only available in the Enterprise Plan.
Custom Modules in Facets.cloud
Custom modules in Facets.cloud offer streamlined cloud resource management, utilizing 'intent' and 'flavor' for module selection and configuration. This approach enables users without in-depth IaC knowledge to effectively use infrastructure as code by simply providing input specifications, while the module implementer decides the level of abstraction.
Blueprints in Facets.cloud are composed of a collection of JSON objects, where each object specifies a part of the infrastructure:
kind
: Specifies the general category or type of the module (e.g.,database
,network
,compute
).flavor
: Provides a more specific variation within thekind
, allowing for the selection of a particular implementation or version of the module.
Module Wiring
Based on the specified intent (kind) and flavor, Facets.cloud automatically wires the selected module into your Terraform configuration, ensuring correct module integration.
Democratization of IaC Usage
This setup democratizes the use of standard IaC codes. It enables users to leverage IaC without understanding its detailed implementation, making the process more accessible. The module implementer defines the JSON inputs required to configure the module, thus setting the abstraction level.
Example: Aurora Module Configuration
A user can configure an Aurora instance by simply providing specifications in the JSON format. For instance, to deploy a Postgres Aurora database, the user would specify:
{
"kind": "postgres",
"flavor": "aurora",
"version": "0.2",
"lifecycle": "ENVIRONMENT",
"disabled": false,
"provided": false,
"depends_on": [],
"metadata": {
"name": "test-aurora-postgres",
"tags": {
"name": "something"
}
},
"spec": {
"postgres_version": "12.11",
"size": {
"writer": {
"instance": "db.t3.medium",
"replica_count": 1
},
"reader": {
"instance": "db.t3.medium",
"replica_count": 1
}
}
}
}
In this example, the user defines the desired Postgres version, instance types, and the number of replicas for the writer and reader nodes, without needing to understand the underlying Terraform code.
Creating Your First Module in Facets.cloud
Generate Module Structure
Install Copier
First, install Copier, a tool for generating the module's skeleton:
- Use the command:
pip3 install copier
.
Create Your Module
Generate your module's structure using Copier:
- Navigate to the
iac
folder in your Blueprint repository. - Run Copier with the command:
copier copy [email protected]:Facets-cloud/module-template.git ./
Note: Integration with a separate IaC repository is coming soon.
Understanding Generated Files
Copier will create several files, each serving a specific purpose in your module:
main.tf
: Your main Terraform configuration file.variables.tf
: Defines variables formain.tf
.output.tf
: Outlines the outputs from your module.versions.tf
: Manages Terraform and provider version requirements.
The Role of module.json
module.json
module.json
is a key file in your module, specifying critical attributes:
- Intent and Flavor (
kind
andflavor
). - Supported Clouds: Lists compatible cloud environments.
- Dependencies: Any dependent modules.
- Lifecycle Phases: The operational phase of your module.
- Input Type: Indicates if your module is Configurable or Instantiable.
- Variables: Identifies variables injected during wiring.
Wiring the Module
Facets.cloud automates the wiring of variables and providers as defined in module.json
.
Outputs and Resource Wiring
- Outputs in
output.tf
facilitate data sharing between modules. - Facets.cloud uses these outputs for integrating modules in your blueprint.
This guide outlines the steps to create and integrate a custom module in Facets.cloud, simplifying cloud infrastructure management.
Coming Soon: Advanced Features and UI Management in Facets.cloud
Facets.cloud is continuously evolving, and several exciting features are on the horizon. These upcoming enhancements are designed to streamline the management of Infrastructure as Code (IaC) and provide deeper insights into module usage.
Integration of IaC Repositories
Shortly, Facets.cloud will offer the ability to integrate separate IaC repositories directly within the platform. This feature will:
- Allow users to manage their Terraform modules in dedicated repositories.
- Simplify the process of adding and updating modules.
Enhanced Module Generation and Validation
With the integration of IaC repositories, Facets.cloud will enhance the module generation and validation process:
- Module Generation: Users will be able to generate modules directly from the UI, leveraging templates and guided workflows.
- Validation Tools: Built-in tools for validating the structure and functionality of your modules will ensure they meet best practices and are ready for deployment.
Usage Statistics for Modules
Understanding how modules are utilized is crucial for continuous improvement and decision-making. The upcoming features will include:
- Usage Tracking: Track how often and in what ways your modules are being used within the platform.
- Insightful Analytics: Gain valuable insights from usage data to understand popular modules, common configurations, and more.
- Optimization Opportunities: Use these analytics to optimize module offerings, addressing the most common user needs and trends.
Conclusion
The feature to manage and use custom TF modules in Facets.cloud is set to revolutionize the way users interact with and manage IaC. By integrating IaC repositories, enhancing module generation and validation, and providing comprehensive usage statistics, Facets.cloud will offer an even more powerful and user-friendly platform for cloud infrastructure management.
Updated 3 months ago