App Layering

Startvorlagen

Dieser Abschnitt enthält einen vollständigen Satz von ARM-Vorlagen, die mit dem Azure Deployments-Connector verwendet werden können. Diese Vorlagen können unverändert verwendet oder an spezifische Anforderungen angepasst werden.

Jede Ressource, die mit diesen Vorlagen erstellt wurde, ist mit demselben Satz von Tags versehen. Diese Tags enthalten nützliche Informationen über den Kontext der Bereitstellung, z. B. den Namen des Benutzers, der die Aufgabe gestartet hat, und den Kommentar, den er eingegeben hat.

Die Vorlagen verwenden in der Connector-Konfigurationin großem Umfang benutzerdefinierte Daten. Benutzerdefinierte Daten ermöglichen es dem Benutzer, allgemeine Parameter wie location, vmSizegeneration, und andere Parameter zu definieren, ohne die Vorlage ändern zu müssen.

In der folgenden Tabelle sind alle benutzerdefinierten Dateneigenschaften aufgeführt, die von diesen Vorlagen verwendet werden. Es gibt an, welche Vorlagen für jede Eigenschaft gelten und ob die Eigenschaft erforderlich ist.

R = Erforderlich, O = Optional, - = Nicht verwendet

Name Beschreibung Standard Cachedatenträger Bootimage Maschine Layerimage
location Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe. O O O O
gallery Der Name der Compute Gallery, in der Images erstellt werden sollen. Die Gallery muss in der Zielressourcengruppe sein. - - R - R
storageSku Der Name der SKU, die für verwaltete Datenträger verwendet werden soll. StandardSSD_LRS O - O -
generation Die Generierung der virtuellen Maschine. V2 - O O O
trustedLaunch true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false O O O O
diskAccessId Die Ressourcen-ID des Datenträgerzugriffs, der beim Hochladen des Datenträgerinhalts verwendet wurde. Wenn dies angegeben ist, wird der Datenträger mit deaktiviertem Zugriff auf das öffentliche Netzwerk erstellt. Weitere Informationen finden Sie in der Azure-Dokumentation. null O - - -
vmSize Die Größe der zu erstellenden VM. Standard_D2s_v3 - - O -
licenseType Der on-premises Lizenztyp, der auf erstellte virtuelle Maschinen angewendet werden soll. null - - O -
subnetId Die Ressourcen-ID des Subnetzes, an das die Netzwerkkarte der VM angeschlossen werden soll. - - - R -
replicaCount Die Standardanzahl von Replikaten pro Region der Galerie-Imageversion 1 - - - O
targetRegions Die Zielregionen der Galerie-Imageversion. Dies wird als Array von Regionsnamenzeichenfolgen und/oder targetRegion-Objekten angegeben. Das Array muss die Region des Quelldatenträgers enthalten (die durch die benutzerdefinierten Daten für location angegeben wird). Die durch die benutzerdefinierten Daten in location angegebene Region - - - O
publishAs Die Art der Ressource(n), die als Images veröffentlicht werden sollen. Als Array oder Zeichenfolge angegeben, bestehend aus ‘galleryImage’ und/oder ‘managedDisk’ galleryImage - - - O

Beispiel für benutzerdefinierte Daten:

{
    "gallery": "MyGallery",
    "subnetId": "/subscriptions/ab3d1259-f5a9-407f-bbdd-bfd5701e2e94/resourceGroups/PDGTPB/providers/Microsoft.Network/virtualNetworks/MyVnet/subnets/mysubnet"
}
<!--NeedCopy-->

Ein weiteres Beispiel für benutzerdefinierte Daten:

{
    "location": "eastus",
    "gallery": "MyGallery",
    "storageSku": "Premium_LRS",
    "generation": "V1",
    "diskAccessId": "/subscriptions/ab3d1259-f5a9-407f-bbdd-bfd5701e2e94/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/diskAccesses/MyDiskAccess",
    "vmSize": "Standard_D4s_v3",
    "subnetId": "/subscriptions/ab3d1259-f5a9-407f-bbdd-bfd5701e2e94/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyVnet/subnets/mysubnet"
}
<!--NeedCopy-->

