App Layering

Creación de plantillas ARM

Esta sección está destinada a usuarios familiarizados con las plantillas ARM. Proporciona información detallada sobre la creación de plantillas para el conector de Azure Deployments de App Layering. Para obtener información general sobre la creación de plantillas ARM, consulte la documentación de Microsoft.

Entrada

A cada tipo de implementación se le pasa un parámetro, un objeto denominado al. Este objeto tiene dos propiedades, input y context. La propiedad input es un objeto específico de cada tipo de implementación y sus propiedades cambian según el tipo de implementación. La propiedad context es la misma para todos los tipos de implementación. Contiene datos sobre la tarea, el elemento (plantilla de capa o imagen) y la configuración del conector de App Layering asociados a la implementación actual. Para obtener información detallada sobre el objeto de parámetro, consulte el parámetro de plantilla de Azure Deployments.

Cada plantilla debe declarar el parámetro al en su sección de parámetros, de la siguiente manera:

{
    ...
    "parameters": {
        "al": {
            "type": "object"
        }
    },
    ...
}
<!--NeedCopy-->

Una plantilla puede declarar más parámetros, pero todos los parámetros deben tener valores predeterminados. De lo contrario, App Layering no les proporcionará ningún valor. Esto puede resultar útil para usar funciones que solo se pueden usar en la sección de valores por defecto de un parámetro, por ejemplo [utcNow] (https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-date#utcnow).

Resultado

Todas las plantillas ARM pueden tener salidas. Con el conector de Azure Deployments, las salidas de las plantillas se pueden utilizar para pasar información a la siguiente implementación. También se pueden usar para anular algunos comportamientos predeterminados.

Los resultados de una implementación se pasan a la siguiente implementación mediante la propiedad input del al parámetro template.

Por ejemplo, cuando una implementación de un disco de caché tiene los siguientes resultados:

{
    ...
    "outputs": {
        "generation": {
            "type": "string",
            "value": "[variables('generation')]"
        },
        "name": {
            "type": "string",
            "value": "[variables('name')]"
        },
    }
    ...
}
<!--NeedCopy-->

La implementación de Boot Image recibe esta entrada:

{
  "input":
  {
    "type": "BootImage",
    "source": {
        "generation": "V2",
        "name": "MyCoolDiskName"
    }
  },
  "context": {
    ...
  }
}
<!--NeedCopy-->

Observe que la propiedad source del objeto input tiene una propiedad para cada salida especificada en la plantilla de implementación del Disco de caché. Los orígenes de cada salida dependen del tipo de implementación.

Detalles del tipo de implementación

Cada tipo de implementación tiene un conjunto diferente de entradas y salidas que pueden cambiar el comportamiento de la operación de App Layering. Estos detalles específicos de la implementación se describen en esta sección.

Para ver ejemplos del mundo real que utilizan todos estos conceptos, consulte Plantillas para principiantes.

Disco de caché

La implementación del disco de caché debe crear un recurso de disco administrado. Si lo desea, puede crear otros recursos además del disco. El dispositivo App Layering debe tener permiso para escribir en el disco mediante un token SAS (generado por el dispositivo). Una vez creada, se carga en el disco una imagen de arranque que contiene el motor de composición de App Layering.

Requisitos de disco de caché

  • Debe crear un recurso de disco administrado
  • createOption del disco administrado debe estar configurado en "Upload"
  • uploadSizeBytes del disco administrado debe estar configurado en el valor uploadSize especificado en la entrada, como "[parameters('al').input.uploadSize]"
  • El dispositivo App Layering debe poder escribir en el disco administrado mediante un token SAS.
{
    ...
    "resources": [
        {
            "type": "Microsoft.Compute/disks",
            ...
            "properties": {
                ...
                "creationData": {
                    "createOption": "Upload",
                    "uploadSizeBytes": "[parameters('al').input.uploadSize]"
                }
                ...
            }
        }
    ]
    ...
}
<!--NeedCopy-->

Entrada de disco de caché

El objeto de entrada incluye las propiedades size y uploadSize. Este objeto no incluye los resultados de otra implementación.

Salida de disco de caché

El resultado de la implementación se pasa a la implementación de Boot Image si se especifica alguna. De lo contrario, se pasa a la implementación de la Máquina.

Se puede especificar una salida denominada diskId para indicar explícitamente a App Layering qué disco usar. Si no se especifica ninguna salida de diskId, App Layering agrega una automáticamente y la configura en el ID de recurso del primer recurso de disco administrado creado por la implementación. El disco especificado por diskId tiene cargada la imagen de arranque del motor de composición de App Layering.

Imagen de arranque

Esta implementación crea un recurso a partir del disco administrado creado por la implementación del Disco de caché. No hay requisitos estrictos en cuanto al tipo de recursos que se crean. Sin embargo, debe crear un recurso que pueda usarse como fuente de un disco del sistema operativo al crear una máquina virtual, como una versión de imagen de una galería de cómputos.

Requisitos del disco de imagen de arranque

  • Debe crear un recurso que pueda usarse para crear el disco del sistema operativo de una máquina virtual con el mismo contenido que el disco con el ID ingresado como entrada.

A modo de ejemplo, una versión de imagen de una galería de cómputos que utiliza la entrada diskId como origen:

{
    ...
    "resources": [
        {
            "type": "Microsoft.Compute/galleries/images/versions",
            ...
            "properties": {
                ...
                "storageProfile": {
                    "osDiskImage": {
                        "source": {
                            "id": "[parameters('al').input.source.diskId]"
                        }
                    }
                }
                ...
            }
        }
    ]
    ...
}
<!--NeedCopy-->

Entrada de imagen de arranque

El objeto de entrada incluye la propiedad source. source representa las salidas de la implementación del Disco de caché, con una propiedad para cada salida especificada. Utilice la propiedad diskId para el origen del recurso que se está creando.

Salida de imagen de arranque

El resultado de la implementación de la imagen de arranque se pasa a la implementación de la Máquina. No hay salidas especiales ni obligatorias. Sin embargo, debes incluir los datos necesarios para crear una máquina virtual a partir del recurso creado, como un identificador de recurso.

Máquina

La implementación de la máquina debe crear un recurso de máquina virtual. La máquina virtual debe estar conectada a una red en la que pueda llegar al dispositivo App Layering y viceversa, según las conexiones internas de los puertos Firewall para la máquina de composición.

Importante:

No conecte el disco creado por la implementación del disco de caché a la máquina virtual. El disco de caché es un recurso compartido y se considera de solo lectura. Cree una copia del disco y adjúntela en su lugar cuando no utilice la implementación de la Imagen de arranque.

Requisitos de máquina

  • Debe crear un recurso de máquina virtual
  • La máquina virtual debe estar conectada a una red que permita la comunicación hacia y desde el dispositivo App Layering.
  • El disco del sistema operativo de la máquina virtual debe crearse utilizando el recurso de imagen de arranque o disco de caché como fuente
  • El tamaño del disco del sistema operativo de la máquina virtual debe configurarse en "[parameters('al').input.disk.size]"
  • La propiedad userData de la máquina virtual debe estar configurada en "[parameters('al').input.vm.userData]"
{
    ...
    "resources": [
        {
            "type": "Microsoft.Compute/disks",
            "name": "[variables('diskName')]",
            ...
            "properties": {
                ...
                "creationData": {
                    "createOption": "Copy",
                    "sourceResourceId": "[parameters('al').input.disk.image.diskId]"
                },
                "diskSizeGB": "[parameters('al').input.disk.size]",
                ...
            }
        },
        {
            "type": "Microsoft.Compute/virtualMachines",
            ...
            "dependsOn": [
                "[resourceId('Microsoft.Compute/disks', variables('diskName'))]"
            ],
            ...
            "properties": {
                ...
                "storageProfile": {
                    "osDisk": {
                        ...
                        "createOption": "Attach",
                        "managedDisk": {
                            "id": "[resourceId('Microsoft.Compute/disks', variables('diskName'))]"
                        }
                    },
                    "dataDisks": []
                },
                ...
                "userData": "[parameters('al').input.vm.userData]"
                ...
            }
        }
    ]
    ...
}
<!--NeedCopy-->

Entrada de máquina

El objeto de entrada incluye las propiedades disk y vm.

La propiedad disk.image contiene el resultado de la implementación de la Imagen de arranque, si se especificó alguna. De lo contrario, contiene el resultado de la implementación del Disco de caché. La propiedad disk.size contiene el tamaño del disco en GB.

La propiedad vm.userData contiene los datos de usuario que se deben asignar a la máquina virtual creada.

Salida de la máquina

El resultado de la implementación de la máquina se pasa a la implementación de imágenes en capas si se especifica alguna. Si utiliza una implementación de imágenes en capas, debe incluir el ID de la máquina virtual o el disco del sistema operativo en la salida para que la implementación de imágenes en capas pueda hacer referencia a ella.

Se puede especificar una salida denominada machineId para indicar explícitamente a App Layering qué máquina virtual usar. Si no se especifica ninguna salida de machineId, App Layering agrega una automáticamente y la configura en el ID de recurso del primer recurso de máquina virtual creado por la implementación.

Se puede especificar una salida denominada ipAddress para indicar explícitamente a App Layering qué dirección IP usar para comunicarse con la máquina. Si no se especifica ninguna salida de ipAddress, App Layering utiliza la dirección privada principal de la tarjeta de red principal conectada al recurso de la máquina virtual.

Se message puede especificar un nombre de salida para proporcionar un mensaje que se adjunte al estado final de una tarea de publicación de imágenes en la interfaz de usuario de App Layering. Este mensaje solo se usa si no se especifica una implementación de la Imagen en capas.

Imagen en capas

La implementación de la Imagen en capas crea un recurso a partir de la máquina virtual u otros recursos creados por la implementación de la Máquina. No hay requisitos estrictos en cuanto al tipo de recursos que se crean. Sin embargo, crea un recurso que se puede utilizar como entrada para un servicio de aprovisionamiento, como Machine Creation Services (MCS). Un recurso de imágenes de galería de cómputos es un buen ejemplo.

Requisitos de disco de imagen en capas

  • Crea un recurso que puede utilizar un servicio de aprovisionamiento para crear máquinas virtuales.

A modo de ejemplo, el siguiente bloque de código crea una versión de imagen de la galería de cómputos con la entrada diskId como origen. Esto supone que la implementación de la Máquina incluyó una salida denominada diskId que se establece con el ID del disco del sistema operativo de la máquina:

{
    ...
"resources": [
        {
            "type": "Microsoft.Compute/galleries/images",
            "name": "[format('{0}/{1}', variables('galleryName'), variables('name'))]",
            ...
            "resources": [
                {
                    "type": "versions",
                    ...
                    "dependsOn": [
                        "[resourceId('Microsoft.Compute/galleries/images', variables('galleryName'), variables('name'))]"
                    ],
                    ...
                    "properties": {
                        ...
                        "storageProfile": {
                            "osDiskImage": {
                                "source": {
                                    "id": "[parameters('al').input.source.diskId]"
                                }
                            }
                        }
                        ...
                    }
                }
            ]
        }
    ],
    ...
}
<!--NeedCopy-->

Entrada de imagen en capas

El objeto de entrada incluye las propiedades source y diskName. source representa las salidas de la implementación de la Máquina, con una propiedad para cada salida especificada. La propiedad diskName es el nombre del disco especificado en la plantilla de imagen de App Layering.

Salida de imagen en capas

El resultado de la implementación no se pasa a ninguna otra implementación. Sin embargo, se puede especificar una salida denominada message para proporcionar un mensaje que se adjunte al estado final de una tarea de publicación de imágenes en la interfaz de usuario de App Layering.

Creación de plantillas ARM