App Layering

Plantillas de inicio

Esta sección contiene un conjunto completo de plantillas ARM que se pueden usar con el conector de Azure Deployments. Estas plantillas se pueden utilizar tal cual o se pueden modificar para satisfacer necesidades específicas.

Cada recurso creado por estas plantillas se etiqueta con el mismo conjunto de etiquetas. Estas etiquetas incluyen información útil sobre el contexto de la implementación, como el nombre del usuario que inició la tarea y el comentario que introdujo.

Las plantillas utilizan ampliamente los datos personalizados en la configuración del conector. Los datos personalizados permiten al usuario definir parámetros comunes como locationvmSizegeneration, y otros parámetros sin necesidad de modificar la plantilla.

En la siguiente tabla se enumeran todas las propiedades de datos personalizadas que utilizan estas plantillas. Especifica qué plantillas se aplican a cada propiedad y si la propiedad es obligatoria.

R = Obligatorio, O = Opcional, - = No se utiliza

Nombre Tipo Descripción Valor predeterminado Disco de caché Imagen de arranque Máquina Imagen en capas
Ubicación cadena La región donde se crean los recursos. La misma región que el grupo de recursos de destino. O O O O
gallery cadena El nombre de la galería de procesamiento en la que se crean las imágenes. La galería debe estar en el grupo de recursos de destino. - - R - R
storageSku cadena El nombre del SKU que se utilizará para los discos gestionados. “StandardSSD_LRS” O - O -
generation cadena La generación de máquinas virtuales. “V2” - O O O
Lanzamiento confiable booleano true para habilitar Trusted Launch, falsede lo contrario. Debe ser el mismo valor para todos los tipos de implementación. false O O O O
diskAccessId cadena El ID de recurso del acceso al disco utilizado al cargar el contenido del disco. Si se especifica, el disco se crea con el acceso a la red pública desactivado. Para obtener más información, consulte la documentación de Azure. null O - - -
vmSize cadena El tamaño de la máquina virtual que se va a crear. “Standard_D2s_v3” - - O -
licenseType cadena El tipo de licencia local que se aplicará a las máquinas virtuales creadas. null - - O -
subnetId cadena El ID del recurso de la subred a la que se debe conectar la tarjeta de red de la máquina virtual. - - - R -
Recuento de réplicas number El número predeterminado de réplicas por región de la versión de la imagen de la galería 1 - - - O
Regiones objetivo matriz Las regiones de destino de la versión de la imagen de la galería. Se especifica como una matriz de cadenas de nombres de regiones u objetos TargetRegion . La matriz debe contener la región del disco de origen (que se especifica en los locationdatos personalizados). La región especificada por los locationdatos personalizados - - - O
Publicar como cadena o matriz El tipo de recurso (s) en el que publicar imágenes. Se especifica como una matriz o cadena que consta de «GalleryImage» y/o «ManagedDisk» [“galleryImage”] - - - O

Ejemplo de datos personalizados:

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

Otro ejemplo de datos personalizados:

