Как ссылаться на дополнительный ресурс при подготовке экземпляра шлюза приложений Azure

#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. Спасибо вам за ваш ответ.