Azure SQL 服务器是否可以在创建后的一段时间内不可用/无法访问?
Can an Azure SQL server be unavailable / unreachable for a period of time after creation?
我正在使用托管代理通过 Azure Devops 管道中的 terraform 任务创建 Azure SQL 服务器和数据库。
资源创建没有问题。
但是,我阶段的下一个作业尝试使用 Azure SQL Database Deployment task 针对新创建的数据库 运行 一个 db_init.sql 脚本。此任务将间歇性地失败并出现以下错误:
Invoke-Sqlcmd -ServerInstance "[redacted].database.windows.net" -Database "[redacted]" -Username "[redacted]" -Password ****** -Inputfile "C:\Users\VssAdministrator\AppData\Local\Temp\tmp6F48.tmp" -ConnectionTimeout 120
##[error]System.Management.Automation.RuntimeException: No resource found with serverName [redacted], serverType Microsoft.Sql/servers
in subscription [redacted]. Specify the correct serverName/serverType and
try again.Check out how to troubleshoot failures at
https://aka.ms/sqlazuredeployreadme#troubleshooting-
上面的故障排除 link 没有用。
我也找到了这个 但那里的答案不适用。
管道设置如下:
stages:
- stage: rg
displayName: Create Resource Group
...
- stage: db
dependsOn:
- rg
displayName: Create DB Stage
jobs:
- job: createDB
displayName: 'Create Database'
steps:
...
- task: TerraformTaskV1@0
name: terraformApply
displayName: Terraform Apply
inputs: ...
- task: PowerShell@2
displayName: Read terraform outputs
name: terraformOutput
inputs:
pwsh: true
targetType: 'inline'
script: |
$terraformOutput = Get-Content "$(terraformApply.jsonOutputVariablesPath)" | ConvertFrom-Json
$terraformOutput | Get-Member -MemberType NoteProperty | % { $o = $terraformOutput.($_.Name); Write-Host "##vso[task.setvariable variable=$($_.Name);isoutput=true;issecret=$($o.sensitive)]$($o.value)" }
failOnStderr: true
showWarnings: true
- job:
displayName: Initialise DB
dependsOn: createDB
variables:
serverFQDN: $[ dependencies.createDB.outputs['terraformOutput.sql_server_fqdn'] ]
dbName: $[ dependencies.createDB.outputs['terraformOutput.sql_db_name'] ]
serverName: $[ dependencies.createDB.outputs['terraformOutput.server_name'] ]
pool:
vmImage: 'windows-latest'
steps:
- task: SqlAzureDacpacDeployment@1
displayName: Initialise DB
inputs:
azureSubscription: '[azure subscription id]'
AuthenticationType: 'server'
ServerName: '$(serverFQDN)'
DatabaseName: '$(dbName)'
SqlUsername: '[sql admin username]'
SqlPassword: '[sql admin password]'
deployType: 'SqlTask'
SqlFile: '$(System.DefaultWorkingDirectory)/[path-to]/db_init.sql'
IpDetectionMethod: 'AutoDetect'
此问题很少见,重试失败的步骤后管道通常会成功。但是,我偶尔会看到 'Initialise DB' 步骤在几分钟内连续重试 3 或 4 次失败。
我还测试过在尝试初始化之前使用 Azure CLI 任务等待数据库服务器(测试 --created 和 --exists 标志),但这似乎没有帮助。
- task: AzureCLI@2
displayName: 'Wait for DB to be ready'
inputs:
azureSubscription: '$(azure-subscription-id)'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
# wait up to 5 minutes for the db server to be available. check every 10 seconds
az sql server wait --exists --interval 10 --timeout 300 --resource-group [rg name] --name $(serverName)
failOnStderr: true
编辑 2021-03-05:在更深入的调查中,这个问题似乎是由管道任务使用的 Azure API 调用的问题引起的。
为了设置防火墙规则,该任务尝试检索目标 Azure Sql 服务器的 ID。为此,它调用 GET https://management.azure.com//subscriptions/[subscription id]/resources?api-version=2014-04-01
并循环响应以查找具有匹配名称的 Sql 服务器资源。
在某些情况下,我看到此操作在创建数据库服务器后超过 30 分钟失败,而我已经能够在 Azure 门户中查询它。
很高兴看到您找到了根本原因!我们可以向您学习新的编辑:
编辑 2021-03-05:
- 经过更深入的调查,这个问题似乎是由一个问题引起的
使用管道任务使用的 Azure API 调用。为了设置
防火墙规则,任务尝试检索目标的 ID
Azure Sql 服务器。为此,它调用
GET https://management.azure.com//subscriptions/[subscription id]/resources?api-version=2014-04-01
并循环响应
查找具有匹配名称的 Sql 服务器资源。在某些场合
我已经看到此操作在数据库服务器启动后超过 30 分钟失败
创建,而我已经能够在 Azure 门户中查询它。
我帮你 post 作为答案,这可能对其他社区成员有益。谢谢分享!
我正在使用托管代理通过 Azure Devops 管道中的 terraform 任务创建 Azure SQL 服务器和数据库。
资源创建没有问题。
但是,我阶段的下一个作业尝试使用 Azure SQL Database Deployment task 针对新创建的数据库 运行 一个 db_init.sql 脚本。此任务将间歇性地失败并出现以下错误:
Invoke-Sqlcmd -ServerInstance "[redacted].database.windows.net" -Database "[redacted]" -Username "[redacted]" -Password ****** -Inputfile "C:\Users\VssAdministrator\AppData\Local\Temp\tmp6F48.tmp" -ConnectionTimeout 120
##[error]System.Management.Automation.RuntimeException: No resource found with serverName [redacted], serverType Microsoft.Sql/servers in subscription [redacted]. Specify the correct serverName/serverType and try again.Check out how to troubleshoot failures at https://aka.ms/sqlazuredeployreadme#troubleshooting-
上面的故障排除 link 没有用。
我也找到了这个
管道设置如下:
stages:
- stage: rg
displayName: Create Resource Group
...
- stage: db
dependsOn:
- rg
displayName: Create DB Stage
jobs:
- job: createDB
displayName: 'Create Database'
steps:
...
- task: TerraformTaskV1@0
name: terraformApply
displayName: Terraform Apply
inputs: ...
- task: PowerShell@2
displayName: Read terraform outputs
name: terraformOutput
inputs:
pwsh: true
targetType: 'inline'
script: |
$terraformOutput = Get-Content "$(terraformApply.jsonOutputVariablesPath)" | ConvertFrom-Json
$terraformOutput | Get-Member -MemberType NoteProperty | % { $o = $terraformOutput.($_.Name); Write-Host "##vso[task.setvariable variable=$($_.Name);isoutput=true;issecret=$($o.sensitive)]$($o.value)" }
failOnStderr: true
showWarnings: true
- job:
displayName: Initialise DB
dependsOn: createDB
variables:
serverFQDN: $[ dependencies.createDB.outputs['terraformOutput.sql_server_fqdn'] ]
dbName: $[ dependencies.createDB.outputs['terraformOutput.sql_db_name'] ]
serverName: $[ dependencies.createDB.outputs['terraformOutput.server_name'] ]
pool:
vmImage: 'windows-latest'
steps:
- task: SqlAzureDacpacDeployment@1
displayName: Initialise DB
inputs:
azureSubscription: '[azure subscription id]'
AuthenticationType: 'server'
ServerName: '$(serverFQDN)'
DatabaseName: '$(dbName)'
SqlUsername: '[sql admin username]'
SqlPassword: '[sql admin password]'
deployType: 'SqlTask'
SqlFile: '$(System.DefaultWorkingDirectory)/[path-to]/db_init.sql'
IpDetectionMethod: 'AutoDetect'
此问题很少见,重试失败的步骤后管道通常会成功。但是,我偶尔会看到 'Initialise DB' 步骤在几分钟内连续重试 3 或 4 次失败。
我还测试过在尝试初始化之前使用 Azure CLI 任务等待数据库服务器(测试 --created 和 --exists 标志),但这似乎没有帮助。
- task: AzureCLI@2
displayName: 'Wait for DB to be ready'
inputs:
azureSubscription: '$(azure-subscription-id)'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
# wait up to 5 minutes for the db server to be available. check every 10 seconds
az sql server wait --exists --interval 10 --timeout 300 --resource-group [rg name] --name $(serverName)
failOnStderr: true
编辑 2021-03-05:在更深入的调查中,这个问题似乎是由管道任务使用的 Azure API 调用的问题引起的。
为了设置防火墙规则,该任务尝试检索目标 Azure Sql 服务器的 ID。为此,它调用 GET https://management.azure.com//subscriptions/[subscription id]/resources?api-version=2014-04-01
并循环响应以查找具有匹配名称的 Sql 服务器资源。
在某些情况下,我看到此操作在创建数据库服务器后超过 30 分钟失败,而我已经能够在 Azure 门户中查询它。
很高兴看到您找到了根本原因!我们可以向您学习新的编辑:
编辑 2021-03-05:
- 经过更深入的调查,这个问题似乎是由一个问题引起的
使用管道任务使用的 Azure API 调用。为了设置
防火墙规则,任务尝试检索目标的 ID
Azure Sql 服务器。为此,它调用
GET https://management.azure.com//subscriptions/[subscription id]/resources?api-version=2014-04-01
并循环响应 查找具有匹配名称的 Sql 服务器资源。在某些场合 我已经看到此操作在数据库服务器启动后超过 30 分钟失败 创建,而我已经能够在 Azure 门户中查询它。
我帮你 post 作为答案,这可能对其他社区成员有益。谢谢分享!