#c# #azure-application-gateway #pulumi
Вопрос:
Когда я пытаюсь предоставить экземпляру шлюза приложений Azure следующий код, он заканчивается ошибкой, в которой говорится, что внешний порт appgwfp80
не найден.
var appGWName = "agw-pt-dev-uks-001";
var applicationGateway = new ApplicationGateway(appGWName, new ApplicationGatewayArgs
{
ResourceGroupName = resourceGroup.Name,
BackendAddressPools = new ApplicationGatewayBackendAddressPoolArgs[]
{
new ()
{
Name = "appgwpool",
BackendAddresses = new ApplicationGatewayBackendAddressArgs[] { new () { Fqdn = appService.DefaultSiteHostname }}
}
},
BackendHttpSettingsCollection = ..,
GatewayIPConfigurations = ..,
FrontendPorts =
{
new ApplicationGatewayFrontendPortArgs
{
Name = "appgwfp80",
Port = 80,
},
},
FrontendIPConfigurations = ..,
HttpListeners = new ApplicationGatewayHttpListenerArgs[]
{
new ()
{
Name = "appgwhl",
FrontendIPConfiguration = new SubResourceArgs
{
Id = resourceGroup.Id.Apply(id => $"{id}/providers/Microsoft.Network/applicationGateways/{appGWName}/frontendIPConfigurations/publicIp")
},
FrontendPort = new SubResourceArgs
{
Id = resourceGroup.Id.Apply(id => $"{id}/providers/Microsoft.Network/applicationGateways/{appGWName}/frontendPorts/appgwfp80")
}
}
},
RequestRoutingRules = ..,
Sku = new ApplicationGatewaySkuArgs
{
Capacity = 1,
Name = "Standard_v2",
Tier = "Standard_v2",
},
});
Насколько я понимаю, это связано с тем, что, когда Pulumi предоставляет ресурсы, он добавляет суффикс в конец для этих целей, и потому что я ссылаюсь на идентификатор внешнего порта resourceGroup.Id.Apply(id => $"{id}/providers/Microsoft.Network/applicationGateways/{appGWName}/frontendPorts/appgwfp80")
, где я передаю agw-pt-dev-uks-001
, поскольку appGWName
его невозможно найти, потому что имя шлюза приложений было установлено примерно так agw-pt-dev-uks-001d7c2fa0
.
Проблема исчезает, когда я явно задаю ApplicationGatewayName = "agw-pt-dev-uks-001"
.
Я хотел бы следовать одному соглашению об именовании для всех моих ресурсов, но теперь Шлюз приложений предоставляется без суффикса в имени, когда у других ресурсов есть этот суффикс.
Есть ли какой-либо другой способ ссылаться на идентификатор подресурса, чтобы, например, я мог каким-то образом получить имя шлюза приложений, сгенерированное Пулуми? Или мне просто нужно передать фиксированное имя для всех моих ресурсов и просто пометить их, DeleteBeforeReplace
чтобы в случае изменений Pulumi мог применить изменения, удалив подготовленные ресурсы?
Спасибо за все ваши предложения.
Ответ №1:
На данный момент нет другого способа создать идентификатор, и вам нужно установить ApplicationGatewayName
его явно. Если вам нужен случайный суффикс, вы можете сгенерировать его самостоятельно
//using Pulumi.Random;
var suffix = new RandomString("name", new RandomStringArgs
{
Length = 8,
Special = false,
Upper = false
});
var resourceName = Output.Format($"appgw-{suffix.Result}");
var applicationGateway = new ApplicationGateway(appGWName, new ApplicationGatewayArgs
{
ApplicationGatewayName = resourceName,
// ... use the same technique to build IDs
});
В этом выпуске отслеживается потенциальное улучшение.
Комментарии:
1. Спасибо вам за ваш ответ.