[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6NVPQSFRR1F1B3003RTPB85":3,"skill-same:01M6NVPQSFRR1F1B3003RTPB85":77},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":28,"commitSha":52,"skillDirectory":53,"forksCount":13,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":56,"install":57,"resources":70},"01M6NVPQSFRR1F1B3003RTPB85","arm-templates",null,"Deploy Azure resources with ARM templates and Bicep. Create modular deployments and manage dependencies. Use when deploying Azure-native IaC.","duc-duy-1612\u002FOnline-Delivery-Systems-Web","duc-duy-1612","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F192231384?v=4","01M6NSDKQQDKVTHZ8DZMZ1VYY6","01M6NSDKW8DDVTQHBT1HBDDJPT",0,"MIT","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Farm-templates\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"arm templates","templates","community","relevant","native","resources","scripts","critical","os","platform","main","security","manage","only","manage dependencies","access","devops-security","license","create","modular","2026-11-10 10:12:30",false,"---\nname: arm-templates\ndescription: Deploy Azure resources with ARM templates and Bicep. Create modular deployments\n  and manage dependencies. Use when deploying Azure-native IaC.\ncategory: devops\nrisk: critical\nsource: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\nsource_repo: BagelHole\u002FDevOps-Security-Agent-Skills\nsource_type: community\ndate_added: '2026-09-20'\nlicense: MIT\nlicense_source: https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE\ncompatibility: Requires the relevant OS\u002Fplatform tooling and privileged access where\n  noted. Docs-only; helper scripts and templates not bundled.\nmetadata:\n  author: devops-skills\n  version: '1.0'\n---\n\n# ARM Templates & Bicep\n\nDeploy Azure infrastructure with ARM templates and Bicep. Bicep is the recommended domain-specific language that compiles to ARM JSON, offering cleaner syntax, modules, and first-class tooling support.\n\n## Prerequisites\n\n```bash\n# Install Azure CLI\ncurl -sL https:\u002F\u002Faka.ms\u002FInstallAzureCLIDeb | sudo bash\n\n# Install Bicep CLI (bundled with Azure CLI 2.20+)\naz bicep install\naz bicep upgrade\n\n# Verify installation\naz bicep version\n\n# Login and set subscription\naz login\naz account set --subscription \"my-subscription-id\"\n```\n\n## Bicep Fundamentals\n\n### Resource Group Deployment with Virtual Network\n\n```bicep\n\u002F\u002F main.bicep\n@description('Azure region for all resources')\nparam location string = resourceGroup().location\n\n@description('Environment name used for resource naming')\n@allowed(['dev', 'staging', 'prod'])\nparam environment string = 'dev'\n\n@description('Base name for all resources')\nparam baseName string\n\nvar vnetName = '${baseName}-${environment}-vnet'\nvar nsgName = '${baseName}-${environment}-nsg'\n\nresource nsg 'Microsoft.Network\u002FnetworkSecurityGroups@2023-05-01' = {\n  name: nsgName\n  location: location\n  properties: {\n    securityRules: [\n      {\n        name: 'AllowHTTPS'\n        properties: {\n          priority: 100\n          direction: 'Inbound'\n          access: 'Allow'\n          protocol: 'Tcp'\n          sourcePortRange: '*'\n          destinationPortRange: '443'\n          sourceAddressPrefix: '*'\n          destinationAddressPrefix: '*'\n        }\n      }\n      {\n        name: 'DenyAllInbound'\n        properties: {\n          priority: 4096\n          direction: 'Inbound'\n          access: 'Deny'\n          protocol: '*'\n          sourcePortRange: '*'\n          destinationPortRange: '*'\n          sourceAddressPrefix: '*'\n          destinationAddressPrefix: '*'\n        }\n      }\n    ]\n  }\n}\n\nresource vnet 'Microsoft.Network\u002FvirtualNetworks@2023-05-01' = {\n  name: vnetName\n  location: location\n  properties: {\n    addressSpace: {\n      addressPrefixes: [\n        '10.0.0.0\u002F16'\n      ]\n    }\n    subnets: [\n      {\n        name: 'web-subnet'\n        properties: {\n          addressPrefix: '10.0.1.0\u002F24'\n          networkSecurityGroup: {\n            id: nsg.id\n          }\n        }\n      }\n      {\n        name: 'app-subnet'\n        properties: {\n          addressPrefix: '10.0.2.0\u002F24'\n        }\n      }\n      {\n        name: 'data-subnet'\n        properties: {\n          addressPrefix: '10.0.3.0\u002F24'\n          privateEndpointNetworkPolicies: 'Enabled'\n        }\n      }\n    ]\n  }\n}\n\noutput vnetId string = vnet.id\noutput webSubnetId string = vnet.properties.subnets[0].id\noutput appSubnetId string = vnet.properties.subnets[1].id\n```\n\n### VM Deployment with Managed Identity\n\n```bicep\n\u002F\u002F vm.bicep\nparam location string = resourceGroup().location\nparam vmName string\nparam subnetId string\nparam adminUsername string = 'azureuser'\n\n@secure()\nparam adminPublicKey string\n\nresource nic 'Microsoft.Network\u002FnetworkInterfaces@2023-05-01' = {\n  name: '${vmName}-nic'\n  location: location\n  properties: {\n    ipConfigurations: [\n      {\n        name: 'ipconfig1'\n        properties: {\n          privateIPAllocationMethod: 'Dynamic'\n          subnet: {\n            id: subnetId\n          }\n        }\n      }\n    ]\n  }\n}\n\nresource vm 'Microsoft.Compute\u002FvirtualMachines@2023-07-01' = {\n  name: vmName\n  location: location\n  identity: {\n    type: 'SystemAssigned'\n  }\n  properties: {\n    hardwareProfile: {\n      vmSize: 'Standard_B2s'\n    }\n    osProfile: {\n      computerName: vmName\n      adminUsername: adminUsername\n      linuxConfiguration: {\n        disablePasswordAuthentication: true\n        ssh: {\n          publicKeys: [\n            {\n              path: '\u002Fhome\u002F${adminUsername}\u002F.ssh\u002Fauthorized_keys'\n              keyData: adminPublicKey\n            }\n          ]\n        }\n      }\n    }\n    storageProfile: {\n      imageReference: {\n        publisher: 'Canonical'\n        offer: '0001-com-ubuntu-server-jammy'\n        sku: '22_04-lts-gen2'\n        version: 'latest'\n      }\n      osDisk: {\n        createOption: 'FromImage'\n        managedDisk: {\n          storageAccountType: 'Premium_LRS'\n        }\n      }\n    }\n    networkProfile: {\n      networkInterfaces: [\n        {\n          id: nic.id\n        }\n      ]\n    }\n    diagnosticsProfile: {\n      bootDiagnostics: {\n        enabled: true\n      }\n    }\n  }\n}\n\noutput vmPrincipalId string = vm.identity.principalId\noutput vmId string = vm.id\n```\n\n## Bicep Modules\n\n### Module Definition\n\n```bicep\n\u002F\u002F modules\u002Fstorage.bicep\n@description('Storage account name (3-24 chars, lowercase alphanumeric)')\nparam storageAccountName string\n\nparam location string = resourceGroup().location\nparam sku string = 'Standard_LRS'\n\n@allowed(['Hot', 'Cool', 'Archive'])\nparam accessTier string = 'Hot'\n\nresource storageAccount 'Microsoft.Storage\u002FstorageAccounts@2023-01-01' = {\n  name: storageAccountName\n  location: location\n  sku: {\n    name: sku\n  }\n  kind: 'StorageV2'\n  properties: {\n    accessTier: accessTier\n    supportsHttpsTrafficOnly: true\n    minimumTlsVersion: 'TLS1_2'\n    allowBlobPublicAccess: false\n    networkAcls: {\n      defaultAction: 'Deny'\n      bypass: 'AzureServices'\n    }\n  }\n}\n\noutput storageAccountId string = storageAccount.id\noutput primaryBlobEndpoint string = storageAccount.properties.primaryEndpoints.blob\n```\n\n### Consuming Modules\n\n```bicep\n\u002F\u002F main.bicep\nparam location string = resourceGroup().location\nparam environment string = 'prod'\n\nmodule storage 'modules\u002Fstorage.bicep' = {\n  name: 'storage-deployment'\n  params: {\n    storageAccountName: 'myapp${environment}sa'\n    location: location\n    sku: environment == 'prod' ? 'Standard_GRS' : 'Standard_LRS'\n  }\n}\n\nmodule vnet 'modules\u002Fnetwork.bicep' = {\n  name: 'vnet-deployment'\n  params: {\n    location: location\n    environment: environment\n  }\n}\n\n\u002F\u002F Reference module outputs\noutput storageBlobEndpoint string = storage.outputs.primaryBlobEndpoint\n```\n\n## ARM JSON Template Structure\n\n```json\n{\n  \"$schema\": \"https:\u002F\u002Fschema.management.azure.com\u002Fschemas\u002F2019-04-01\u002FdeploymentTemplate.json#\",\n  \"contentVersion\": \"1.0.0.0\",\n  \"parameters\": {\n    \"storageAccountName\": {\n      \"type\": \"string\",\n      \"metadata\": {\n        \"description\": \"Name of the storage account\"\n      }\n    },\n    \"location\": {\n      \"type\": \"string\",\n      \"defaultValue\": \"[resourceGroup().location]\"\n    }\n  },\n  \"variables\": {\n    \"storageSku\": \"Standard_LRS\"\n  },\n  \"resources\": [\n    {\n      \"type\": \"Microsoft.Storage\u002FstorageAccounts\",\n      \"apiVersion\": \"2023-01-01\",\n      \"name\": \"[parameters('storageAccountName')]\",\n      \"location\": \"[parameters('location')]\",\n      \"sku\": {\n        \"name\": \"[variables('storageSku')]\"\n      },\n      \"kind\": \"StorageV2\",\n      \"properties\": {\n        \"supportsHttpsTrafficOnly\": true,\n        \"minimumTlsVersion\": \"TLS1_2\"\n      }\n    }\n  ],\n  \"outputs\": {\n    \"storageId\": {\n      \"type\": \"string\",\n      \"value\": \"[resourceId('Microsoft.Storage\u002FstorageAccounts', parameters('storageAccountName'))]\"\n    }\n  }\n}\n```\n\n## Deployment Commands\n\n```bash\n# Validate a Bicep template before deployment\naz deployment group validate \\\n  --resource-group mygroup \\\n  --template-file main.bicep \\\n  --parameters environment='prod' baseName='myapp'\n\n# Preview changes with What-If\naz deployment group what-if \\\n  --resource-group mygroup \\\n  --template-file main.bicep \\\n  --parameters environment='prod' baseName='myapp'\n\n# Deploy Bicep to resource group\naz deployment group create \\\n  --resource-group mygroup \\\n  --template-file main.bicep \\\n  --parameters environment='prod' baseName='myapp' \\\n  --name \"deploy-$(date +%Y%m%d-%H%M%S)\"\n\n# Deploy ARM JSON with parameter file\naz deployment group create \\\n  --resource-group mygroup \\\n  --template-file template.json \\\n  --parameters @parameters.prod.json\n\n# Subscription-level deployment (e.g., resource groups, policies)\naz deployment sub create \\\n  --location eastus \\\n  --template-file subscription-level.bicep \\\n  --parameters @params.json\n\n# Management group deployment\naz deployment mg create \\\n  --management-group-id my-mg \\\n  --location eastus \\\n  --template-file mg-policy.bicep\n\n# Export resource group to ARM JSON\naz group export --name mygroup --output json > exported-template.json\n\n# Decompile ARM JSON to Bicep\naz bicep decompile --file exported-template.json\n\n# Build Bicep to ARM JSON (for inspection)\naz bicep build --file main.bicep --outfile main.json\n\n# List deployments and their status\naz deployment group list \\\n  --resource-group mygroup \\\n  --output table\n\n# Delete a failed deployment\naz deployment group delete \\\n  --resource-group mygroup \\\n  --name my-failed-deployment\n```\n\n## Parameter Files\n\n```json\n\u002F\u002F parameters.prod.json\n{\n  \"$schema\": \"https:\u002F\u002Fschema.management.azure.com\u002Fschemas\u002F2019-04-01\u002FdeploymentParameters.json#\",\n  \"contentVersion\": \"1.0.0.0\",\n  \"parameters\": {\n    \"environment\": { \"value\": \"prod\" },\n    \"baseName\": { \"value\": \"myapp\" },\n    \"adminPublicKey\": {\n      \"reference\": {\n        \"keyVault\": {\n          \"id\": \"\u002Fsubscriptions\u002F{sub-id}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.KeyVault\u002Fvaults\u002F{vault}\"\n        },\n        \"secretName\": \"ssh-public-key\"\n      }\n    }\n  }\n}\n```\n\n\n## Contents\n\n- [Linked and Nested Templates](references\u002Fdetails.md)\n- [Troubleshooting](references\u002Fdetails.md)\n- [Related Skills](references\u002Fdetails.md)\n\n## When to Use\n\n- You need Azure-native Infrastructure as Code without third-party tooling.\n- Your organization standardizes on Azure and wants tight portal integration.\n- You need What-If analysis before deploying changes.\n- You are migrating existing ARM JSON templates to Bicep for maintainability.\n- You need deployment scopes at resource group, subscription, management group, or tenant level.\n\n## Limitations\n\n- Infrastructure commands can disrupt services: confirm target host\u002Fscope and have backups\u002Fsnapshots before mutating state.\n- Docs-only import: upstream scripts and templates not bundled.\n\n","# ARM Templates & Bicep\n\nDeploy Azure infrastructure with ARM templates and Bicep. Bicep is the recommended domain-specific language that compiles to ARM JSON, offering cleaner syntax, modules, and first-class tooling support.\n\n## Prerequisites\n\n```bash\n# Install Azure CLI\ncurl -sL https:\u002F\u002Faka.ms\u002FInstallAzureCLIDeb | sudo bash\n\n# Install Bicep CLI (bundled with Azure CLI 2.20+)\naz bicep install\naz bicep upgrade\n\n# Verify installation\naz bicep version\n\n# Login and set subscription\naz login\naz account set --subscription \"my-subscription-id\"\n```\n\n## Bicep Fundamentals\n\n### Resource Group Deployment with Virtual Network\n\n```bicep\n\u002F\u002F main.bicep\n@description('Azure region for all resources')\nparam location string = resourceGroup().location\n\n@description('Environment name used for resource naming')\n@allowed(['dev', 'staging', 'prod'])\nparam environment string = 'dev'\n\n@description('Base name for all resources')\nparam baseName string\n\nvar vnetName = '${baseName}-${environment}-vnet'\nvar nsgName = '${baseName}-${environment}-nsg'\n\nresource nsg 'Microsoft.Network\u002FnetworkSecurityGroups@2023-05-01' = {\n  name: nsgName\n  location: location\n  properties: {\n    securityRules: [\n      {\n        name: 'AllowHTTPS'\n        properties: {\n          priority: 100\n          direction: 'Inbound'\n          access: 'Allow'\n          protocol: 'Tcp'\n          sourcePortRange: '*'\n          destinationPortRange: '443'\n          sourceAddressPrefix: '*'\n          destinationAddressPrefix: '*'\n        }\n      }\n      {\n        name: 'DenyAllInbound'\n        properties: {\n          priority: 4096\n          direction: 'Inbound'\n          access: 'Deny'\n          protocol: '*'\n          sourcePortRange: '*'\n          destinationPortRange: '*'\n          sourceAddressPrefix: '*'\n          destinationAddressPrefix: '*'\n        }\n      }\n    ]\n  }\n}\n\nresource vnet 'Microsoft.Network\u002FvirtualNetworks@2023-05-01' = {\n  name: vnetName\n  location: location\n  properties: {\n    addressSpace: {\n      addressPrefixes: [\n        '10.0.0.0\u002F16'\n      ]\n    }\n    subnets: [\n      {\n        name: 'web-subnet'\n        properties: {\n          addressPrefix: '10.0.1.0\u002F24'\n          networkSecurityGroup: {\n            id: nsg.id\n          }\n        }\n      }\n      {\n        name: 'app-subnet'\n        properties: {\n          addressPrefix: '10.0.2.0\u002F24'\n        }\n      }\n      {\n        name: 'data-subnet'\n        properties: {\n          addressPrefix: '10.0.3.0\u002F24'\n          privateEndpointNetworkPolicies: 'Enabled'\n        }\n      }\n    ]\n  }\n}\n\noutput vnetId string = vnet.id\noutput webSubnetId string = vnet.properties.subnets[0].id\noutput appSubnetId string = vnet.properties.subnets[1].id\n```\n\n### VM Deployment with Managed Identity\n\n```bicep\n\u002F\u002F vm.bicep\nparam location string = resourceGroup().location\nparam vmName string\nparam subnetId string\nparam adminUsername string = 'azureuser'\n\n@secure()\nparam adminPublicKey string\n\nresource nic 'Microsoft.Network\u002FnetworkInterfaces@2023-05-01' = {\n  name: '${vmName}-nic'\n  location: location\n  properties: {\n    ipConfigurations: [\n      {\n        name: 'ipconfig1'\n        properties: {\n          privateIPAllocationMethod: 'Dynamic'\n          subnet: {\n            id: subnetId\n          }\n        }\n      }\n    ]\n  }\n}\n\nresource vm 'Microsoft.Compute\u002FvirtualMachines@2023-07-01' = {\n  name: vmName\n  location: location\n  identity: {\n    type: 'SystemAssigned'\n  }\n  properties: {\n    hardwareProfile: {\n      vmSize: 'Standard_B2s'\n    }\n    osProfile: {\n      computerName: vmName\n      adminUsername: adminUsername\n      linuxConfiguration: {\n        disablePasswordAuthentication: true\n        ssh: {\n          publicKeys: [\n            {\n              path: '\u002Fhome\u002F${adminUsername}\u002F.ssh\u002Fauthorized_keys'\n              keyData: adminPublicKey\n            }\n          ]\n        }\n      }\n    }\n    storageProfile: {\n      imageReference: {\n        publisher: 'Canonical'\n        offer: '0001-com-ubuntu-server-jammy'\n        sku: '22_04-lts-gen2'\n        version: 'latest'\n      }\n      osDisk: {\n        createOption: 'FromImage'\n        managedDisk: {\n          storageAccountType: 'Premium_LRS'\n        }\n      }\n    }\n    networkProfile: {\n      networkInterfaces: [\n        {\n          id: nic.id\n        }\n      ]\n    }\n    diagnosticsProfile: {\n      bootDiagnostics: {\n        enabled: true\n      }\n    }\n  }\n}\n\noutput vmPrincipalId string = vm.identity.principalId\noutput vmId string = vm.id\n```\n\n## Bicep Modules\n\n### Module Definition\n\n```bicep\n\u002F\u002F modules\u002Fstorage.bicep\n@description('Storage account name (3-24 chars, lowercase alphanumeric)')\nparam storageAccountName string\n\nparam location string = resourceGroup().location\nparam sku string = 'Standard_LRS'\n\n@allowed(['Hot', 'Cool', 'Archive'])\nparam accessTier string = 'Hot'\n\nresource storageAccount 'Microsoft.Storage\u002FstorageAccounts@2023-01-01' = {\n  name: storageAccountName\n  location: location\n  sku: {\n    name: sku\n  }\n  kind: 'StorageV2'\n  properties: {\n    accessTier: accessTier\n    supportsHttpsTrafficOnly: true\n    minimumTlsVersion: 'TLS1_2'\n    allowBlobPublicAccess: false\n    networkAcls: {\n      defaultAction: 'Deny'\n      bypass: 'AzureServices'\n    }\n  }\n}\n\noutput storageAccountId string = storageAccount.id\noutput primaryBlobEndpoint string = storageAccount.properties.primaryEndpoints.blob\n```\n\n### Consuming Modules\n\n```bicep\n\u002F\u002F main.bicep\nparam location string = resourceGroup().location\nparam environment string = 'prod'\n\nmodule storage 'modules\u002Fstorage.bicep' = {\n  name: 'storage-deployment'\n  params: {\n    storageAccountName: 'myapp${environment}sa'\n    location: location\n    sku: environment == 'prod' ? 'Standard_GRS' : 'Standard_LRS'\n  }\n}\n\nmodule vnet 'modules\u002Fnetwork.bicep' = {\n  name: 'vnet-deployment'\n  params: {\n    location: location\n    environment: environment\n  }\n}\n\n\u002F\u002F Reference module outputs\noutput storageBlobEndpoint string = storage.outputs.primaryBlobEndpoint\n```\n\n## ARM JSON Template Structure\n\n```json\n{\n  \"$schema\": \"https:\u002F\u002Fschema.management.azure.com\u002Fschemas\u002F2019-04-01\u002FdeploymentTemplate.json#\",\n  \"contentVersion\": \"1.0.0.0\",\n  \"parameters\": {\n    \"storageAccountName\": {\n      \"type\": \"string\",\n      \"metadata\": {\n        \"description\": \"Name of the storage account\"\n      }\n    },\n    \"location\": {\n      \"type\": \"string\",\n      \"defaultValue\": \"[resourceGroup().location]\"\n    }\n  },\n  \"variables\": {\n    \"storageSku\": \"Standard_LRS\"\n  },\n  \"resources\": [\n    {\n      \"type\": \"Microsoft.Storage\u002FstorageAccounts\",\n      \"apiVersion\": \"2023-01-01\",\n      \"name\": \"[parameters('storageAccountName')]\",\n      \"location\": \"[parameters('location')]\",\n      \"sku\": {\n        \"name\": \"[variables('storageSku')]\"\n      },\n      \"kind\": \"StorageV2\",\n      \"properties\": {\n        \"supportsHttpsTrafficOnly\": true,\n        \"minimumTlsVersion\": \"TLS1_2\"\n      }\n    }\n  ],\n  \"outputs\": {\n    \"storageId\": {\n      \"type\": \"string\",\n      \"value\": \"[resourceId('Microsoft.Storage\u002FstorageAccounts', parameters('storageAccountName'))]\"\n    }\n  }\n}\n```\n\n## Deployment Commands\n\n```bash\n# Validate a Bicep template before deployment\naz deployment group validate \\\n  --resource-group mygroup \\\n  --template-file main.bicep \\\n  --parameters environment='prod' baseName='myapp'\n\n# Preview changes with What-If\naz deployment group what-if \\\n  --resource-group mygroup \\\n  --template-file main.bicep \\\n  --parameters environment='prod' baseName='myapp'\n\n# Deploy Bicep to resource group\naz deployment group create \\\n  --resource-group mygroup \\\n  --template-file main.bicep \\\n  --parameters environment='prod' baseName='myapp' \\\n  --name \"deploy-$(date +%Y%m%d-%H%M%S)\"\n\n# Deploy ARM JSON with parameter file\naz deployment group create \\\n  --resource-group mygroup \\\n  --template-file template.json \\\n  --parameters @parameters.prod.json\n\n# Subscription-level deployment (e.g., resource groups, policies)\naz deployment sub create \\\n  --location eastus \\\n  --template-file subscription-level.bicep \\\n  --parameters @params.json\n\n# Management group deployment\naz deployment mg create \\\n  --management-group-id my-mg \\\n  --location eastus \\\n  --template-file mg-policy.bicep\n\n# Export resource group to ARM JSON\naz group export --name mygroup --output json > exported-template.json\n\n# Decompile ARM JSON to Bicep\naz bicep decompile --file exported-template.json\n\n# Build Bicep to ARM JSON (for inspection)\naz bicep build --file main.bicep --outfile main.json\n\n# List deployments and their status\naz deployment group list \\\n  --resource-group mygroup \\\n  --output table\n\n# Delete a failed deployment\naz deployment group delete \\\n  --resource-group mygroup \\\n  --name my-failed-deployment\n```\n\n## Parameter Files\n\n```json\n\u002F\u002F parameters.prod.json\n{\n  \"$schema\": \"https:\u002F\u002Fschema.management.azure.com\u002Fschemas\u002F2019-04-01\u002FdeploymentParameters.json#\",\n  \"contentVersion\": \"1.0.0.0\",\n  \"parameters\": {\n    \"environment\": { \"value\": \"prod\" },\n    \"baseName\": { \"value\": \"myapp\" },\n    \"adminPublicKey\": {\n      \"reference\": {\n        \"keyVault\": {\n          \"id\": \"\u002Fsubscriptions\u002F{sub-id}\u002FresourceGroups\u002F{rg}\u002Fproviders\u002FMicrosoft.KeyVault\u002Fvaults\u002F{vault}\"\n        },\n        \"secretName\": \"ssh-public-key\"\n      }\n    }\n  }\n}\n```\n\n\n## Contents\n\n- [Linked and Nested Templates](references\u002Fdetails.md)\n- [Troubleshooting](references\u002Fdetails.md)\n- [Related Skills](references\u002Fdetails.md)\n\n## When to Use\n\n- You need Azure-native Infrastructure as Code without third-party tooling.\n- Your organization standardizes on Azure and wants tight portal integration.\n- You need What-If analysis before deploying changes.\n- You are migrating existing ARM JSON templates to Bicep for maintainability.\n- You need deployment scopes at resource group, subscription, management group, or tenant level.\n\n## Limitations\n\n- Infrastructure commands can disrupt services: confirm target host\u002Fscope and have backups\u002Fsnapshots before mutating state.\n- Docs-only import: upstream scripts and templates not bundled.\n\n",{"name":5,"risk":25,"source":43,"license":14,"category":44,"metadata":45,"date_added":48,"description":7,"source_repo":49,"source_type":20,"compatibility":50,"license_source":51},"https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills","devops",{"author":46,"version":47},"devops-skills","1.0","2026-09-20","BagelHole\u002FDevOps-Security-Agent-Skills","Requires the relevant OS\u002Fplatform tooling and privileged access where noted. Docs-only; helper scripts and templates not bundled.","https:\u002F\u002Fgithub.com\u002FBagelHole\u002FDevOps-Security-Agent-Skills\u002Fblob\u002Fmain\u002FLICENSE","f3312ba749561b6159f477dbfc9313c875d40a56",".agents\u002Fskills_archive\u002Farm-templates","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612","2026-10-25 23:50:58",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill arm-templates",{"tool":63,"command":64},"bunx","bunx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill arm-templates",{"tool":66,"command":67},"pnpm","pnpm dlx skills add duc-duy-1612\u002FOnline-Delivery-Systems-Web --skill arm-templates","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Farm-templates\u002FSKILL.md",true,[71],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"references\u002Fdetails.md","REFERENCE","参考文档",2374,"https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Farm-templates\u002Freferences\u002Fdetails.md",[78,101,125,149,177,201],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":89,"publishedAt":38},"01M6Q0FA5FZ410Z33Z3TFQ4DBA","zero-trust","Implement zero-trust network architecture. Configure identity-based access, micro-segmentation, and continuous verification. Use when implementing modern security architectures.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzero-trust\u002FSKILL.md",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[90,91,92,93,94,95,80,96,34,33,97,31,20,28,98,25,99,24,21,100],"ZeRO","trust","zero trust","architecture","assessment","verification","segmentation","configure","active","scope","implementing",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":38},"01M6Q0F1YZJW3KX5FBKEVZ8CV4","zcode-delegate","Delegate coding tasks to the Z.AI ZCode CLI only when the user explicitly requests it, while the orchestrator retains review and landing responsibility.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fzcode-delegate\u002FSKILL.md",[],[108,109,110,111,112,113,114,115,116,117,118,119,120,31,121,20,122,123,25,124],"delegate","zcode","zcode delegate","review","cli","orchestration","tasks","run","Bash","model","node","read","orchestrator","files","desktop app","app","agent-orchestration",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":38},"01M6Q0ETK41VGNMYEXW0T00AJN","youtube-transcript","Fetch YouTube transcripts through DeepAPI or local fallback tooling and save clean text output.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript\u002FSKILL.md",[],[132,133,134,135,136,137,138,35,139,140,141,142,143,20,28,144,145,146,147,148],"transcript","youtube transcript","youtube","safe","github","codex","research","https","text","fetch","tooling","clean","local","output","deepapi","youtube transcripts","blob",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":166,"publishedAt":38},"01M6Q0EPPH2PVMDW40017F8WX0","youtube-transcript-skills","Fetch YouTube video transcripts, search videos\u002Fchannels, browse channels, and extract playlists via the getyoutubetranscript.com API - free tier, no card required.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-transcript-skills\u002FSKILL.md",[155,158,161],{"categoryNo":156,"categoryName":157,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":159,"categoryName":160,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":162,"categoryName":163,"taxonomyType":164,"taxonomyTypeDesc":165},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[132,133,134,167,135,168,136,137,35,169,170,171,172,141,173,20,28,174,175,176],"youtube transcript skills","gemini","search","api","Video","browse","api-integration","free","card","channels",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":187,"publishedAt":38},"01M6Q0EAB96PX83W5PTE8A0R8D","youtube-notetaker","Turn YouTube talks into local study notes with slides, transcripts, editable annotations, and a markdown-backed viewer.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-notetaker\u002FSKILL.md",[183,186],{"categoryNo":184,"categoryName":185,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":159,"categoryName":160,"taxonomyType":87,"taxonomyTypeDesc":88},[134,188,189,112,135,190,191,192,193,35,171,194,195,196,197,28,198,144,199,200],"youtube notetaker","notetaker","workflow","official","notes","code","markdown","slides","annotations","README","study","dair-academy","viewer",{"skillNo":202,"name":203,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":208,"publishedAt":38},"01M6Q0E55F0GW5MX48V8HXS8B5","youtube-full","Fetch YouTube transcripts, search videos, browse channels, and extract playlists via TranscriptAPI — no yt-dlp, no Google API key, works from any cloud server.","https:\u002F\u002Fgithub.com\u002Fduc-duy-1612\u002FOnline-Delivery-Systems-Web\u002Fblob\u002Fmain\u002F.agents\u002Fskills_archive\u002Fyoutube-full\u002FSKILL.md",[207],{"categoryNo":156,"categoryName":157,"taxonomyType":87,"taxonomyTypeDesc":88},[209,134,210,211,135,168,169,212,213,170,171,172,141,214,173,20,28,174,215,147],"youtube full","full","google","server","dlp","credits","automatic"]