代码之家  ›  专栏  ›  技术社区  ›  Rohit Vats

通过ARM模板提供经典云服务

  •  3
  • Rohit Vats  · 技术社区  · 7 年前

    在我们的一个项目中,我们试图在Azure上自动部署云组件。对于大多数部件 (基本上所有ARM组件,如Redis、Service bus、App Service等) 我们能够使用ARM模板和Powershell脚本实现它。

    云服务(经典) 组成部分云服务组件中只包含WebRole,不需要配置VM。


    Azure模板(AzureDeploy.json)

    {
        "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
        "parameters": {
            "name": {
                "type": "string"
            },
            "location": {
                "type": "string"
            }
        },
        "resources": [
             {
                "apiVersion": "2014-06-01",
                "name": "[parameters('name')]",
                "location": "[parameters('location')]",
                "type": "Microsoft.ClassicCompute/domainNames"
            }
        ]
    }
    

    Powershell脚本:

    Param(
        [string] $ResourceGroupLocation = 'South India',
        [string] $ResourceGroupName = 'FreeTrial',
        [string] $TemplateFile = 'AzureDeploy.json'
    )
    
    $TemplateFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateFile))
    
    New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force -ErrorAction Stop 
    New-AzureRmResourceGroupDeployment -Name ((Get-ChildItem $TemplateFile).BaseName + '-' + ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) `
                                       -ResourceGroupName $ResourceGroupName `
                                       -TemplateFile $TemplateFile `
                                       -Force -Verbose
    

    Script execution .


    “cloudsmplservice”-资源类型 “Microsoft.ClassicComputer/domainNames”-ResourceGroupName“FreeTrial”


    附录:

    我发现了一种奇怪的行为。如果我在资源定义中硬编码资源名称值,或者在powershell提示时传递它,部署工作正常。

    {
      "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "cloudName": {
          "type": "string",
          "defaultValue": "cloudsrvc"
        }
      },
      "resources": [
        {
          "apiVersion": "2015-06-01",
          "name": "[parameters('cloudName')]",
          "location": "[resourceGroup().location]",
          "type": "Microsoft.ClassicCompute/domainNames"
        }
      ]
    }
    

    附录2:

    似乎是powershell配置问题。将向Azure团队报告更多详细信息。到目前为止,far能够用简单的步骤复制它:

    1. 在azure中创建了一个新的VM。
    2. 尝试使用默认值模板提供云服务。(如前所述)
    3. 现在尝试通过从powershell传递参数进行设置。(工作良好)
    4. 现在使用默认值模板重试。(工作良好)
    2 回复  |  直到 7 年前
        1
  •  4
  •   juvchan    7 年前

    我建议您从 模板部署

    在尝试从Azure门户创建新的云服务时,您还可以通过单击自动化选项来“反向工程”云服务ARM模板。

    我没有看到通过ARM模板方法自动化云服务的问题。

    我已经在 印度南部 位置和它的工作。

    附录:

    我使用您的PowerShell脚本部署了以下模板,它也可以正常工作。

    Azure PowerShell版本为 .

    截图如下。 enter image description here

    {
        "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "name": {
                "type": "string"
            },
            "location": {
                "type": "string"
            }
        },
        "resources": [
            {
                "apiVersion": "2016-11-01",
                "name": "[parameters('name')]",
                "location": "[parameters('location')]",
                "type": "Microsoft.ClassicCompute/domainNames"
            }
        ]
    }
    

    尝试使用默认参数值的模板,部署也会成功。

    注意:我注意到您的api版本较旧,我的云服务的api版本为 2016-11-01

    enter image description here

    {
      "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "name": {
          "type": "string",
          "defaultValue": "[resourceGroup().name]"
        },
        "location": {
          "type": "string",
          "defaultValue": "[resourceGroup().location]"
        }
      },
      "resources": [
        {
          "apiVersion": "2016-11-01",
          "name": "[parameters('name')]",
          "location": "[parameters('location')]",
          "type": "Microsoft.ClassicCompute/domainNames"
        }
      ]
    }
    
        2
  •  1
  •   Tom Sun    7 年前

    我们也可以使用RESTAPI来实现这一点,我用fiddler进行了测试。

    https://management.azure.com/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/Microsoft.ClassicCompute/domainNames/{cloudservicename}?api-version=2016-04-01
    

    enter image description here

    笔记