Efecto deployIfNotExists de las definiciones de Azure Policy
De forma similar a auditIfNotExists
, una definición de directiva deployIfNotExists
ejecuta una implementación de plantilla cuando se cumple la condición. Las asignaciones de directivas con efecto establecido como DeployIfNotExists requieren una identidad administrada para realizar la corrección.
Nota:
Las plantillas anidadas son compatibles con deployIfNotExists
, pero las plantillas vinculadas no son compatibles actualmente.
Evaluación de DeployIfNotExists
deployIfNotExists
se ejecuta después de un retraso configurable cuando un proveedor de recursos controla una solicitud de creación o actualización de suscripciones o recursos y devuelve un código de estado correcto. La implementación de una plantilla se produce si no hay recursos relacionados o si los recursos definidos por existenceCondition
no se evalúan como true. La duración de la implementación depende de la complejidad de los recursos incluidos en la plantilla.
Durante un ciclo de evaluación, las definiciones de directiva con un efecto DeployIfNotExists que coinciden con los recursos se marcan como no compatibles, pero no se realiza ninguna acción en dicho recurso. Los recursos no conformes existentes se pueden solucionar con una tarea de corrección.
Propiedades de DeployIfNotExists
La propiedad details
del efecto DeployIfNotExists tiene todas las subpropiedades que definen los recursos relacionados con los que se establece la coincidencia y la implementación de plantilla que se ejecuta.
type
(obligatorio)- Especifica el tipo del recurso relacionado para coincidir.
- Si
type
es un tipo de recurso debajo del recurso de condiciónif
, la directiva consultará los recursos de estetype
que estén dentro del ámbito del recurso evaluado. De lo contrario, las consultas de directiva dentro del mismo grupo de recursos o suscripción que el recurso evaluado dependen deexistenceScope
.
name
(opcional)- Especifica el nombre exacto del recurso para coincidir y hace que la directiva recupere un recurso específico en lugar de todos los recursos del tipo especificado.
- Cuando los valores de condición para
if.field.type
ythen.details.type
coinciden, entoncesname
es necesario y debe ser[field('name')]
, o[field('fullName')]
para un recurso secundario.
Nota:
Los segmentos type
y name
se pueden combinar para recuperar de forma genérica los recursos anidados.
Para recuperar un recurso específico, puede usar "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType"
y "name": "parentResourceName/nestedResourceName"
.
Para recuperar una colección de recursos anidados, se puede proporcionar un ?
de carácter comodín en lugar del segmento de apellidos. Por ejemplo, "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType"
y "name": "parentResourceName/?"
. Esto se puede combinar con funciones de campo para acceder a los recursos relacionados con el recurso evaluado, como "name": "[concat(field('name'), '/?')]"
."
resourceGroupName
(opcional)- Permite que la coincidencia del recurso relacionado provenga de un grupo de recursos diferente.
- No se aplica si
type
es un recurso que estaría debajo del recurso de condiciónif
. - El valor predeterminado es el grupo de recursos del recurso de la condición
if
. - Si se ejecuta una implementación de plantilla, se implementa en el grupo de recursos de este valor.
existenceScope
(opcional)- Los valores permitidos son Subscription y ResourceGroup.
- Establece el ámbito de donde obtener el recurso relacionado para que coincida.
- No se aplica si
type
es un recurso que estaría debajo del recurso de condiciónif
. - Para ResourceGroup, limitaría al grupo de recursos en
resourceGroupName
si se especifica. Si no se especificaresourceGroupName
, limitaría al grupo de recursos de la condiciónif
, que es el comportamiento predeterminado. - Para Subscription, se consulta toda la suscripción para el recurso relacionado. El ámbito de asignación debe establecerse en la suscripción o superior para una evaluación adecuada.
- El valor predeterminado es ResourceGroup.
evaluationDelay
(opcional)- Especifica cuándo se debe evaluar la existencia de los recursos relacionados. El retraso solo se usa para las evaluaciones que son el resultado de una solicitud de creación o de actualización de recursos.
- Los valores permitidos son
AfterProvisioning
,AfterProvisioningSuccess
,AfterProvisioningFailure
, o una duración ISO 8601 entre 0 y 360 minutos. - Los valores AfterProvisioning inspeccionan el resultado de aprovisionamiento del recurso que se evaluó en la condición
if
de la regla de directiva.AfterProvisioning
se ejecuta una vez completado el aprovisionamiento, independientemente del resultado. Si el aprovisionamiento tarda más de seis horas, se trata como un error a la hora de determinar los retrasos de evaluación de AfterProvisioning. - El valor predeterminado es
PT10M
(10 minutos). - La especificación de un retraso de evaluación largo puede hacer que el estado de cumplimiento registrado del recurso no se actualice hasta el siguiente desencadenador de evaluación.
existenceCondition
(opcional)- Si no se especifica, todo recurso relacionado de
type
cumple con el efecto y no desencadena la implementación. - Usa el mismo lenguaje que la regla de directiva para la condición
if
, pero se evalúa individualmente en relación con cada recurso relacionado. - Si algún recurso relacionado coincidente se evalúa como true, se cumple la condición del efecto y no se desencadena la implementación.
- Puede usar [field()] para comprobar la equivalencia con los valores en la condición
if
. - Por ejemplo, podría usarse para validar que el recurso primario (en la condición
if
) está en la misma ubicación de recursos que el recurso relacionado coincidente.
- Si no se especifica, todo recurso relacionado de
roleDefinitionIds
(obligatorio)- Esta propiedad debe incluir una matriz de cadenas que coinciden con el identificador de rol de control de acceso basado en rol accesible por la suscripción. Para más información, consulte Corrección: configuración de la definición de directiva.
deploymentScope
(opcional)- Los valores permitidos son Subscription y ResourceGroup.
- Establece el tipo de implementación que se desencadena. Subscription indica una implementación a nivel de suscripción y ResourceGroup indica una implementación en un grupo de recursos.
- En la Implementación debe especificarse una propiedad location al usar las implementaciones de nivel de suscripción.
- El valor predeterminado es ResourceGroup.
deployment
(obligatorio)- Esta propiedad debe incluir la implementación de plantilla completa, ya que luego se pasaría a la API PUT
Microsoft.Resources/deployments
. Para más información, consulte Deployments REST API (API REST de implementaciones). - Las implementaciones de
Microsoft.Resources/deployments
anidadas en la plantilla deben usar nombres únicos para evitar la contención entre varias evaluaciones de directivas. El nombre de la implementación primaria se puede usar como parte del nombre de las implementaciones anidadas mediante[concat('NestedDeploymentName-', uniqueString(deployment().name))]
.
Nota:
Todas las funciones dentro de la propiedad
deployment
se evalúan como componentes de la plantilla, no de la directiva. La excepción es la propiedadparameters
, que pasa los valores de la directiva a la plantilla.value
en esta sección bajo el nombre de un parámetro de plantilla se usa para realizar este paso de valor (vea fullDbName en el ejemplo DeployIfNotExists).- Esta propiedad debe incluir la implementación de plantilla completa, ya que luego se pasaría a la API PUT
Ejemplo de DeployIfNotExists
Ejemplo: evalúa las bases de datos de SQL Server para determinar si transparentDataEncryption
está habilitado. De lo contrario, se ejecuta una implementación para habilitarlo.
"if": {
"field": "type",
"equals": "Microsoft.Sql/servers/databases"
},
"then": {
"effect": "deployIfNotExists",
"details": {
"type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
"name": "current",
"evaluationDelay": "AfterProvisioning",
"roleDefinitionIds": [
"/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
"/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
],
"existenceCondition": {
"field": "Microsoft.Sql/transparentDataEncryption.status",
"equals": "Enabled"
},
"deployment": {
"properties": {
"mode": "incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"fullDbName": {
"type": "string"
}
},
"resources": [
{
"name": "[concat(parameters('fullDbName'), '/current')]",
"type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
"apiVersion": "2014-04-01",
"properties": {
"status": "Enabled"
}
}
]
},
"parameters": {
"fullDbName": {
"value": "[field('fullName')]"
}
}
}
}
}
}
Pasos siguientes
- Puede consultar ejemplos en Ejemplos de Azure Policy.
- Revise la estructura de definición de Azure Policy.
- Obtenga información acerca de cómo se pueden crear directivas mediante programación.
- Obtenga información sobre cómo obtener datos de cumplimiento.
- Obtenga información sobre cómo corregir recursos no compatibles.
- Revise el artículo sobre los grupos de administración de Azure.