使用Powershell和AzureResourceManager模式创建SQL Azure服务器

时间:2015-03-20 16:33:18

标签: powershell azure azure-sql-database azure-powershell

似乎您只能使用AzureServiceManagement模式通过Azure上的Powershell创建SQL Server。这将为我创建一个名为" Default-SQL-WestUS"的默认资源组的新服务器。但是,如何将其置于现有资源组中,以便我可以将其与其他相关资源一起管理?

当我尝试使用AzureResourceManagement时,Cmndlet会对-Name参数进行阻塞:

New-AzureResource -Name "testName" -Location "West US" -ResourceGroupName "TestGroupName" -ResourceType Microsoft.Sql/servers -ApiVersion "2014-04-01"

当我运行以上内容时,我得到:

  

''是无效的名称,因为它包含NULL字符或无效的unicode字符。

我还删除了-Name参数(认为Azure应该为我创建此名称,就像使用ServiceManager一样):

New-AzureResource -Location "West US" -ResourceGroupName "TestGroupName" -ResourceType Microsoft.Sql/servers -ApiVersion "2014-04-01"

但这只是提示我输入一个名字,我也得到同样的错误。我也试过为名称使用null值并获得以下内容:

  

无法验证参数'名称'的参数。参数为null或空。提供一个非null或空的参数,然后尝试   命令再次。

是否有更好的方法在Azure中的ResourceGroup中创建新的SQL Server?

提前致谢!

- 更新: -

您似乎 必须 使用AzureServiceManagement Mode创建SqlServer。您无法将SqlServer链接到资源组(将来会出现这种情况吗?)

应该能够将SQL数据库添加到ResourceManager。所以我切换到ServiceManagement模式,创建了一个SqlServer,切换回ResourceManagement模式,创建了一个资源组,并且我已经更新了我的数据库创建脚本,以便链接到服务器和资源组,如下所示:

New-AzureResource –Name "TestDBName" –ResourceType Microsoft.Sql/servers/databases –ResourceGroup "TestGroupName" –Location "West US" -ApiVersion "2014-04-01" –ParentResource servers/[servername]

我在网上的许多例子中都看到了正确的方法,但由于某种原因,我现在只是得到一个一般性的错误,没有迹象表明出了什么问题

  

New-AzureResource ::处理此请求时出错。

我希望能够在Azure上将SqlServer创建到现有的ResourceGroup中,然后通过PowerShell将数据库添加到服务器。我会继续在我的脚本上尝试不同的变化来使其工作,但我觉得好像我已经撞墙了。非常感谢(和积分)给任何可以提供帮助的人!

2 个答案:

答案 0 :(得分:2)

以下是有关如何使用PS cmdlet创建SQL Server资源的工作示例。问题是您缺少一些强制性参数,例如服务器和管理员凭据。等等。

New-AzureResource -Name server1 -ResourceGroupName "Default-SQL-WestUS" -Location "West US" -ResourceType "Mirosoft.Sql/servers" -ApiVersion 2014-04-01 -PropertyObject @{administratorLogin="admin"; administratorLoginPassword="Passw@rd01"; version="12.0"}

您还可以将模板与New-AzureResourceGroup cmdlet一起使用来创建服务器。见下面的模板。

{
  "$schema": "http://schemas.management.azure.com/deploymentTemplate?api-version=2014-04-01-preview",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "administratorLogin": {
      "type": "string"
    },
    "administratorLoginPassword": {
      "type": "securestring"
    },
    "serverLocation": {
      "type": "string"
    },
    "serverName": {
        "type": "string"
    }
  },
  "resources": [
    {
      "apiVersion": "2014-04-01-preview",
      "location": "[parameters('serverLocation')]",
      "name": "[parameters('serverName')]",
      "properties": {
        "administratorLogin": "[parameters('administratorLogin')]",
        "administratorLoginPassword": "[parameters('administratorLoginPassword')]",
        "version": "12.0"

      },
      "resources": [
        {
          "apiVersion": "2014-04-01-preview",
          "dependsOn": [
            "[concat('Microsoft.Sql/servers/', parameters('serverName'))]"
          ],
          "location": "[parameters('serverLocation')]",
          "name": "AllowAllWindowsAzureIps",
          "properties": {
            "endIpAddress": "131.107.255.255",
            "startIpAddress": "131.107.0.0"
          },
          "type": "firewallrules"
        }
      ],
      "type": "Microsoft.Sql/servers"
    }
  ]
}

答案 1 :(得分:1)

如果您使用Azure PowerShell 1.0或更高版本,并且安装了AzureRM.Sql模块,则可以使用New-AzureRmSqlServer来实现此目的。

有关详细信息,请参阅official Azure docs

# Login to your Azure account
Add-AzureRmAccount

# Select an appropriate subscription
Select-AzureRmSubscription -SubscriptionId 4cac86b0-1e56-bbbb-aaaa-000000000000

# Create a new resource group and put a SQL server in it
# It will prompt you for the credentials that you want to set
# for the SQL administrator account
New-AzureRmResourceGroup -Name "yourresourcegroup" -Location "East US" | `
New-AzureRmSqlServer -ServerName "yoursqlservername" -Location "East US" `
-ServerVersion "12.0"

请注意,这不会配置任何防火墙规则或数据库。您需要使用New-AzureRmSqlServerFirewallRuleNew-AzureRmSqlDatabase来执行此操作。