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 Connectorkonfigurationin 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 Typ Beschreibung Standard Cachedatenträger Bootimage Maschine Layerimage
Ort string Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe. O O O O
gallery string Der Name der Compute Gallery, in der Images erstellt werden sollen. Die Gallery muss in der Zielressourcengruppe sein. - - R - R
storageSku string Der Name der SKU, die für verwaltete Datenträger verwendet werden soll. “StandardSSD_LRS” O - O -
generation string Die Generierung der virtuellen Maschine. “V2” - O O O
trustedLaunch boolean true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false O O O O
diskAccessId string 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 string Die Größe der zu erstellenden VM. “Standard_D2s_v3” - - O -
licenseType string Der on-premises Lizenztyp, der auf erstellte virtuelle Maschinen angewendet werden soll. null - - O -
subnetId string Die Ressourcen-ID des Subnetzes, an das die Netzwerkkarte der VM angeschlossen werden soll. - - - R -
replicaCount number Die Standardanzahl von Replikaten pro Region der Galerie-Imageversion 1 - - - O
targetRegions array 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 string oder array 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",
    "trustedLaunch": true,
    "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",
    "replicaCount": 2,
    "targetRegions": [
        "eastus",
        {
            "name": "eastus2",
            "regionalReplicaCount": 5,
            "storageAccountType": "Premium_LRS"
        },
        "westus"
    ]
}
<!--NeedCopy-->

Cachedatenträger

Erstellt einen verwalteten Datenträger.

Benutzerdefinierte Daten des Cachedatenträgers

Name Typ Beschreibung Standard Erforderlich
Ort string Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe no
storageSku string Der Name der zu verwendenden SKU. “StandardSSD_LRS” no
trustedLaunch boolean true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false no
diskAccessId string 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 Typ Beschreibung Standard Erforderlich
Ort string Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe. no
generation string Die Generation der virtuellen Maschine, die für den Datenträger verwendet wird. “V2” no
trustedLaunch boolean true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false no
gallery string 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 Typ Beschreibung Standard Erforderlich
Ort string Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe. no
storageSku string Der Name der SKU für den erstellten Datenträger. “StandardSSD_LRS” no
generation string Die Generation für die virtuelle Maschine. “V2” no
trustedLaunch boolean true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false no
secureBoot boolean true um Secure Boot zu aktivieren, andernfalls false. Dies wird nur angewendet, wenn trustedLaunch auf true gesetzt ist. true no
vTpm boolean true um das vTPM zu aktivieren, andernfalls false. Dies wird nur angewendet, wenn trustedLaunch auf true gesetzt ist. true no
vmSize string Die Größe der zu erstellenden VM. “Standard_D2s_v3” no
licenseType string Der on-premises Lizenztyp, der auf die virtuelle Maschine angewendet werden soll. null no
subnetId string 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 Typ Beschreibung Standard Galerie-Image Verwalteter Datenträger
publishAs string oder array Der Typ der zu erstellenden Ressource(n). Als Array oder Zeichenfolge angegeben, bestehend aus ‘galleryImage’ und/oder ‘managedDisk’ [“galleryImage”] O R
Ort string Die Region, in der Ressourcen geschaffen werden. Gleiche Region wie die Zielressourcengruppe O O
generation string Die Generation der virtuellen Maschine, die das Image unterstützen wird. “V2” O O
trustedLaunch boolean true um Trusted Launch zu aktivieren, andernfalls false. Dies muss für alle Bereitstellungstypen derselbe Wert sein. false O O
gallery string Der Name der Compute Gallery, in der das Image erstellt werden soll. Die Gallery muss in der Zielressourcengruppe sein. - R -
replicaCount number Die Standardanzahl von Replikaten pro Region der Galerie-Imageversion 1 O -
targetRegions array 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 string Der Name der zu verwendenden SKU. “StandardSSD_LRS” - O
diskAccessId string 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