Cachedatenträger

Erstellt einen verwalteten Datenträger.

Benutzerdefinierte Daten des Cachedatenträgers

Name Beschreibung Standard Erforderlich
location Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe no
storageSku Der Name der zu verwendenden SKU. StandardSSD_LRS no
trustedLaunch true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false no
diskAccessId Die Ressourcen-ID des Datenträgerzugriffs, der beim Hochladen des Datenträgerinhalts verwendet werden soll. Wenn angegeben, wird der Datenträger erstellt und der Zugriff auf das öffentliche Netzwerk dabei deaktiviert. null no

Vorlage für Cachedatenträger

  • 1.1.0.0 - Unterstützung für Trusted Launch hinzugefügt
  • 1.0.0.0 - Erste Version
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.1.0.0",
    "parameters": {
        "al": {
            "type": "object"
        }
    },
    "variables": {
        "custom": "[parameters('al').context.config.custom]",
        "location": "[if(contains(variables('custom'), 'location'), variables('custom').location, resourceGroup().location)]",
        "name": "[concat(parameters('al').context.item.name,'-', parameters('al').context.item.id)]",
        "tags": {
            "alTaskId": "[parameters('al').context.taskId]",
            "alUser": "[parameters('al').context.user]",
            "alComment": "[parameters('al').context.comment]",
            "alItemType": "[parameters('al').context.item.type]",
            "alItemId": "[parameters('al').context.item.id]",
            "alItemName": "[parameters('al').context.item.name]",
            "alItemVersion": "[parameters('al').context.item.version.name]",
            "alConfigId": "[parameters('al').context.config.id]",
            "alConfigName": "[parameters('al').context.config.name]"
        },
        "hasDiskAccess": "[contains(variables('custom'), 'diskAccessId')]",
        "storageSku": "[if(contains(variables('custom'), 'storageSku'), variables('custom').storageSku, 'StandardSSD_LRS')]",
        "trustedLaunch": "[if(contains(variables('custom'), 'trustedLaunch'), variables('custom').trustedLaunch, false())]"
    },
    "resources": [
        {
            "type": "Microsoft.Compute/disks",
            "apiVersion": "2021-08-01",
            "name": "[variables('name')]",
            "location": "[variables('location')]",
            "tags": "[variables('tags')]",
            "sku": {
                "name": "[variables('storageSku')]"
            },
            "properties": {
                "creationData": {
                    "createOption": "Upload",
                    "uploadSizeBytes": "[parameters('al').input.uploadSize]"
                },
                "incremental": "false",
                "diskAccessId": "[if(variables('hasDiskAccess'), variables('custom').diskAccessId, null())]",
                "networkAccessPolicy": "[if(variables('hasDiskAccess'), 'AllowPrivate', 'AllowAll')]",
                "publicNetworkAccess": "[if(variables('hasDiskAccess'), 'Disabled', 'Enabled')]",
                "securityProfile": "[if(variables('trustedLaunch'), createObject('securityType', 'TrustedLaunch'), null())]"
            }
        }
    ]
}
<!--NeedCopy-->

Bootimage

Die Bootimage-Bereitstellung erstellt ein Gallery-Image und eine Imageversion in der Gallery, die in den benutzerdefinierten Daten angegeben sind. Es gibt die ID der erstellten Compute Gallery-Imageversion aus, die von der Machinenvorlage verwendet werden kann.

Benutzerdefinierte Bootimage-Daten

Name Beschreibung Standard Erforderlich
location Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe. no
generation Die Generation der virtuellen Maschine, die für den Datenträger verwendet wird. V2 no
trustedLaunch true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false no
gallery Der Name der Compute Gallery, in der das Image erstellt werden soll. Die Gallery muss in der Zielressourcengruppe sein. - Ja

