Home > OS >  How to delegate a subnet for Azure SQL Managed Instance in Pulumi C#
How to delegate a subnet for Azure SQL Managed Instance in Pulumi C#

Time:11-19

The Pulumi doc Create subnet with a delegation is wrong (it did not set SubnetArgs.Delegations property).

I tried to delegate subnet with following code:

//
// Managed Insatnce subnet must be delegated
//
var spokeManagedInstanceSubnet = new Subnet($"{SpokeVirtualNetwork}.{ManagedInstanceSubnet}", new AzureNative.Network.SubnetArgs {
    SubnetName = ManagedInstanceSubnet,
    AddressPrefix = spokeSubnetCidrs[ManagedInstanceSubnet],
    VirtualNetworkName = spokeVnet.Name,
    ResourceGroupName = mainResourceGroup.Name,
    Delegations = new InputList<DelegationArgs> { new DelegationArgs {
            ServiceName = "Microsoft.Sql/managedInstances",
            Type = "Microsoft.Network/virtualNetworks/subnets/delegations"
        }
    }
}, new CustomResourceOptions { DependsOn = { spokeVnet } });

But getting the following error:

error: Code="InvalidRequestFormat" Message="Cannot parse the request." Details=[]

How to delegate subnet for managed Instance ?

CodePudding user response:

I think what you're missing is the Name input in the DelegationArgs. So it should look something like

var spokeManagedInstanceSubnet = new Subnet($"{SpokeVirtualNetwork}.{ManagedInstanceSubnet}", new AzureNative.Network.SubnetArgs {
    SubnetName = ManagedInstanceSubnet,
    AddressPrefix = spokeSubnetCidrs[ManagedInstanceSubnet],
    VirtualNetworkName = spokeVnet.Name,
    ResourceGroupName = mainResourceGroup.Name,
    Delegations = new InputList<DelegationArgs> { new DelegationArgs {
            ServiceName = "Microsoft.Sql/managedInstances",
            Type = "Microsoft.Network/virtualNetworks/subnets/delegations",
            Name = "" // name of delegation. Doesn't have to be the name of the managed instance
        }
    }
}, new CustomResourceOptions { DependsOn = { spokeVnet } });

I also think you don't need Type in there either.

When I say "think", I should say that I've not done this with C# and managed instances, but I've done similar with Typescript and container groups.

That looked something like this:

const subnet = new network.Subnet(`subnet`, {
      resourceGroupName: resourceGroup.name,
      virtualNetworkName: vnet.name,
      addressPrefix: "10.0.0.0/24",
      serviceEndpoints: [{
        service: "Microsoft.Sql"
      }],
      delegations: [{
        serviceName: "Microsoft.Containerinstance/containerGroups",
        name: `snet-delegation-containergroups`
      }]
    }, { parent: vnet });
  • Related