Partager via


Effet deployIfNotExists des définitions Azure Policy

Similaire à auditIfNotExists, une définition de stratégie de deployIfNotExists exécute un déploiement de modèle lorsque la condition est remplie. Les affectations de stratégie dont l’effet est défini sur DeployIfNotExists nécessitent une identité managée pour effectuer une correction.

Remarque

Les modèles imbriqués sont pris en charge avec deployIfNotExists, mais les modèles liés ne sont actuellement pas pris en charge.

Évaluation DeployIfNotExists

deployIfNotExists s’exécute après un délai configurable lorsqu’un fournisseur de ressources gère un abonnement ou une demande de création ou de mise à jour de ressources et a retourné un code d’état de réussite. Un déploiement de modèle se produit s’il n’existe aucune ressource associée ou si les ressources définies par existenceCondition n’ont pas la valeur true. La durée du déploiement dépend de la complexité des ressources incluses dans le modèle.

Au cours d’un cycle d’évaluation, les définitions de stratégie ayant un effet DeployIfNotExists sur les ressources sont marquées comme non conformes, mais aucune action n’est effectuée sur ces ressources. Les ressources non conformes existantes peuvent être corrigées à l’aide d’une tâche de correction.

Propriétés de DeployIfNotExists

La propriété details de l’effet DeployIfNotExists a toutes les sous-propriétés qui définissent les ressources associées à mettre en correspondance et le déploiement du modèle à exécuter.

  • type (requis)
    • Spécifie le type de la ressource connexe à évaluer.
    • Si type est un type de ressource sous la ressource de condition if, la stratégie interroge les ressources de cette type dans l’étendue de la ressource évaluée. Sinon, les requêtes de stratégie au sein du même groupe de ressources ou abonnement que la ressource évaluée en fonction de la existenceScope.
  • name (facultatif)
    • Spécifie le nom exact de la ressource à tester et amène la stratégie à extraire une ressource spécifique au lieu de toutes les ressources du type spécifié.
    • Lorsque les valeurs de condition pour if.field.type et then.details.type correspondent, name devient requise et doit être [field('name')], ou [field('fullName')] pour une ressource enfant.

Remarque

Les segments type et name peuvent être combinés pour récupérer des ressources imbriquées de manière générique.

Pour récupérer une ressource spécifique, vous pouvez utiliser "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" et "name": "parentResourceName/nestedResourceName".

Pour récupérer une collection de ressources imbriquées, un caractère ? générique peut être fourni à la place du segment de nom. Par exemple : "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" et "name": "parentResourceName/?". Cela peut être combiné avec des fonctions de champ pour accéder aux ressources liées à la ressource évaluée, telles que "name": "[concat(field('name'), '/?')]". »

  • resourceGroupName (facultatif)

    • Permet l’évaluation de la ressource connexe provenant d’un groupe de ressources différent.
    • Ne s’applique pas si type est une ressource qui se trouve sous la ressource de condition if.
    • La valeur par défaut est le groupe de ressources de la ressource de condition if.
    • L’exécution d’un déploiement de modèle s’effectue dans le groupe de ressources de cette valeur.
  • existenceScope (facultatif)

    • Les valeurs autorisées sont Subscription et ResourceGroup.
    • Définit la portée d’où la ressource connexe évaluée est extraite.
    • Ne s’applique pas si type est une ressource qui se trouve sous la ressource de condition if.
    • Pour ResourceGroup, limite le groupe de ressources dans resourceGroupName si spécifié. Si resourceGroupName n’est pas spécifié, limite le groupe de ressources de la condition if, qui est le comportement par défaut.
    • Pour Subscription, le traitement interroge l’abonnement entier pour la ressource associée. L’étendue d’affectation doit être définie au niveau de l’abonnement ou supérieur pour une évaluation appropriée.
    • La valeur par défaut est ResourceGroup.
  • evaluationDelay (facultatif)

    • Spécifie à quel moment l’existence des ressources associées doit être évaluée. Le délai est utilisé uniquement pour les évaluations qui résultent d’une requête de création ou de mise à jour de ressource.
    • Les valeurs autorisées sont AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailure ou une durée ISO 8601 comprise entre 0 et 360 minutes.
    • Les valeurs AfterProvisioning inspectent le résultat d’approvisionnement de la ressource évaluée dans la condition if de la règle de stratégie. AfterProvisioning s’exécute une fois le provisionnement terminé, quel que soit le résultat. Le provisionnement qui prend plus de 6 heures est considéré comme un échec lors de la détermination des délais d’évaluation de AfterProvisioning.
    • La valeur par défaut est PT10M (10 minutes).
    • La spécification d’un délai d’évaluation long peut empêcher la mise à jour de l’état de conformité enregistré de la ressource jusqu’au prochain déclencheur d’évaluation.
  • existenceCondition (facultatif)

    • S’il n’est pas spécifié, toute ressource associée de type satisfait à l’effet et ne déclenche pas le déploiement.
    • Utilise la même langue que la règle de stratégie pour la condition de if, mais est évaluée individuellement par rapport à chaque ressource associée.
    • Si une ressource connexe correspondante renvoie true, l’effet est satisfait et ne déclenche pas le déploiement.
    • Peut utiliser [field()] pour vérifier l’équivalence avec les valeurs dans la condition if.
    • Par exemple, vous pouvez l’utiliser pour vérifier que la ressource parente (dans la condition if) se trouve dans le même emplacement de ressource que la ressource associée correspondante.
  • roleDefinitionIds (requis)

  • deploymentScope (facultatif)

    • Les valeurs autorisées sont Subscription et ResourceGroup.
    • Définit le type de déploiement à déclencher. Abonnement indique un déploiement au niveau de l’abonnement et ResourceGroup indique un déploiement vers un groupe de ressources.
    • Une propriété location doit être spécifiée dans Deployment pour les déploiements au niveau de l’abonnement.
    • La valeur par défaut est ResourceGroup.
  • deployment (requis)

    • Cette propriété doit inclure le déploiement de modèle complet, car elle est transmise à l’API PUT Microsoft.Resources/deployments. Pour plus d’informations, consultez l’API REST Deployments.
    • Les éléments Microsoft.Resources/deployments imbriqués dans le modèle doivent utiliser des noms uniques pour éviter tout conflit entre plusieurs évaluations de stratégie. Le nom du déploiement parent peut être utilisé comme partie du nom de déploiement imbriqué via [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Remarque

    Toutes les fonctions à l’intérieur de la propriété deployment sont évaluées en tant que composants du modèle, et non en tant que stratégie. L’exception est la propriété parameters qui transmet les valeurs de la stratégie au modèle. Le value de cette section sous un nom de paramètre de modèle est utilisé pour effectuer ce passage de valeur (voir fullDbName dans l’exemple DeployIfNotExists).

Exemple DeployIfNotExists

Exemple : évalue les bases de données SQL Server pour déterminer si transparentDataEncryption est activé. Sinon, un déploiement destiné à l’activer est exécuté.

"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')]"
          }
        }
      }
    }
  }
}

Étapes suivantes