Boot-Image-Vorlage

  • 1.1.0.0 - Unterstützung für Trusted Launch hinzugefügt
  • 1.0.0.0 - Erste Version
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.1.0.0",
    "parameters": {
        "al": {
            "type": "object"
        }
    },
    "variables": {
        "custom": "[parameters('al').context.config.custom]",
        "location": "[if(contains(variables('custom'), 'location'), variables('custom').location, resourceGroup().location)]",
        "tags": {
            "alTaskId": "[parameters('al').context.taskId]",
            "alUser": "[parameters('al').context.user]",
            "alComment": "[parameters('al').context.comment]",
            "alItemType": "[parameters('al').context.item.type]",
            "alItemId": "[parameters('al').context.item.id]",
            "alItemName": "[parameters('al').context.item.name]",
            "alItemVersion": "[parameters('al').context.item.version.name]",
            "alConfigId": "[parameters('al').context.config.id]",
            "alConfigName": "[parameters('al').context.config.name]"
        },
        "name": "[concat(parameters('al').context.item.name, '.', replace(parameters('al').context.config.id, '-', ''), '.', parameters('al').context.item.id)]",
        "version": "[parameters('al').context.item.version.name]",
        "galleryName": "[variables('custom').gallery]",
        "generation": "[if(contains(variables('custom'), 'generation'), variables('custom').generation, 'V2')]",
        "trustedLaunch": "[if(contains(variables('custom'), 'trustedLaunch'), variables('custom').trustedLaunch, false())]"
    },
    "resources": [
        {
            "type": "Microsoft.Compute/galleries/images",
            "name": "[concat(variables('galleryName'), '/', variables('name'))]",
            "apiVersion": "2021-07-01",
            "location": "[variables('location')]",
            "tags": "[variables('tags')]",
            "properties": {
                "description": "[parameters('al').context.item.description]",
                "features": "[if(variables('trustedLaunch'), createArray(createObject('name', 'SecurityType', 'value', 'TrustedLaunch')), null())]",
                "hyperVGeneration": "[variables('generation')]",
                "osType": "Windows",
                "osState": "Specialized",
                "endOfLifeDate": "2030-01-01T00:00:00Z",
                "identifier": {
                    "publisher": "Citrix",
                    "offer": "[parameters('al').context.config.id]",
                    "sku": "[parameters('al').context.item.id]"
                }
            },
            "resources": [
                {
                    "type": "versions",
                    "apiVersion": "2021-07-01",
                    "name": "[variables('version')]",
                    "location": "[variables('location')]",
                    "dependsOn": [
                        "[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('name'))]"
                    ],
                    "tags": "[variables('tags')]",
                    "properties": {
                        "publishingProfile": {
                            "replicaCount": 1,
                            "targetRegions": [
                                {
                                    "name": "[variables('location')]"
                                }
                            ]
                        },
                        "storageProfile": {
                            "osDiskImage": {
                                "source": {
                                    "id": "[parameters('al').input.source.diskId]"
                                }
                            }
                        }
                    }
                }
            ]
        }
    ],
    "outputs": {
        "id": {
            "type": "string",
            "value": "[resourceId('Microsoft.Compute/galleries/images/versions', variables('galleryName'), variables('name'), variables('version'))]"
        }
    }
}
<!--NeedCopy-->

Maschine

Die Maschinenbereitstellung erstellt eine virtuelle Maschine, eine Netzwerkkarte und einen verwalteten Datenträger. Diese Vorlage funktioniert mit oder ohne Angabe der Bootimage-Bereitstellung .

Benutzerdefinierte Maschinendaten

Name Beschreibung Standard Erforderlich
location Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe. no
storageSku Der Name der SKU für den erstellten Datenträger. StandardSSD_LRS no
generation Die Generation für die virtuelle Maschine. V2 no
trustedLaunch true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false no
secureBoot true um Secure Boot zu aktivieren, andernfalls false. Dies wird nur angewendet, wenn trustedLaunch auf true gesetzt ist. true no
vTpm true um das vTPM zu aktivieren, andernfalls false. Dies wird nur angewendet, wenn trustedLaunch auf true gesetzt ist. true no
vmSize Die Größe der zu erstellenden VM. Standard_D2s_v3 no
licenseType Der on-premises Lizenztyp, der auf die virtuelle Maschine angewendet werden soll. null no
subnetId Die Ressourcen-ID des Subnetzes, an das die NIC angeschlossen werden soll. - Ja