{
    "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-->

Disco de caché

Crea un disco administrado.

Datos personalizados del disco de caché

Nombre Tipo Descripción Valor predeterminado Si son necesarias
Ubicación cadena La región en la que se crean los recursos. La misma región que el grupo de recursos de destino no
storageSku cadena El nombre del SKU que se va a utilizar. “StandardSSD_LRS” no
Lanzamiento confiable booleano true para habilitar Trusted Launch, falsede lo contrario. Debe ser el mismo valor para todos los tipos de implementación. false no
diskAccessId cadena El ID de recurso del acceso al disco que se utilizará al cargar el contenido del disco. Si se especifica, el disco se crea con el acceso a la red pública desactivado. null no

Plantilla de disco de caché

  • 1.1.0.0 - Se ha añadido soporte para Trusted Launch
  • 1.0.0.0 - Versión inicial
{
    "$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-->

Imagen de arranque

La implementación de Boot Image crea una imagen de galería y una versión de imagen en la galería especificada por los datos personalizados. Muestra el ID de la versión de imagen de la galería de cómputos creada para que la utilice la plantilla Máquina.

Datos personalizados de Boot Image

Nombre Tipo Descripción Valor predeterminado Si son necesarias
Ubicación cadena La región en la que se crean los recursos. La misma región que el grupo de recursos de destino. no
generation cadena La generación de la máquina virtual utilizada en el disco. “V2” no
Lanzamiento confiable booleano true para habilitar Trusted Launch, falsede lo contrario. Debe ser el mismo valor para todos los tipos de implementación. false no
gallery cadena El nombre de la galería de procesamiento en la que se va a crear la imagen. La galería debe estar en el grupo de recursos de destino. -

Plantilla de imagen de arranque

  • 1.1.0.0 - Se ha añadido soporte para Trusted Launch
  • 1.0.0.0 - Versión inicial
{
    "$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-->

Máquina

La implementación de la máquina crea una máquina virtual, una NIC y un disco administrado. Esta plantilla funciona con o sin especificar la implementación de la Imagen de arranque.

Datos personalizados de la máquina

Nombre Tipo Descripción Valor predeterminado Si son necesarias
Ubicación cadena La región en la que se crean los recursos. La misma región que el grupo de recursos de destino. no
storageSku cadena El nombre del SKU del disco creado. “StandardSSD_LRS” no
generation cadena La generación de la máquina virtual. “V2” no
Lanzamiento confiable booleano true para habilitar Trusted Launch, falsede lo contrario. Debe ser el mismo valor para todos los tipos de implementación. false no
Arranque seguro booleano true para habilitar Secure Boot, falsede lo contrario. Esto solo se aplica si trustedLaunchestá establecido en true. true no
vTPM booleano true para habilitar el vTPM, falsede lo contrario. Esto solo se aplica si trustedLaunchestá establecido en true. true no
vmSize cadena El tamaño de la máquina virtual que se va a crear. “Standard_D2s_v3” no
licenseType cadena El tipo de licencia local que se aplicará a la máquina virtual. null no
subnetId cadena El ID del recurso de la subred a la que se va a conectar la NIC. -

Plantilla de máquina

  • 1.1.0.0 - Se ha añadido soporte para Trusted Launch
  • 1.0.0.0 - Versión inicial
{
    "$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-->

Imagen en capas

La implementación de imágenes en capas puede crear dos tipos de recursos: una versión de imágenes de galería y/o un disco administrado. Ambos tipos de recursos se nombran con el nombre de la plantilla de imagen de App Layering que se está publicando y su número de versión construida. El número de versión se construye con números principales y secundarios del nombre del disco de la plantilla de imagen de App Layering. Si el nombre del disco no tiene el formato de una versión numérica ( number.number), se 1.0aplica de forma predeterminada. El número de parche es el número de versión de la plantilla de imagen de App Layering (el número de veces que se ha publicado). A la imagen de la galería se le asigna el nombre y a la versión de la imagen de la galería se le asigna el número de versión. Al disco gestionado se le asigna el nombre adjunto al número de versión.

La imagen y la versión de la galería se crean en la galería especificada por los datos personalizados. Cuando una imagen se publica varias veces, se agrega una nueva versión a la imagen de la galería de cómputos y se conserva la versión anterior.

Datos personalizados de imágenes en capas

R = Obligatorio, O = Opcional, - = No se utiliza

Nombre Tipo Descripción Valor predeterminado Imagen de la galería Disco administrado
Publicar como cadena o matriz El tipo de recurso (s) que se van a crear. Se especifica como una matriz o cadena que consta de «GalleryImage» y/o «ManagedDisk» [“galleryImage”] O R
Ubicación cadena La región donde se crean los recursos. La misma región que el grupo de recursos de destino O O
generation cadena La generación de la máquina virtual que admitirá la imagen. “V2” O O
Lanzamiento confiable booleano true para habilitar Trusted Launch, falsede lo contrario. Debe ser el mismo valor para todos los tipos de implementación. false O O
gallery cadena El nombre de la galería de procesamiento en la que se va a crear la imagen. La galería debe estar en el grupo de recursos de destino. - R -
Recuento de réplicas number El número predeterminado de réplicas por región de la versión de la imagen de la galería 1 O -
Regiones objetivo matriz Las regiones de destino de la versión de la imagen de la galería. Se especifica como una matriz de cadenas de nombres de regiones u objetos TargetRegion . La matriz debe contener la región del disco de origen (según lo especificado en los locationdatos personalizados). La región especificada por los locationdatos personalizados O -
storageSku cadena El nombre del SKU que se va a utilizar. “StandardSSD_LRS” - O
diskAccessId cadena El ID de recurso del acceso al disco que se utilizará al cargar el contenido del disco. Si se especifica, el disco se crea con el acceso a la red pública desactivado. null - O

Plantilla de imagen en capas

  • 1.1.0.0
    • Se agregó soporte para Trusted Launch
    • Se agregó compatibilidad con el recuento de réplicas y la región de destino para las versiones de imágenes de la galería
    • Se agregó soporte para publicar como un disco administrado
  • 1.0.0.0 - Versión inicial
{
    "$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-->
Plantillas de inicio