$npx -y skills add thomast1906/github-copilot-agent-skills --skill apiops-deploymentGuides deployment of Azure API Management infrastructure using Infrastructure as Code (Bicep/Terraform), CI/CD pipelines (GitHub Actions/Azure DevOps), and APIOps workflows. Use when deploying APIM, creating pipelines, or implementing dev→test→prod promotion strategies.
| 1 | # APIOps Deployment Skill |
| 2 | |
| 3 | Provides Infrastructure as Code (Bicep/Terraform) templates and CI/CD pipeline patterns for deploying Azure API Management following APIOps principles and phased deployment strategies. |
| 4 | |
| 5 | ## When to Use This Skill |
| 6 | |
| 7 | Activate this skill when users need: |
| 8 | |
| 9 | - **Infrastructure deployment**: Generate Bicep/Terraform for APIM, Front Door, VNet, supporting services |
| 10 | - **CI/CD pipelines**: Create GitHub Actions or Azure DevOps workflows for APIOps |
| 11 | - **Environment promotion**: Implement dev → test → prod deployment workflows |
| 12 | - **Configuration management**: Environment-specific parameters (dev/test/prod) |
| 13 | - **Disaster recovery**: Backup/restore procedures, blue-green deployments |
| 14 | - **Phased rollout**: Follow deployment planning guide with 7 phases over 17 weeks |
| 15 | |
| 16 | --- |
| 17 | |
| 18 | ## Phased Deployment Strategy |
| 19 | |
| 20 | **See DEPLOYMENT_PLANNING_GUIDE.md for complete 17-week, 7-phase plan** |
| 21 | |
| 22 | ### Phase Summary |
| 23 | |
| 24 | | Phase | Duration | Focus | Key Deliverables | |
| 25 | |-------|----------|-------|------------------| |
| 26 | | **1** | Week 1-2 | Core Infrastructure | VNet, APIM(dev), Front Door, Key Vault, monitoring | |
| 27 | | **2** | Week 3-4 | Authentication & IAM | Entra ID, Entra External ID, OAuth policies| |
| 28 | | **3** | Week 5-8 | API Onboarding (Dev) | 5 pilot APIs, policies, developer portal | |
| 29 | | **4** | Week 9-10 | Production Infrastructure | APIM(prod) Premium 3u, zone-redundant | |
| 30 | | **5** | Week 11-12 | Production APIs | Migrate 5 pilot APIs, performance testing | |
| 31 | | **6** | Week 13-15 | Governance & Scaling | API Center, additional APIs, APIOps automation | |
| 32 | | **7** | Week 16-17 | Operations Handoff | Runbooks, training, monitoring dashboards | |
| 33 | |
| 34 | --- |
| 35 | |
| 36 | ## Important: MCP Tools (ALWAYS Use Before Code Generation) |
| 37 | |
| 38 | ### 1. Get Azure Verified Modules (AVM) |
| 39 | |
| 40 | **BEFORE writing any Bicep**, check for Azure Verified Modules: |
| 41 | |
| 42 | ``` |
| 43 | Tool: azure_bicep-get_azure_verified_module |
| 44 | ResourceType: "Microsoft.ApiManagement/service" |
| 45 | ``` |
| 46 | |
| 47 | **Why**: AVM modules follow Microsoft best practices, reduce code duplication, tested at scale |
| 48 | |
| 49 | ### 2. Call Deployment Best Practices FIRST |
| 50 | |
| 51 | ``` |
| 52 | Tool: mcp_azure_mcp_get_azure_bestpractices |
| 53 | Intent: "Azure API Management deployment best practices Bicep" |
| 54 | ``` |
| 55 | |
| 56 | ### 3. Search Deployment Documentation |
| 57 | |
| 58 | ``` |
| 59 | Tool: mcp_azure_mcp_documentation search |
| 60 | Query: "APIM VNet Internal Bicep deployment" |
| 61 | ``` |
| 62 | |
| 63 | --- |
| 64 | |
| 65 | ## Infrastructure as Code Templates |
| 66 | |
| 67 | **See [references/IaC_TEMPLATES.md](references/IaC_TEMPLATES.md) for complete Bicep/Terraform templates** |
| 68 | |
| 69 | ### Quick Bicep Example: Production APIM |
| 70 | |
| 71 | ```bicep |
| 72 | param location string = 'uksouth' |
| 73 | param apimName string = 'apim-api-marketplace-prod-uks' |
| 74 | param publisherEmail string = 'admin@example.com' |
| 75 | param publisherName string = 'API Marketplace Team' |
| 76 | param vnetName string = 'vnet-apim-prod-uks' |
| 77 | param subnetName string = 'snet-apim' |
| 78 | |
| 79 | resource vnet 'Microsoft.Network/virtualNetworks@2023-04-01' existing = { |
| 80 | name: vnetName |
| 81 | } |
| 82 | |
| 83 | resource apim 'Microsoft.ApiManagement/service@2023-05-01-preview' = { |
| 84 | name: apimName |
| 85 | location: location |
| 86 | sku: { |
| 87 | name: 'Premium' |
| 88 | capacity: 3 // Zone-redundant: 3 units across 3 availability zones |
| 89 | } |
| 90 | properties: { |
| 91 | publisherEmail: publisherEmail |
| 92 | publisherName: publisherName |
| 93 | virtualNetworkType: 'Internal' // VNet Internal mode |
| 94 | virtualNetworkConfiguration: { |
| 95 | subnetResourceId: '${vnet.id}/subnets/${subnetName}' |
| 96 | } |
| 97 | customProperties: { |
| 98 | 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls10': 'False' |
| 99 | 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Tls11': 'False' |
| 100 | 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Protocols.Ssl30': 'False' |
| 101 | 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10': 'False' |
| 102 | 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11': 'False' |
| 103 | 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Ssl30': 'False' |
| 104 | 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Ciphers.TripleDes168': 'False' |
| 105 | } |
| 106 | disableGateway: false |
| 107 | } |
| 108 | identity: { |
| 109 | type: 'SystemAssigned' // Managed Identity for Key Vault access |
| 110 | } |
| 111 | zones: [ |
| 112 | '1' |
| 113 | '2' |
| 114 | '3' |
| 115 | ] // Zone redundancy for 99.99% SLA |
| 116 | } |
| 117 | |
| 118 | output apimId string = apim.id |
| 119 | output managedIdentityPrincipalId string = apim.identity.principalId |
| 120 | ``` |
| 121 | |
| 122 | **Key Configuration**: |
| 123 | - VNet Internal mode (`virtualNetworkType: 'Internal'`) |
| 124 | - Premium SKU with 3 units (zone-redundant) |
| 125 | - TLS 1.2+ only (disable weak protocols) |
| 126 | - Managed Identity (no service accounts |