Maschinenvorlage

  • 1.1.0.0 - Unterstützung für Trusted Launch hinzugefügt
  • 1.0.0.0 - Erste Version
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.1.0.0",
    "parameters": {
        "al": {
            "type": "object"
        }
    },
    "variables": {
        "custom": "[parameters('al').context.config.custom]",
        "location": "[if(contains(variables('custom'), 'location'), variables('custom').location, resourceGroup().location)]",
        "name": "[concat('al-', parameters('al').context.taskId)]",
        "vmName": "[concat(variables('name'), '-vm')]",
        "nicName": "[concat(variables('name'), '-nic')]",
        "diskName": "[concat(variables('name'), '-disk')]",
        "diskId": "[resourceId('Microsoft.Compute/disks', variables('diskName'))]",
        "tags": {
            "alTaskId": "[parameters('al').context.taskId]",
            "alUser": "[parameters('al').context.user]",
            "alComment": "[parameters('al').context.comment]",
            "alItemType": "[parameters('al').context.item.type]",
            "alItemId": "[parameters('al').context.item.id]",
            "alItemName": "[parameters('al').context.item.name]",
            "alItemVersion": "[parameters('al').context.item.version.name]",
            "alConfigId": "[parameters('al').context.config.id]",
            "alConfigName": "[parameters('al').context.config.name]"
        },
        "source": "[parameters('al').input.disk.image]",
        "isFromImage": "[not(contains(variables('source'), 'diskId'))]",
        "generation": "[if(contains(variables('custom'), 'generation'), variables('custom').generation, 'V2')]",
        "vmSize": "[if(contains(variables('custom'), 'vmSize'), variables('custom').vmSize, 'Standard_D2s_v3')]",
        "storageSku": "[if(contains(variables('custom'), 'storageSku'), variables('custom').storageSku, 'StandardSSD_LRS')]",
        "trustedLaunch": "[if(contains(variables('custom'), 'trustedLaunch'), variables('custom').trustedLaunch, false())]",
        "secureBoot": "[if(contains(variables('custom'), 'secureBoot'), variables('custom').secureBoot, variables('trustedLaunch'))]",
        "vTpm": "[if(contains(variables('custom'), 'vTpm'), variables('custom').vTpm, variables('trustedLaunch'))]",
        "securityProfile": {
            "securityType": "TrustedLaunch",
            "uefiSettings": {
                "secureBootEnabled": "[variables('secureBoot')]",
                "vTpmEnabled": "[variables('vTpm')]"
            }
        }
    },
    "resources": [
        {
            "type": "Microsoft.Network/networkInterfaces",
            "apiVersion": "2020-11-01",
            "name": "[variables('nicName')]",
            "location": "[variables('location')]",
            "tags": "[variables('tags')]",
            "properties": {
                "ipConfigurations": [
                    {
                        "name": "ipconfig1",
                        "properties": {
                            "privateIPAllocationMethod": "Dynamic",
                            "subnet": {
                                "id": "[variables('custom').subnetId]"
                            },
                            "primary": true,
                            "privateIPAddressVersion": "IPv4"
                        }
                    }
                ],
                "dnsSettings": {
                    "dnsServers": []
                },
                "enableAcceleratedNetworking": false,
                "enableIPForwarding": false
            }
        },
        {
            "condition": "[not(variables('isFromImage'))]",
            "type": "Microsoft.Compute/disks",
            "apiVersion": "2021-08-01",
            "name": "[variables('diskName')]",
            "location": "[variables('location')]",
            "tags": "[variables('tags')]",
            "sku": {
                "name": "[variables('storageSku')]"
            },
            "properties": {
                "osType": "Windows",
                "hyperVGeneration": "[variables('generation')]",
                "creationData": {
                    "createOption": "Copy",
                    "sourceResourceId": "[variables('source').diskId]"
                },
                "diskSizeGB": "[parameters('al').input.disk.size]",
                "networkAccessPolicy": "DenyAll",
                "publicNetworkAccess": "Disabled"
            }
        },
        {
            "type": "Microsoft.Compute/virtualMachines",
            "apiVersion": "2021-07-01",
            "name": "[variables('vmName')]",
            "location": "[variables('location')]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]",
                "[variables('diskId')]"
            ],
            "tags": "[variables('tags')]",
            "properties": {
                "hardwareProfile": {
                    "vmSize": "[variables('vmSize')]"
                },
                "securityProfile": "[if(variables('trustedLaunch'), variables('securityProfile'), null())]",
                "storageProfile": {
                    "imageReference": "[if(variables('isFromImage'), createObject('id', variables('source').id), null())]",
                    "osDisk": {
                        "osType": "Windows",
                        "createOption": "[if(variables('isFromImage'), 'FromImage', 'Attach')]",
                        "caching": "ReadWrite",
                        "deleteOption": "Delete",
                        "diskSizeGB": "[parameters('al').input.disk.size]",
                        "managedDisk": "[if(variables('isFromImage'), createObject('storageAccountType', variables('storageSku')), createObject('id', variables('diskId')))]"
                    },
                    "dataDisks": []
                },
                "networkProfile": {
                    "networkInterfaces": [
                        {
                            "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('nicName'))]"
                        }
                    ]
                },
                "diagnosticsProfile": {
                    "bootDiagnostics": {
                        "enabled": true
                    }
                },
                "licenseType": "[if(contains(variables('custom'), 'licenseType'), variables('custom').licenseType, null())]",
                "userData": "[parameters('al').input.vm.userData]"
            }
        }
    ],
    "outputs": {
        "diskId": {
            "type": "string",
            "value": "[reference(variables('vmName')).storageProfile.osDisk.managedDisk.id]"
        },
        "message": {
            "type": "string",
            "value": "[format('See [link="{0}/#@{1}/resource/{2}"]{2}[/link].', environment().portal, tenant().tenantId, resourceId('Microsoft.Compute/virtualMachines', variables('vmName')))]"
        }
    }
}
<!--NeedCopy-->

