Как получить частный IP-адрес виртуальной машины из масштабируемого набора виртуальных машин с помощью шаблона ARM?

Я создал шаблон ARM с масштабируемым набором виртуальных машин. Теперь я застрял в разработке шаблона ARM, потому что не мог получить частные IP-адреса виртуальной машины, созданной внутри масштабируемого набора. Частные IP-адреса необходимы для обновления семян Cassandra с использованием сценариев расширения.

{
            "type": "Microsoft.Compute/virtualMachineScaleSets",
            "apiVersion": "2020-06-01",
            "name": "[parameters('vmName')]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]",
                "Microsoft.Compute/images/myCustomImage"
            ],
            "identity": {
                "type": "SystemAssigned"
            },
            "sku": {
                "name": "[parameters('vmSku')]",
                "tier": "Standard",
                "capacity": "[parameters('instanceCount')]"
            },
            "properties": {
                "overprovision": "false",
                "upgradePolicy": {
                    "mode": "Manual"
                },
                "virtualMachineProfile": {
                    "storageProfile": {
                      "imageReference": {
                        "id": "[resourceId('Microsoft.Compute/images', 'myCustomImage')]"
                      }
                    },
                    "osProfile": {
                        "computerNamePrefix": "[parameters('vmName')]",
                        "customdata": "1",
                        "adminUsername": "centos",
                        "linuxConfiguration": {
                            "disablePasswordAuthentication": true,
                            "ssh": {
                                "publicKeys": [
                                    {
                                        "path": "/home/centos/.ssh/authorized_keys",
                                        "keyData": "xxxx"
                                    }
                                ]
                            }
                        }
                    },
                    "networkProfile": {
                        "networkInterfaceConfigurations": [
                            {
                                "name": "[parameters('nicName')]",
                                "properties": {
                                    "primary": true,
                                    "ipConfigurations": [
                                        {
                                            "name": "[variables('ipConfigName')]",
                                            "properties": {
                                                "subnet": {
                                                    "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), 'cassandra')]"
                                                }
                                            }
                                        }
                                    ]
                                }
                            }
                        ]
                    }
                }
            }
        }

Как получить частные IP-адреса виртуальных машин, созданных в масштабируемом наборе?


person Boney Jacob    schedule 11.12.2020    source источник
comment
Есть еще новости по этому вопросу? Решает ли это вашу проблему? Почему бы не дать ответа и не принять его?   -  person Charles Xu    schedule 23.12.2020


Ответы (1)


Вы можете использовать функцию _ 1_, чтобы получить ресурс NIC экземпляров VMSS. И идентификатор ресурса сетевых адаптеров экземпляра выглядит следующим образом:

/subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmssName}/virtualMachines/{instanceId}/networkInterfaces/{nicName}

Таким образом, вы можете установить переменные для каждого идентификатора экземпляра, а затем получить частные IP-адреса, часть шаблона выглядит так:

"variables": {
    "instanceNic-0": "[concat('/subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmssName}/virtualMachines/0/networkInterfaces/', parameters('nicName'))]" 
},
"outputs": {
    "instanceNic-0-IP": {
        "type": "string",
        "value": "[reference(variables('instanceNic-0'), '2016-09-01').ipConfigurations[0].properties.privateIPAddress]"
    }
}
person Charles Xu    schedule 17.12.2020