在我们的一个项目中,我们尝试在Azure上自动部署云组件。对于大多数组件(基本上所有ARM组件,如Redis,Service bus,App Service等),我们能够使用ARM模板和Powershell脚本实现它。
但是,我们仍然坚持使用 Cloud Service(经典)组件。云服务组件中仅包含WebRole,不需要配置VM。
我们可以通过经典的部署模型,即在power shell中使用ASM命令。但是,因为ARM模型支持从azure门户进行配置和部署,所以我想知道ARM REST API也必须对该组件提供开箱即用的支持。我试着想出来但却找不到相关的文件。
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
如果我尝试执行上面的脚本,执行会在检查部署一段时间后停滞不前,并且必须手动终止脚本执行。
但是,如果我在power shell中运行以下命令,它会在portal中成功创建一个资源:
New-AzureRmResource -Location" South India" -ResourceName " cloudsmplservice" -ResourceType " Microsoft.ClassicCompute / DOMAINNAMES" -ResourceGroupName" FreeTrial"
但我不明白ARM模板方法的问题是什么。有人可以在第一种方法中指导我解决问题吗?
附录:
我发现了一种奇怪的行为。如果我在资源定义中对资源名称值进行硬编码,或者在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"
}
]
}
Addendum2:
似乎有些PowerShell配置问题。将向Azure团队报告更多详细信息。所以,远远能够通过简单的步骤重现它:
答案 0 :(得分:4)
我建议您从Azure门户中的模板部署验证您的Cloud Service ARM模板。
我可以使用下面的模板部署裸机Cloud Service,并在几秒钟内完成部署。
当您尝试从Azure门户创建新的Cloud Service时,您还可以通过单击“自动化”选项来“反向工程”Cloud Service ARM模板。
我没有看到ARM模板方法自动化云服务的问题。
注意:
我已经在南印度位置进行了部署,但它确实有效。
<强>附录:强>
我使用PowerShell脚本部署了如下模板,它也可以正常工作。
Azure PowerShell版本 4。3。1(2017年8月)。
{
"$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"
}
]
}
附录2:
尝试使用带有默认参数值的模板,部署也正常运行。
注意:我注意到您的api版本较旧且我的云服务的api版本为 2016-11-01
{
"$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"
}
]
}
答案 1 :(得分:1)