Layerimage

Bei der Layered Image-Bereitstellung können zwei Arten von Ressourcen erstellt werden: eine Galerie-Imageversion und/oder einen verwalteten Datenträger. Beide Ressourcentypen werden nach dem Namen der App Layering-Imagevorlage, die veröffentlicht wird, und ihrer erstellten Versionsnummer benannt. Die Versionsnummer wird mithilfe von Haupt- und Nebennummern aus dem Datenträgernamen der App Layering-Imagevorlage erstellt. Wenn der Datenträgername nicht als numerische Version (number.number) formatiert ist, wird standardmäßig 1.0 angewendet. Die Patch-Nummer ist die Versionsnummer der App Layering-Imagevorlage (die Häufigkeit, mit der sie veröffentlicht wurde). Dem Galerie-Image wird der Name und der Galerie-Imageversion die Versionsnummer zugewiesen. Dem verwalteten Datenträger wird der Name zugewiesen, an den die Versionsnummer angehängt ist.

Das Galerie-Image und die Version werden in der Galerie erstellt, die in den benutzerdefinierten Daten angegeben ist. Wenn ein Image mehrfach veröffentlicht wird, wird dem Compute Gallery-Image eine neue Version hinzugefügt, und die alte Version bleibt erhalten.

Benutzerdefinierte Daten für Layerimage

R = Erforderlich, O = Optional, - = Nicht verwendet

