Skip to content

Commit 8dbaebb

Browse files
authored
Added AVM Terraform chatmode and instructions (#155)
* Add compliance requirements and usage instructions for Azure Verified Modules in GitHub Copilot * Revise Azure Verified Modules instructions for clarity and completeness * Add Azure Verified Modules Terraform instructions for coding standards and best practices * Add metadata header to Azure Verified Modules Terraform instructions * Update Azure Verified Modules entry in README to clarify Terraform usage * Update applyTo pattern in Azure Verified Modules Terraform instructions for broader file coverage * Add link to Azure Verified Modules Contribution documentation for AVM process details * Update Azure Verified Modules Terraform instructions for clarity and compliance requirements * Update header in Azure Verified Modules Terraform instructions for consistency
1 parent fce0765 commit 8dbaebb

File tree

3 files changed

+242
-0
lines changed

3 files changed

+242
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Team and project-specific instructions to enhance GitHub Copilot's behavior for
2727
| [Angular Development Instructions](instructions/angular.instructions.md) | Angular-specific coding standards and best practices | [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md) [![Install in VS Code](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fangular.instructions.md) |
2828
| [ASP.NET REST API Development](instructions/aspnet-rest-apis.instructions.md) | Guidelines for building REST APIs with ASP.NET | [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Faspnet-rest-apis.instructions.md) [![Install in VS Code](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Faspnet-rest-apis.instructions.md) |
2929
| [Azure Functions Typescript](instructions/azure-functions-typescript.instructions.md) | TypeScript patterns for Azure Functions | [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-functions-typescript.instructions.md) [![Install in VS Code](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-functions-typescript.instructions.md) |
30+
| [Azure Verified Modules (AVM) Terraform](instructions/azure-verified-modules-terraform.instructions.md) | Azure Verified Modules (AVM) and Terraform | [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-verified-modules-terraform.instructions.md) [![Install in VS Code](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fazure-verified-modules-terraform.instructions.md) |
3031
| [Bicep Code Best Practices](instructions/bicep-code-best-practices.instructions.md) | Infrastructure as Code with Bicep | [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fbicep-code-best-practices.instructions.md) [![Install in VS Code](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fbicep-code-best-practices.instructions.md) |
3132
| [Blazor](instructions/blazor.instructions.md) | Blazor component and application patterns | [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fblazor.instructions.md) [![Install in VS Code](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fblazor.instructions.md) |
3233
| [Cmake Vcpkg](instructions/cmake-vcpkg.instructions.md) | C++ project configuration and package management | [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcmake-vcpkg.instructions.md) [![Install in VS Code](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fcmake-vcpkg.instructions.md) |

chatmodes/azure-verified-modules-terraform.chatmode.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
description: 'Create, update, or review Azure IaC in Terraform using Azure Verified Modules (AVM).'
33
tools: ['changes', 'codebase', 'editFiles', 'extensions', 'fetch', 'findTestFiles', 'githubRepo', 'new', 'openSimpleBrowser', 'problems', 'runCommands', 'runTasks', 'runTests', 'search', 'searchResults', 'terminalLastCommand', 'terminalSelection', 'testFailure', 'usages', 'vscodeAPI', 'microsoft.docs.mcp', 'azure_get_deployment_best_practices', 'azure_get_schema_for_Bicep']
44
---
5+
56
# Azure AVM Terraform mode
67

78
Use Azure Verified Modules for Terraform to enforce Azure best practices via pre-built modules.
@@ -42,3 +43,16 @@ Use Azure Verified Modules for Terraform to enforce Azure best practices via pre
4243
- Always run `terraform fmt` and `terraform validate` after making changes
4344
- Use `azure_get_deployment_best_practices` tool for deployment guidance
4445
- Use `microsoft.docs.mcp` tool to look up Azure service-specific guidance
46+
47+
## Custom Instructions for GitHub Copilot Agents
48+
49+
**IMPORTANT**: When GitHub Copilot Agent or GitHub Copilot Coding Agent is working on this repository, the following local unit tests MUST be executed to comply with PR checks. Failure to run these tests will cause PR validation failures:
50+
51+
```bash
52+
./avm pre-commit
53+
./avm tflint
54+
./avm pr-check
55+
```
56+
57+
These commands must be run before any pull request is created or updated to ensure compliance with the Azure Verified Modules standards and prevent CI/CD pipeline failures.
58+
More details on the AVM process can be found in the [Azure Verified Modules Contribution documentation](https://azure.github.io/Azure-Verified-Modules/contributing/terraform/testing/).
Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
---
2+
description: ' Azure Verified Modules (AVM) and Terraform'
3+
applyTo: '**/*.terraform, **/*.tf, **/*.tfvars, **/*.tfstate, **/*.tflint.hcl, **/*.tf.json, **/*.tfvars.json'
4+
---
5+
6+
# Azure Verified Modules (AVM) Terraform
7+
8+
## Overview
9+
10+
Azure Verified Modules (AVM) are pre-built, tested, and validated Terraform and Bicep modules that follow Azure best practices. Use these modules to create, update, or review Azure Infrastructure as Code (IaC) with confidence.
11+
12+
## Custom Instructions for GitHub Copilot Agents
13+
14+
**IMPORTANT**: When GitHub Copilot Agent or GitHub Copilot Coding Agent is working on this repository, the following local unit tests MUST be executed to comply with PR checks. Failure to run these tests will cause PR validation failures:
15+
16+
```bash
17+
./avm pre-commit
18+
./avm tflint
19+
./avm pr-check
20+
```
21+
22+
These commands must be run before any pull request is created or updated to ensure compliance with the Azure Verified Modules standards and prevent CI/CD pipeline failures.
23+
More details on the AVM process can be found in the [Azure Verified Modules Contribution documentation](https://azure.github.io/Azure-Verified-Modules/contributing/terraform/testing/).
24+
25+
**Failure to run these tests will cause PR validation failures and prevent successful merges.**
26+
27+
## Module Discovery
28+
29+
### Terraform Registry
30+
31+
- Search for "avm" + resource name
32+
- Filter by "Partner" tag to find official AVM modules
33+
- Example: Search "avm storage account" → filter by Partner
34+
35+
### Official AVM Index
36+
37+
- **Terraform Resources**: `https://azure.github.io/Azure-Verified-Modules/indexes/terraform/tf-resource-modules/`
38+
- **Terraform Patterns**: `https://azure.github.io/Azure-Verified-Modules/indexes/terraform/tf-pattern-modules/`
39+
- **Bicep Resources**: `https://azure.github.io/Azure-Verified-Modules/indexes/bicep/bicep-resource-modules/`
40+
- **Bicep Patterns**: `https://azure.github.io/Azure-Verified-Modules/indexes/bicep/bicep-pattern-modules/`
41+
42+
## Terraform Module Usage
43+
44+
### From Examples
45+
46+
1. Copy the example code from the module documentation
47+
2. Replace `source = "../../"` with `source = "Azure/avm-res-{service}-{resource}/azurerm"`
48+
3. Add `version = "~> 1.0"` (use latest available)
49+
4. Set `enable_telemetry = true`
50+
51+
### From Scratch
52+
53+
1. Copy the Provision Instructions from module documentation
54+
2. Configure required and optional inputs
55+
3. Pin the module version
56+
4. Enable telemetry
57+
58+
### Example Usage
59+
60+
```hcl
61+
module "storage_account" {
62+
source = "Azure/avm-res-storage-storageaccount/azurerm"
63+
version = "~> 0.1"
64+
65+
enable_telemetry = true
66+
location = "East US"
67+
name = "mystorageaccount"
68+
resource_group_name = "my-rg"
69+
70+
# Additional configuration...
71+
}
72+
```
73+
74+
## Naming Conventions
75+
76+
### Module Types
77+
78+
- **Resource Modules**: `Azure/avm-res-{service}-{resource}/azurerm`
79+
- Example: `Azure/avm-res-storage-storageaccount/azurerm`
80+
- **Pattern Modules**: `Azure/avm-ptn-{pattern}/azurerm`
81+
- Example: `Azure/avm-ptn-aks-enterprise/azurerm`
82+
- **Utility Modules**: `Azure/avm-utl-{utility}/azurerm`
83+
- Example: `Azure/avm-utl-regions/azurerm`
84+
85+
### Service Naming
86+
87+
- Use kebab-case for services and resources
88+
- Follow Azure service names (e.g., `storage-storageaccount`, `network-virtualnetwork`)
89+
90+
## Version Management
91+
92+
### Check Available Versions
93+
94+
- Endpoint: `https://registry.terraform.io/v1/modules/Azure/{module}/azurerm/versions`
95+
- Example: `https://registry.terraform.io/v1/modules/Azure/avm-res-storage-storageaccount/azurerm/versions`
96+
97+
### Version Pinning Best Practices
98+
99+
- Use pessimistic version constraints: `version = "~> 1.0"`
100+
- Pin to specific versions for production: `version = "1.2.3"`
101+
- Always review changelog before upgrading
102+
103+
## Module Sources
104+
105+
### Terraform Registry
106+
107+
- **URL Pattern**: `https://registry.terraform.io/modules/Azure/{module}/azurerm/latest`
108+
- **Example**: `https://registry.terraform.io/modules/Azure/avm-res-storage-storageaccount/azurerm/latest`
109+
110+
### GitHub Repository
111+
112+
- **URL Pattern**: `https://github.com/Azure/terraform-azurerm-avm-{type}-{service}-{resource}`
113+
- **Examples**:
114+
- Resource: `https://github.com/Azure/terraform-azurerm-avm-res-storage-storageaccount`
115+
- Pattern: `https://github.com/Azure/terraform-azurerm-avm-ptn-aks-enterprise`
116+
117+
## Development Best Practices
118+
119+
### Module Usage
120+
121+
-**Always** pin module and provider versions
122+
-**Start** with official examples from module documentation
123+
-**Review** all inputs and outputs before implementation
124+
-**Enable** telemetry: `enable_telemetry = true`
125+
-**Use** AVM utility modules for common patterns
126+
-**Follow** AzureRM provider requirements and constraints
127+
128+
### Code Quality
129+
130+
-**Always** run `terraform fmt` after making changes
131+
-**Always** run `terraform validate` after making changes
132+
-**Use** meaningful variable names and descriptions
133+
-**Add** proper tags and metadata
134+
-**Document** complex configurations
135+
136+
### Validation Requirements
137+
138+
Before creating or updating any pull request:
139+
140+
```bash
141+
# Format code
142+
terraform fmt -recursive
143+
144+
# Validate syntax
145+
terraform validate
146+
147+
# AVM-specific validation (MANDATORY)
148+
./avm pre-commit
149+
./avm tflint
150+
./avm pr-check
151+
```
152+
153+
## Tool Integration
154+
155+
### Use Available Tools
156+
157+
- **Deployment Guidance**: Use `azure_get_deployment_best_practices` tool
158+
- **Service Documentation**: Use `microsoft.docs.mcp` tool for Azure service-specific guidance
159+
- **Schema Information**: Use `azure_get_schema_for_Bicep` for Bicep resources
160+
161+
### GitHub Copilot Integration
162+
163+
When working with AVM repositories:
164+
165+
1. Always check for existing modules before creating new resources
166+
2. Use the official examples as starting points
167+
3. Run all validation tests before committing
168+
4. Document any customizations or deviations from examples
169+
170+
## Common Patterns
171+
172+
### Resource Group Module
173+
174+
```hcl
175+
module "resource_group" {
176+
source = "Azure/avm-res-resources-resourcegroup/azurerm"
177+
version = "~> 0.1"
178+
179+
enable_telemetry = true
180+
location = var.location
181+
name = var.resource_group_name
182+
}
183+
```
184+
185+
### Virtual Network Module
186+
187+
```hcl
188+
module "virtual_network" {
189+
source = "Azure/avm-res-network-virtualnetwork/azurerm"
190+
version = "~> 0.1"
191+
192+
enable_telemetry = true
193+
location = module.resource_group.location
194+
name = var.vnet_name
195+
resource_group_name = module.resource_group.name
196+
address_space = ["10.0.0.0/16"]
197+
}
198+
```
199+
200+
## Troubleshooting
201+
202+
### Common Issues
203+
204+
1. **Version Conflicts**: Always check compatibility between module and provider versions
205+
2. **Missing Dependencies**: Ensure all required resources are created first
206+
3. **Validation Failures**: Run AVM validation tools before committing
207+
4. **Documentation**: Always refer to the latest module documentation
208+
209+
### Support Resources
210+
211+
- **AVM Documentation**: `https://azure.github.io/Azure-Verified-Modules/`
212+
- **GitHub Issues**: Report issues in the specific module's GitHub repository
213+
- **Community**: Azure Terraform Provider GitHub discussions
214+
215+
## Compliance Checklist
216+
217+
Before submitting any AVM-related code:
218+
219+
- [ ] Module version is pinned
220+
- [ ] Telemetry is enabled
221+
- [ ] Code is formatted (`terraform fmt`)
222+
- [ ] Code is validated (`terraform validate`)
223+
- [ ] AVM pre-commit checks pass (`./avm pre-commit`)
224+
- [ ] TFLint checks pass (`./avm tflint`)
225+
- [ ] AVM PR checks pass (`./avm pr-check`)
226+
- [ ] Documentation is updated
227+
- [ ] Examples are tested and working

0 commit comments

Comments
 (0)