Azure WebApp - 单个请求中的多个自定义域
Azure WebApp - Multiple Custom Domains in single request
我正在尝试将自定义域批量上传到 Azure WebApps(特别是部署槽)。我目前使用 Azure CLI 进行循环,但它会增加 15-20 分钟的 CICD 过程。
我也尝试过使用 ARM 模板,但它在批量上传期间报告“冲突”。它需要一个条件或依赖于以前的主机名,这意味着它仍在一个一个地配置域。
有谁知道批量配置的方法吗?
Powershell 和 Azure CLI
#Set Host Names and SSL
$WebApp_HostNames = Import-Csv "$(ConfigFiles_Path)$WebApp-Hostnames.csv"
if ($null -ne $WebApp_HostNames) {
foreach ($HostName in $WebApp_HostNames) {
az webapp config hostname add --hostname $HostName.Name --resource-group "$(ResourceGroup)" --webapp-name "$WebApp" --slot "$WebApp$(WebApp_Slot_Suffix)"
az webapp config ssl bind --certificate-thumbprint $HostName.Thumbprint --ssl-type SNI --resource-group "$(ResourceGroup)" --name "$WebApp" --slot "$WebApp$(WebApp_Slot_Suffix)"
}
}
编辑:知道了!会把过程写出来,并在此提供答案,以供日后参考
TL;DR
我在这里包含了整个 Powershell 脚本,包括获取您的身份验证令牌和推送 json 配置。您不需要批量上传任何其他内容。
希望对您有所帮助
# Get auth token from existing Context
$currentAzureContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azProfile)
$token = $profileClient.AcquireAccessToken($currentAzureContext.Tenant.TenantId)
# Authorisation Header
$authHeader = @{
'Content-Type' = 'application/json'
'Authorization' = 'Bearer ' + ($token.AccessToken)
}
# Request URL
$url = "https://management.azure.com/subscriptions/{SubscriptionID}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Web/sites/{WebAppName}/slots/{WebAppSlotName}?api-version=2018-11-01"
# JSON body
$body = '
{
"id":"/subscriptions/{SubscriptionID}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Web/sites/{WebAppName}/slots/{WebAppSlotName}",
"kind":"app",
"location":"Australia East",
"name":"{WebAppName} or {WebAppSlotName}",
"type":"Microsoft.Web/sites/slots", or "Microsoft.Web/sites",
"properties":{
"hostNameSslStates":[
{
"name":"sub1.domain.com",
"sslState":"SniEnabled",
"thumbprint":"IUAHSIUHASD78ASDIUABFKASF79ASUASD8ASFHOANKSL",
"toUpdate":true,
"hostType":"Standard"
},
{
"name":"sub2.domain.com",
"sslState":"SniEnabled",
"thumbprint":"FHISGF8A7SFG9SUGBSA7G9ASHIAOSHDF08ASHDF08AS",
"toUpdate":true,
"hostType":"Standard"
}
],
"hostNames":[
"sub1.domain.com",
"sub2.domain.com",
"{Default WebApp Domain}"
]
}
}
'
# Push to Azure
Invoke-RestMethod -Uri $url -Body $body -Method PUT -Headers $authHeader
方法
最后我只是按了 F12 在浏览器开发者工具的网络选项卡中捕获流量。
在门户中单击“添加绑定”时,有一个 PUT
请求具有复制所需的有效负载。我发现该请求包含用于批量上传的所有自定义域和 SSL 绑定,而不仅仅是更改。这里唯一的技巧是将所有域的 toUpdate
属性 设置为 true
。我删除了任何 null
和 notConfigured
值以使其更整洁。
我的下一步是获取我的主机名和证书指纹,并在将更改推送到 Azure 之前动态构建正文。
我正在尝试将自定义域批量上传到 Azure WebApps(特别是部署槽)。我目前使用 Azure CLI 进行循环,但它会增加 15-20 分钟的 CICD 过程。
我也尝试过使用 ARM 模板,但它在批量上传期间报告“冲突”。它需要一个条件或依赖于以前的主机名,这意味着它仍在一个一个地配置域。
有谁知道批量配置的方法吗?
Powershell 和 Azure CLI
#Set Host Names and SSL
$WebApp_HostNames = Import-Csv "$(ConfigFiles_Path)$WebApp-Hostnames.csv"
if ($null -ne $WebApp_HostNames) {
foreach ($HostName in $WebApp_HostNames) {
az webapp config hostname add --hostname $HostName.Name --resource-group "$(ResourceGroup)" --webapp-name "$WebApp" --slot "$WebApp$(WebApp_Slot_Suffix)"
az webapp config ssl bind --certificate-thumbprint $HostName.Thumbprint --ssl-type SNI --resource-group "$(ResourceGroup)" --name "$WebApp" --slot "$WebApp$(WebApp_Slot_Suffix)"
}
}
编辑:知道了!会把过程写出来,并在此提供答案,以供日后参考
TL;DR
我在这里包含了整个 Powershell 脚本,包括获取您的身份验证令牌和推送 json 配置。您不需要批量上传任何其他内容。
希望对您有所帮助
# Get auth token from existing Context
$currentAzureContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azProfile)
$token = $profileClient.AcquireAccessToken($currentAzureContext.Tenant.TenantId)
# Authorisation Header
$authHeader = @{
'Content-Type' = 'application/json'
'Authorization' = 'Bearer ' + ($token.AccessToken)
}
# Request URL
$url = "https://management.azure.com/subscriptions/{SubscriptionID}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Web/sites/{WebAppName}/slots/{WebAppSlotName}?api-version=2018-11-01"
# JSON body
$body = '
{
"id":"/subscriptions/{SubscriptionID}/resourceGroups/{ResourceGroupName}/providers/Microsoft.Web/sites/{WebAppName}/slots/{WebAppSlotName}",
"kind":"app",
"location":"Australia East",
"name":"{WebAppName} or {WebAppSlotName}",
"type":"Microsoft.Web/sites/slots", or "Microsoft.Web/sites",
"properties":{
"hostNameSslStates":[
{
"name":"sub1.domain.com",
"sslState":"SniEnabled",
"thumbprint":"IUAHSIUHASD78ASDIUABFKASF79ASUASD8ASFHOANKSL",
"toUpdate":true,
"hostType":"Standard"
},
{
"name":"sub2.domain.com",
"sslState":"SniEnabled",
"thumbprint":"FHISGF8A7SFG9SUGBSA7G9ASHIAOSHDF08ASHDF08AS",
"toUpdate":true,
"hostType":"Standard"
}
],
"hostNames":[
"sub1.domain.com",
"sub2.domain.com",
"{Default WebApp Domain}"
]
}
}
'
# Push to Azure
Invoke-RestMethod -Uri $url -Body $body -Method PUT -Headers $authHeader
方法
最后我只是按了 F12 在浏览器开发者工具的网络选项卡中捕获流量。
在门户中单击“添加绑定”时,有一个 PUT
请求具有复制所需的有效负载。我发现该请求包含用于批量上传的所有自定义域和 SSL 绑定,而不仅仅是更改。这里唯一的技巧是将所有域的 toUpdate
属性 设置为 true
。我删除了任何 null
和 notConfigured
值以使其更整洁。
我的下一步是获取我的主机名和证书指纹,并在将更改推送到 Azure 之前动态构建正文。