Name Beschreibung Standard Galerie-Image Verwalteter Datenträger
publishAs Der Typ der zu erstellenden Ressource(n). Als Array oder Zeichenfolge angegeben, bestehend aus ‘galleryImage’ und/oder ‘managedDisk’ galleryImage O R
Ort Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe O O
generation Die Generation der virtuellen Maschine, die das Image unterstützen wird. V2 O O
trustedLaunch true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false O O
gallery Der Name der Compute Gallery, in der das Image erstellt werden soll. Die Gallery muss in der Zielressourcengruppe sein. - R -
replicaCount Die Standardanzahl von Replikaten pro Region der Galerie-Imageversion 1 O -
targetRegions Die Zielregionen der Galerie-Imageversion. Dies wird als Array von Regionsnamenzeichenfolgen und/oder targetRegion-Objekten angegeben. Das Array muss die Region des Quelldatenträgers enthalten (wie in den benutzerdefinierten Daten für location angegeben). Die durch die benutzerdefinierten Daten in location angegebene Region O -
storageSku Der Name der zu verwendenden SKU. StandardSSD_LRS - O
diskAccessId Die Ressourcen-ID des Datenträgerzugriffs, der beim Hochladen des Datenträgerinhalts verwendet werden soll. Wenn angegeben, wird der Datenträger erstellt und der Zugriff auf das öffentliche Netzwerk dabei deaktiviert. null - O

