我们在负载均衡器后面有两个虚拟机。我们希望在进行新部署时使其中一台虚拟机无法公开访问,以便我们可以在应用程序的新版本公开访问之前对其进行测试。当前计划是通过负载均衡器的服务标签更改网络安全组规则来阻止两个虚拟机中的一个:

有用。当我们将 VM1 的 NSG 规则从“允许”更改为“拒绝”时,只有 VM2 保持可公开访问。一旦我们验证新版本按预期工作,我们就会切换 VM2 的 NSG 规则并切换 VM1 的 NSG 规则,因此当我们更新其他虚拟机上的应用程序时,只能访问具有最新版本应用程序的虚拟机。
问题是 NSG 规则不会立即生效,可能需要 1-3 分钟才能使虚拟机无法访问/可访问。此外,如果我们同时为两个虚拟机切换 NSG,我们可能会遇到这样的情况:两个具有不同版本软件的虚拟机都是公开可用的,这可能会导致数据损坏或数据丢失,或者两个虚拟机都无法访问。因此,解决此问题的唯一方法是更改 VM2 的 NSG 规则,然后更改 VM1 的 NSG 规则,并让停机时间为 2-6 分钟。有更好的方法吗?
我希望能够部署一个复杂的ARM模板,该模板利用我的本地Visual Studio中的DSC扩展和嵌套模板.该示例设置为从GitHub下载资产:https: //github.com/Azure/azure-quickstart-templates/tree/master/active-directory-new-domain-ha-2-dc 我需要做哪些更改我可以将资产绑定到我的本地Visual Studio项目并使用它们而不是从GitHub下载它们?以下是负责下载的模板的精简版:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
...
"adPDCVMName": {
"type": "string",
"metadata": {
"description": "The computer name of the PDC"
},
"defaultValue": "adPDC"
},
"assetLocation": {
"type": "string",
"metadata": {
"description": "The location of resources such as templates and DSC modules that the script is dependent"
},
"defaultValue": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/active-directory-new-domain-ha-2-dc"
}
...
},
"variables": {
...
"adPDCModulesURL": "[concat(parameters('assetLocation'),'/DSC/CreateADPDC.ps1.zip')]",
"adPDCConfigurationFunction": "CreateADPDC.ps1\\CreateADPDC",
...
},
"resources": [
...
{
"name": "[parameters('adPDCVMName')]",
"type": "Microsoft.Compute/virtualMachines",
...
"resources": [ …Run Code Online (Sandbox Code Playgroud) 我们需要创建 Key Vault 并用机密填充(或生成)它,然后在下一个构建步骤中将它们作为 SQL 服务器 (PaaS) 的密码引用。最好的方法是什么?
azure-resource-manager azure-keyvault azure-devops azure-pipelines-build-task azure-pipelines
我们编写了一个脚本来并行执行 Azure PowerShell 命令。问题是当我们增加-ThrottleLimit大于 1 时,某些命令没有正确执行。脚本是:
# Writing IPs for whitelisting into file.
Add-Content -Path IPs.txt -Value ((Get-AzWebApp -ResourceGroupName "ResourceGroup1" -Name "WebApp1").OutboundIpAddresses).Split(",")
Add-Content -Path IPs.txt -Value ((Get-AzWebApp -ResourceGroupName "ResourceGroup1" -Name "WebApp1").PossibleOutboundIpAddresses).Split(",")
# Writing new file with inique IPs.
Get-Content IPs.txt | Sort-Object -Unique | Set-Content UniqueIPs.txt
# Referencing the file.
$IPsForWhitelisting = Get-Content UniqueIPs.txt
# Assigning priotiry number to each IP
$Count = 100
$List = foreach ($IP in $IPsForWhitelisting) {
$IP|Select @{l='IP';e={$_}},@{l='Count';e={$Count}}
$Count++
}
# Whitelisting all …Run Code Online (Sandbox Code Playgroud) 我想知道是否可以将 SQL 数据库部署到与 SQL Server 不同的资源组中?一个资源组中可以有多个 SQL 服务器。但是是否可以在不同的资源组中拥有SQL Server和相应的数据库呢?
我们有一些管道正在按计划进行备份。如果特定管道出现故障,我们希望收到 Discord 上的通知。
有一种方法可以接收电子邮件通知,也可以使用官方应用程序将 Slack 集成到 Azure DevOps 中。
但对于 Discord 有没有一个好的方法呢?
我已取消 Azure 订阅,但如何删除它?我确定我们不会使用这个,它是空的,而且我们有更多的订阅可以使用。
我们有一个 Azure DevOps Pipeline,它以 ZIP 包https://learn.microsoft.com/en-us/azure/app-service/deploy-run-package的形式运行我们的应用程序 ,而不是 ZIP Deploy。因此,我们无法通过 SFTP 进入我们的 Web 应用程序并进行更改。为什么 Pipeline 将我们的应用程序作为 ZIP 包运行,我们如何更改它?这是管道:
trigger: none
pool:
vmImage: 'windows-latest'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: 'Solution1.sln'
- task: VSBuild@1
inputs:
solution: '$(agent.builddirectory)\s\Folder\Project.csproj'
msbuildArgs: '/p:OutputPath="$(build.binariesDirectory)\Folder\bin" /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:SkipInvalidConfigurations=true /p:publishUrl="$(build.artifactStagingDirectory)\ProjectTempFolder"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: CopyFiles@2
inputs:
SourceFolder: '$(build.artifactStagingDirectory)\ProjectTempFolder'
Contents: |
**
TargetFolder: '$(build.ArtifactStagingDirectory)\ProjectArtifacts'
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(build.ArtifactStagingDirectory)\ProjectArtifacts'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(build.ArtifactStagingDirectory)\Project.zip'
replaceExistingArchive: true
- task: PublishBuildArtifacts@1
inputs: …Run Code Online (Sandbox Code Playgroud) 我在 Azure DevOps Pipeline 中有一个 PowerShell 脚本,它输出 Web 应用程序可以使用的可能 IP 地址列表:
$deploymentOutputs=(ConvertFrom-Json '$(deploymentOutputs)')
$possibleOutboundIpAddresses=$($deploymentOutputs.possibleOutboundIpAddresses.value)
Write-Host $possibleOutboundIpAddresses
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
23.89.272.2,52.165.130.123,40.222.30.223
Run Code Online (Sandbox Code Playgroud)
如何将 PowerShell 脚本转换为不输出逗号分隔值,而是将这些值输出为 Each-Object?
23.89.272.2
52.165.130.123
40.222.30.223
Run Code Online (Sandbox Code Playgroud)
理想情况下,我也希望能够在值之前添加自定义文本:
IP1 - 23.89.272.2
IP2 - 52.165.130.123
IP3 - 40.222.30.223
Run Code Online (Sandbox Code Playgroud)
编辑: 上面的例子是我想要做的事情的过度简化。我真正需要做的是为该输出中的每个条目创建 Azure DevOps 变量。我实际上需要根据 IP 数量和 IP 值执行此 PowerShell 命令:
Write-Host "##vso[task.setvariable variable=$IP1;]23.89.272.2"
Write-Host "##vso[task.setvariable variable=$IP2;]52.165.130.123"
Write-Host "##vso[task.setvariable variable=$IP3;]40.222.30.223"
Run Code Online (Sandbox Code Playgroud)