2nd, Azure Json ARM 模板部署常见问题记录

目录

📘 Azure PowerShell 部署练习笔记

🧩 模板参数设定与变量构建

$templateFile = "azuredeploy.json"                     # 本地 ARM 模板文件路径
$today = Get-Date -Format "MM-dd-yyyy"                 # 当前日期,用于生成部署名
$deploymentName = "addstorage-" + "$today"             # 自动拼接部署名称

🚀 执行部署命令

New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -ResourceGroupName "<你的资源组名>" `
  -TemplateFile $templateFile

如需传入模板参数:

✅ 方法一:使用参数对象传参

$parameters = @{
  storageName = "storage00001"
}

New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -ResourceGroupName "<你的资源组名>" `
  -TemplateFile $templateFile `
  -TemplateParameterObject $parameters

✅ 方法二:使用参数文件传参

创建参数文件 azuredeploy.parameters.json

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "value": "storage00001"
    }
  }
}

调用部署命令:

New-AzResourceGroupDeployment `
  -Name $deploymentName `
  -ResourceGroupName "<你的资源组名>" `
  -TemplateFile $templateFile `
  -TemplateParameterFile "azuredeploy.parameters.json"

🛠️ 常见错误与解决方案

错误代码 原因说明 解决办法
StorageAccountAlreadyTaken 存储账户名称已被占用 修改名称或使用 uniqueString()[^1]
AccountNameInvalid 存储名称非法,如含 - 或超过 24 个字符 仅用小写字母+数字,3~24 字符
AuthorizationFailed 当前账户权限不足 检查角色分配或重新登录
InvalidTemplateDeployment 模板结构或参数验证失败 检查模板 JSON 格式与参数引用
NoRegisteredProviderFound API版本或资源位置不被支持 更新 apiVersion 或更改区域

📎 模板中参数使用方式(ARM JSON)

"parameters": {
  "storageName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  }
},
"resources": [{
  "name": "[parameters('storageName')]",
  "type": "Microsoft.Storage/storageAccounts",
  "apiVersion": "2021-04-01",
  "location": "[resourceGroup().location]",
  "sku": {
    "name": "Standard_LRS"
  },
  "kind": "StorageV2",
  "properties": {}
}],
"outputs": {
  "storageAccountName": {
    "type": "string",
    "value": "[parameters('storageName')]"
  }
}

🔡 PowerShell 特殊符号说明

```(反引号)

  • 用于行续写,表示当前命令未结束;
  • 必须放在行尾,后面不能有空格
New-AzResourceGroupDeployment `
  -Name "demo" `
  -TemplateFile "file.json"

"双引号" vs '单引号'

类型 是否解析变量 示例
"双引号" "Hello $name" => 变量替换
'单引号' 'Hello $name' => 原样输出

📦 SKU 是什么?

  • SKU(Stock Keeping Unit)是唯一标识产品的编码,在 Azure 中也表示服务套餐;
  • 示例:存储账户中的 SKU 是 "Standard_LRS" 表示标准冗余存储。

🎞️ 什么是硬解码?

  • 使用 GPU/VPU 等硬件进行视频或音频解码;
  • 优点:高效、节能、减轻 CPU 负担;
  • 适合播放高清视频或嵌入式设备实时解码。

[^1]: uniqueString() 是 ARM 模板内置函数,可生成唯一字符串,避免资源命名冲突。