Layerimagevorlage

  • 1.1.0.0
    • Unterstützung für Trusted Launch hinzugefügt
    • Unterstützung für Replikatanzahl und Zielregion für Galerie-Imageversionen hinzugefügt
    • Unterstützung für das Veröffentlichen als verwalteten Datenträger hinzugefügt
  • 1.0.0.0 - Erste Version
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.1.0.0",
    "parameters": {
        "al": {
            "type": "object"
        }
    },
    "variables": {
        "invalidChars": [ " ", "(", ")", "[[", "]", "{", "}", "!", "@", "#", "$", "%", "^", "&", "\*", "+", "/", "\\", "'", """, "|", "`", "~", "<", ">", ",", "?", "\*" ],
        "numericChars": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ],
        "custom": "[parameters('al').context.config.custom]",
        "location": "[if(contains(variables('custom'), 'location'), variables('custom').location, resourceGroup().location)]",
        "name": "[join(split(parameters('al').context.item.name, variables('invalidChars')), '\_')]",
        "tags": {
            "alTaskId": "[parameters('al').context.taskId]",
            "alUser": "[parameters('al').context.user]",
            "alComment": "[parameters('al').context.comment]",
            "alItemType": "[parameters('al').context.item.type]",
            "alItemId": "[parameters('al').context.item.id]",
            "alItemName": "[parameters('al').context.item.name]",
            "alItemVersion": "[parameters('al').context.item.version.name]",
            "alConfigId": "[parameters('al').context.config.id]",
            "alConfigName": "[parameters('al').context.config.name]"
        },
        "splitVer": "[split(parameters('al').input.diskName, '.')]",
        "major": "[if(equals(0, length(join(split(variables('splitVer')[0], variables('numericChars')), ''))), variables('splitVer')[0], '1')]",
        "minor": "[if(greater(length(variables('splitVer')), 1), if(equals(0, length(join(split(variables('splitVer')[1], variables('numericChars')), ''))), variables('splitVer')[1], '0'), '0')]",
        "version": "[format('{0}.{1}.{2}', variables('major'), variables('minor'), parameters('al').context.item.version.number)]",
        "galleryName": "[variables('custom').gallery]",
        "generation": "[if(contains(variables('custom'), 'generation'), variables('custom').generation, 'V2')]",
        "trustedLaunch": "[if(contains(variables('custom'), 'trustedLaunch'), variables('custom').trustedLaunch, false())]",
        "replicaCount": "[if(contains(variables('custom'), 'replicaCount'), variables('custom').replicaCount, 1)]",
        "targetRegions": "[if(contains(variables('custom'), 'targetRegions'), variables('custom').targetRegions, createArray(variables('location')))]",
        "diskName": "[format('{0}\_{1}-{2}-{3}', variables('name'), variables('major'), variables('minor'), parameters('al').context.item.version.number)]",
        "hasDiskAccess": "[contains(variables('custom'), 'diskAccessId')]",
        "storageSku": "[if(contains(variables('custom'), 'storageSku'), variables('custom').storageSku, 'StandardSSD_LRS')]",
        "publishAs": "[if(contains(variables('custom'), 'publishAs'), variables('custom').publishAs, createArray('galleryImage'))]",
        "galleryLink": "[format('[link="{0}/#@{1}/resource/{2}"]{2}[/link].', environment().portal, tenant().tenantId, resourceId('Microsoft.Compute/galleries/images/versions', variables('galleryName'), variables('name'), variables('version')))]",
        "diskLink": "[format('[link="{0}/#@{1}/resource/{2}"]{2}[/link].', environment().portal, tenant().tenantId, resourceId('Microsoft.Compute/disks', variables('diskName')))]",
        "outputLinks": "[filter(createArray(if(contains(variables('publishAs'), 'galleryImage'), variables('galleryLink'), null()), if(contains(variables('publishAs'), 'managedDisk'), variables('diskLink'), null())), lambda('link', not(equals(lambdaVariables('link'), null()))))]"
    },
    "resources": [
        {
            "condition": "[contains(variables('publishAs'), 'galleryImage')]",
            "type": "Microsoft.Compute/galleries/images",
            "name": "[format('{0}/{1}', variables('galleryName'), variables('name'))]",
            "apiVersion": "2021-07-01",
            "location": "[variables('location')]",
            "properties": {
                "description": "[parameters('al').context.item.description]",
                "features": "[if(variables('trustedLaunch'), createArray(createObject('name', 'SecurityType', 'value', 'TrustedLaunch')), null())]",
                "hyperVGeneration": "[variables('generation')]",
                "osType": "Windows",
                "osState": "Specialized",
                "endOfLifeDate": "2030-01-01T00:00:00Z",
                "identifier": {
                    "publisher": "AppLayering",
                    "offer": "[variables('name')]",
                    "sku": "[variables('generation')]"
                }
            },
            "tags": "[variables('tags')]",
            "resources": [
                {
                    "condition": "[contains(variables('publishAs'), 'galleryImage')]",
                    "type": "versions",
                    "apiVersion": "2022-03-03",
                    "name": "[variables('version')]",
                    "location": "[variables('location')]",
                    "dependsOn": [
                        "[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('name'))]"
                    ],
                    "tags": "[variables('tags')]",
                    "properties": {
                        "publishingProfile": {
                            "replicaCount": "[variables('replicaCount')]",
                            "targetRegions": "[map(variables('targetRegions'), lambda('item', if(contains(lambdaVariables('item'), 'name'), lambdaVariables('item'), createObject('name', lambdaVariables('item')))))]"
                        },
                        "storageProfile": {
                            "osDiskImage": {
                                "source": {
                                    "id": "[parameters('al').input.source.diskId]"
                                }
                            }
                        }
                    }
                }
            ]
        },
        {
            "condition": "[contains(variables('publishAs'), 'managedDisk')]",
            "type": "Microsoft.Compute/disks",
            "apiVersion": "2021-08-01",
            "name": "[variables('diskName')]",
            "location": "[variables('location')]",
            "tags": "[variables('tags')]",
            "sku": {
                "name": "[variables('storageSku')]"
            },
            "properties": {
                "osType": "Windows",
                "hyperVGeneration": "[variables('generation')]",
                "creationData": {
                    "createOption": "Copy",
                    "sourceResourceId": "[parameters('al').input.source.diskId]"
                },
                "diskAccessId": "[if(variables('hasDiskAccess'), variables('custom').diskAccessId, null())]",
                "networkAccessPolicy": "[if(variables('hasDiskAccess'), 'AllowPrivate', 'AllowAll')]",
                "publicNetworkAccess": "[if(variables('hasDiskAccess'), 'Disabled', 'Enabled')]"
            }
        }
    ],
    "outputs": {
        "message": {
            "type": "string",
            "value": "[if(empty(variables('outputLinks')), null(), format('See {0}.', join(variables('outputLinks'), ' and ')))]"
        }
    }
}
<!--NeedCopy-->
Startvorlagen