Azure 资源管理器模板 - 将 dacpac 和两个 Web 项目部署到一个 Web 应用中
Azure Resource Manager template - deploy dacpac and two web projects into one web app
我们正在尝试使用 ARM 来申请和部署一个相当复杂的设置到 Azure 中。
以下是基本组件:
- 2 个 Web 项目应该放在一个 Web App 中,一个在虚拟中
子目录
- 2 Sql 个数据库在同一个数据库服务器上,使用 DACPAC
(不是 bacpac)
- Azure 服务总线
- 用于中间件的 VM
- 一些其他的东西
我完成了大部分工作。我似乎无法弄清楚该怎么做的两个主要部分:
- 我找不到执行 DACPAC 部署的模板或方法。我们在 Sql 数据库项目中有我们的模式,它可以巧妙地编译成 dacpac 格式。我期望能够使用 Azure 资源组部署项目将其添加到 ARM 部署模板中。但到目前为止,我只能找到一种使用 BACPAC 文件进行数据库导入的方法,这在我们的案例中没有多大意义。
- 我试图找到一种方法将两个单独的 Web 项目部署到 Azure Web 应用程序中,但部署到两个不同的虚拟应用程序中。我找到了一种在一个 WebDeploy 上配置虚拟应用程序路径的方法,但我无法将第二个项目添加到同一个 WebSite 节点中。
这是一个应用程序网站部署模板的片段:
{
"name": "[variables('UxWebAppName')]",
"type": "Microsoft.Web/sites",
"location": "[resourceGroup().location]",
"apiVersion": "2015-08-01",
"dependsOn": [
"[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
],
"tags": {
"[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
"displayName": "UxWebApp"
},
"properties": {
"name": "[variables('UxWebAppName')]",
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
},
"resources": [
{
"apiVersion": "2015-08-01",
"name": "web",
"type": "config",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', variables('UxWebAppName'))]"
],
"properties": {
"phpVersion": "5.5",
"netFrameworkVersion": "v4.6",
"use32BitWorkerProcess": false, /* 64-bit platform */
"webSocketsEnabled": true,
"alwaysOn": true,
"remoteDebuggingEnabled": false,
"virtualApplications": [
{
"virtualPath": "/",
"physicalPath": "site\wwwroot"
},
{
"virtualPath": "/api",
"physicalPath": "site\wwwroot\api"
}
],
"defaultDocuments": [
"index.html",
"hostingstart.html"
]
}
},
{
"name": "MSDeploy",
"type": "extensions",
"location": "[resourceGroup().location]",
"apiVersion": "2015-08-01",
"dependsOn": [
"[concat('Microsoft.Web/sites/', variables('UxWebAppName'))]"
],
"tags": {
"displayName": "UxDeploy"
},
"properties": {
"packageUri": "[concat(parameters('_artifactsLocation'), '/', parameters('UxDeployPackageFolder'), '/', parameters('UxDeployPackageFileName'), parameters('_artifactsLocationSasToken'))]",
"dbType": "None",
"connectionString": "",
"setParameters": {
"IIS Web Application Name": "[variables('UxWebAppName')]"
}
}
}
我试图添加第二个 MSDeploy 扩展元素,但这导致部署期间出现错误,指出存在重复节点。
这是 sql 服务器部分的代码片段:
{
"name": "[variables('sqlserverName')]",
"type": "Microsoft.Sql/servers",
"location": "[resourceGroup().location]",
"tags": {
"displayName": "SqlServer"
},
"apiVersion": "2014-04-01-preview",
"properties": {
"administratorLogin": "[parameters('administratorLogin')]",
"administratorLoginPassword": "[parameters('administratorLoginPassword')]"
},
"resources": [
{
"name": "[parameters('coreDatabaseName')]",
"type": "databases",
"location": "[resourceGroup().location]",
"tags": {
"displayName": "CoreDatabase"
},
"apiVersion": "2014-04-01-preview",
"dependsOn": [
"[concat('Microsoft.Sql/servers/', variables('sqlserverName'))]"
],
"properties": {
"edition": "[parameters('edition')]",
"collation": "[parameters('collation')]",
"maxSizeBytes": "[parameters('maxSizeBytes')]",
"requestedServiceObjectiveName": "[parameters('requestedServiceObjectiveName')]"
},
"resources": [
{
"name": "Import",
"type": "extensions",
"apiVersion": "2014-04-01-preview",
"dependsOn": [
"[parameters('coreDatabaseName')]"
],
"tags": {
"displayName": "CoreDb"
},
"properties": {
"storageKeyType": "[parameters('CoreDbStorageKeyType')]",
"storageKey": "[parameters('primaryKey')]",
"storageUri": "[concat(parameters('_artifactsLocation'), '/', parameters('CoreDbStoragePackageFolder'), '/', parameters('CoreDbStoragePackageFileName'))]",
"administratorLogin": "[parameters('administratorLogin')]",
"administratorLoginPassword": "[parameters('administratorLoginPassword')]",
"operationMode": "Import"
}
}
]
},
{
"type": "firewallrules",
"apiVersion": "2014-04-01-preview",
"dependsOn": [
"[concat('Microsoft.Sql/servers/', variables('sqlserverName'))]"
],
"location": "[resourceGroup().location]",
"name": "AllowAllWindowsAzureIps",
"properties": {
"endIpAddress": "0.0.0.0",
"startIpAddress": "0.0.0.0"
}
}
]
}
这似乎只适用于 bacpac 文件,但不适用于 dacpac。我只是无法在网络上的任何地方找到很多有用的信息。我发现可能有几个条目正在谈论在网络应用程序项目中包括 dacpac,但这种方法对我来说似乎很奇怪。我尝试将 operationMode 设置为 Publish(假设它在后台使用 sqlpackage),但它说它不受支持。
有没有人有使用 ARM 进行这两种部署的经验?或者我只是第一批尝试这样做的小白鼠之一?
我想我可以使用 powershell / msbuild deploy(我可以在其中指定虚拟目录等)分别执行 dacpac 和 Web 应用程序的部署,但据我所知,这有点违背了 ARM 的目的?
感谢任何有用的提示!
EDIT 我的部署在没有 ARM 的情况下工作,而征用部分使用 MSBuild,如下所示:
对于使用 publishprofile 的网络应用程序,很容易
"C:\Program Files (x86)\MSBuild.0\Bin\MSBuild.exe" ../xx/SomeApp.csproj /p:DeployOnBuild=true /p:PublishProfile=SomeApp.pubxml /p:VisualStudioVersion=12.0 /p:Password=******
对于 sql 这样的部署:
"C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\sqlpackage.exe" /Action:Publish /SourceFile:"U:\bin\Database\Database.dacpac" /TargetConnectionString:"Server=some.database.windows.net,1433;Database=SomeDatabase;User ID=someUser;Password=*******;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" /p:GenerateSmartDefaults=True /p:RegisterDataTierApplication=True /p:BlockWhenDriftDetected=False /p:BlockOnPossibleDataLoss=False
问题纯粹是关于 ARM 模板部署。我的意思是,我可以拆分申请(使用 ARM)和部署(使用 msdeploy 或 Powershell DSC),但我认为我只是做得不对,因为部署的某些部分(例如 Web 包)正在运行。
真的只有一半的东西受支持,但有一半还没有吗?
让我尝试回答我们的问题之一:
I'm trying to find a way to deploy two separate web projects into
azure web app, but into two different virtual applications. I found a
way to configure the virtual app paths on one WebDeploy, but I can't
add a second project into the same WebSite node.
您将需要配置您的网站以识别您的虚拟目录。
Publish Multiple Projects to Different Locations on Azure Website
目前不支持使用 Azure 模板部署将 dacpac 部署到 Azure 数据库。
我们正在尝试使用 ARM 来申请和部署一个相当复杂的设置到 Azure 中。 以下是基本组件:
- 2 个 Web 项目应该放在一个 Web App 中,一个在虚拟中 子目录
- 2 Sql 个数据库在同一个数据库服务器上,使用 DACPAC (不是 bacpac)
- Azure 服务总线
- 用于中间件的 VM
- 一些其他的东西
我完成了大部分工作。我似乎无法弄清楚该怎么做的两个主要部分:
- 我找不到执行 DACPAC 部署的模板或方法。我们在 Sql 数据库项目中有我们的模式,它可以巧妙地编译成 dacpac 格式。我期望能够使用 Azure 资源组部署项目将其添加到 ARM 部署模板中。但到目前为止,我只能找到一种使用 BACPAC 文件进行数据库导入的方法,这在我们的案例中没有多大意义。
- 我试图找到一种方法将两个单独的 Web 项目部署到 Azure Web 应用程序中,但部署到两个不同的虚拟应用程序中。我找到了一种在一个 WebDeploy 上配置虚拟应用程序路径的方法,但我无法将第二个项目添加到同一个 WebSite 节点中。
这是一个应用程序网站部署模板的片段:
{
"name": "[variables('UxWebAppName')]",
"type": "Microsoft.Web/sites",
"location": "[resourceGroup().location]",
"apiVersion": "2015-08-01",
"dependsOn": [
"[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
],
"tags": {
"[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
"displayName": "UxWebApp"
},
"properties": {
"name": "[variables('UxWebAppName')]",
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
},
"resources": [
{
"apiVersion": "2015-08-01",
"name": "web",
"type": "config",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', variables('UxWebAppName'))]"
],
"properties": {
"phpVersion": "5.5",
"netFrameworkVersion": "v4.6",
"use32BitWorkerProcess": false, /* 64-bit platform */
"webSocketsEnabled": true,
"alwaysOn": true,
"remoteDebuggingEnabled": false,
"virtualApplications": [
{
"virtualPath": "/",
"physicalPath": "site\wwwroot"
},
{
"virtualPath": "/api",
"physicalPath": "site\wwwroot\api"
}
],
"defaultDocuments": [
"index.html",
"hostingstart.html"
]
}
},
{
"name": "MSDeploy",
"type": "extensions",
"location": "[resourceGroup().location]",
"apiVersion": "2015-08-01",
"dependsOn": [
"[concat('Microsoft.Web/sites/', variables('UxWebAppName'))]"
],
"tags": {
"displayName": "UxDeploy"
},
"properties": {
"packageUri": "[concat(parameters('_artifactsLocation'), '/', parameters('UxDeployPackageFolder'), '/', parameters('UxDeployPackageFileName'), parameters('_artifactsLocationSasToken'))]",
"dbType": "None",
"connectionString": "",
"setParameters": {
"IIS Web Application Name": "[variables('UxWebAppName')]"
}
}
}
我试图添加第二个 MSDeploy 扩展元素,但这导致部署期间出现错误,指出存在重复节点。
这是 sql 服务器部分的代码片段:
{
"name": "[variables('sqlserverName')]",
"type": "Microsoft.Sql/servers",
"location": "[resourceGroup().location]",
"tags": {
"displayName": "SqlServer"
},
"apiVersion": "2014-04-01-preview",
"properties": {
"administratorLogin": "[parameters('administratorLogin')]",
"administratorLoginPassword": "[parameters('administratorLoginPassword')]"
},
"resources": [
{
"name": "[parameters('coreDatabaseName')]",
"type": "databases",
"location": "[resourceGroup().location]",
"tags": {
"displayName": "CoreDatabase"
},
"apiVersion": "2014-04-01-preview",
"dependsOn": [
"[concat('Microsoft.Sql/servers/', variables('sqlserverName'))]"
],
"properties": {
"edition": "[parameters('edition')]",
"collation": "[parameters('collation')]",
"maxSizeBytes": "[parameters('maxSizeBytes')]",
"requestedServiceObjectiveName": "[parameters('requestedServiceObjectiveName')]"
},
"resources": [
{
"name": "Import",
"type": "extensions",
"apiVersion": "2014-04-01-preview",
"dependsOn": [
"[parameters('coreDatabaseName')]"
],
"tags": {
"displayName": "CoreDb"
},
"properties": {
"storageKeyType": "[parameters('CoreDbStorageKeyType')]",
"storageKey": "[parameters('primaryKey')]",
"storageUri": "[concat(parameters('_artifactsLocation'), '/', parameters('CoreDbStoragePackageFolder'), '/', parameters('CoreDbStoragePackageFileName'))]",
"administratorLogin": "[parameters('administratorLogin')]",
"administratorLoginPassword": "[parameters('administratorLoginPassword')]",
"operationMode": "Import"
}
}
]
},
{
"type": "firewallrules",
"apiVersion": "2014-04-01-preview",
"dependsOn": [
"[concat('Microsoft.Sql/servers/', variables('sqlserverName'))]"
],
"location": "[resourceGroup().location]",
"name": "AllowAllWindowsAzureIps",
"properties": {
"endIpAddress": "0.0.0.0",
"startIpAddress": "0.0.0.0"
}
}
]
}
这似乎只适用于 bacpac 文件,但不适用于 dacpac。我只是无法在网络上的任何地方找到很多有用的信息。我发现可能有几个条目正在谈论在网络应用程序项目中包括 dacpac,但这种方法对我来说似乎很奇怪。我尝试将 operationMode 设置为 Publish(假设它在后台使用 sqlpackage),但它说它不受支持。
有没有人有使用 ARM 进行这两种部署的经验?或者我只是第一批尝试这样做的小白鼠之一?
我想我可以使用 powershell / msbuild deploy(我可以在其中指定虚拟目录等)分别执行 dacpac 和 Web 应用程序的部署,但据我所知,这有点违背了 ARM 的目的?
感谢任何有用的提示!
EDIT 我的部署在没有 ARM 的情况下工作,而征用部分使用 MSBuild,如下所示: 对于使用 publishprofile 的网络应用程序,很容易
"C:\Program Files (x86)\MSBuild.0\Bin\MSBuild.exe" ../xx/SomeApp.csproj /p:DeployOnBuild=true /p:PublishProfile=SomeApp.pubxml /p:VisualStudioVersion=12.0 /p:Password=******
对于 sql 这样的部署:
"C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\sqlpackage.exe" /Action:Publish /SourceFile:"U:\bin\Database\Database.dacpac" /TargetConnectionString:"Server=some.database.windows.net,1433;Database=SomeDatabase;User ID=someUser;Password=*******;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" /p:GenerateSmartDefaults=True /p:RegisterDataTierApplication=True /p:BlockWhenDriftDetected=False /p:BlockOnPossibleDataLoss=False
问题纯粹是关于 ARM 模板部署。我的意思是,我可以拆分申请(使用 ARM)和部署(使用 msdeploy 或 Powershell DSC),但我认为我只是做得不对,因为部署的某些部分(例如 Web 包)正在运行。 真的只有一半的东西受支持,但有一半还没有吗?
让我尝试回答我们的问题之一:
I'm trying to find a way to deploy two separate web projects into azure web app, but into two different virtual applications. I found a way to configure the virtual app paths on one WebDeploy, but I can't add a second project into the same WebSite node.
您将需要配置您的网站以识别您的虚拟目录。
Publish Multiple Projects to Different Locations on Azure Website
目前不支持使用 Azure 模板部署将 dacpac 部署到 Azure 数据库。