

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Référence syntaxique du schéma pour les CloudFormation Hooks
<a name="hooks-schema"></a>

Cette section décrit la syntaxe du schéma que vous utilisez pour développer des CloudFormation Hooks.

Un Hook inclut une spécification Hook représentée par un schéma JSON et des gestionnaires Hook. La première étape de la création d'un Hook personnalisé consiste à modéliser un schéma qui définit le Hook, ses propriétés et ses attributs. Lorsque vous initialisez un projet Hook personnalisé à l'aide de la [https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-init.html](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-init.html)commande CloudFormation CLI, un fichier de schéma Hook est créé pour vous. Utilisez ce fichier de schéma comme point de départ pour définir la forme et la sémantique de votre Hook personnalisé.

## Syntaxe du schéma
<a name="schema-syntax"></a>

Le schéma suivant représente la structure d'un Hook.

```
{
"typeName": "string",
    "description": "string",
    "sourceUrl": "string",
    "documentationUrl": "string",
    "definitions": {
        "definitionName": {
          . . .
        }
    },
    "typeConfiguration": {
        "properties": {
             "propertyName": {
                "description": "string",
                "type": "string",
                 . . .
            },
        },
    "required": [
        "propertyName"
         . . .
            ],
    "additionalProperties": false
    },
    "handlers": {
        "preCreate": {
            "targetNames": [
            ],
            "permissions": [
            ]
        },
        "preUpdate": {
            "targetNames": [
            ],
            "permissions": [
            ]
        },
        "preDelete": {
            "targetNames": [
            ],
            "permissions": [
            ]
        }
   },
   "additionalProperties": false
}
```

`typeName`  <a name="hooks-properties-typeName"></a>
Le nom unique de votre Hook. Spécifie un espace de noms en trois parties pour votre Hook, avec un modèle recommandé de. `Organization::Service::Hook`  
Les espaces de noms d'organisation suivants sont réservés et ne peuvent pas être utilisés dans les noms de vos types de Hook :  
+ `Alexa`
+ `AMZN`
+ `Amazon`
+ `ASK`
+ `AWS`
+ `Custom`
+ `Dev`
*Obligatoire* : oui  
 *Modèle* : `^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$`  
*Minimum *: `10`  
*Maximum *: `196`

`description`  <a name="hooks-properties-description"></a>
Brève description du Hook affiché dans la CloudFormation console.  
*Obligatoire* : oui

`sourceUrl`  <a name="hooks-properties-sourceUrl"></a>
L'URL du code source du Hook, s'il est public.  
*Obligatoire* : non  
*Maximum *: `4096`

`documentationUrl`  <a name="hooks-properties-documentationurl"></a>
URL d'une page fournissant une documentation détaillée pour le Hook.  
*Obligatoire* : oui  
*Modèle* : `^https\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])(\:[0-9]*)*([\?/#].*)?$`  
*Maximum *: `4096`  
Bien que le schéma Hook doive inclure des descriptions de propriétés complètes et précises, vous pouvez utiliser la `documentationURL` propriété pour fournir aux utilisateurs plus de détails, notamment des exemples, des cas d'utilisation et d'autres informations détaillées.

`definitions`  <a name="hooks-properties-definitions"></a>
Utilisez le `definitions` bloc pour fournir des schémas de propriétés Hook partagés.  
Il est considéré comme une bonne pratique d'utiliser cette `definitions` section pour définir des éléments de schéma qui peuvent être utilisés à plusieurs points de votre schéma de type Hook. Vous pouvez ensuite utiliser un pointeur JSON pour référencer cet élément aux endroits appropriés dans votre schéma de type Hook.  
*Obligatoire* : non

`typeConfiguration`  <a name="hooks-properties-typeconfiguration"></a>
Définition des données de configuration d'un Hook.  
*Obligatoire* : oui

`properties`  <a name="hooks-properties-properties"></a>
Les propriétés du Hook. Toutes les propriétés d'un Hook doivent être exprimées dans le schéma. Alignez les propriétés du schéma Hook avec les propriétés de configuration du type Hook.  
Les propriétés imbriquées ne sont pas autorisées. Définissez plutôt les propriétés imbriquées de l'`definitions`élément et utilisez un `$ref` pointeur pour les référencer dans la propriété souhaitée.
Les propriétés suivantes sont actuellement prises en charge :  
+ `default`— La valeur par défaut de la propriété.
+ `description`— Une description de la propriété.
+ `pattern`— Un modèle regex utilisé pour valider l'entrée.
+ `type`— Le type de propriété accepté.

`additionalProperties`  <a name="hooks-properties-additionalproperties"></a>
`additionalProperties` doit être défini sur `false`. Toutes les propriétés d'un Hook doivent être exprimées dans le schéma : les entrées arbitraires ne sont pas autorisées.  
*Obligatoire* : oui  
*Valeurs valides* : `false`

`handlers`  <a name="hooks-properties-handlers"></a>
Les gestionnaires spécifient les opérations qui peuvent initier le Hook défini dans le schéma, telles que les points d'invocation du Hook. Par exemple, un `preUpdate` gestionnaire est invoqué avant les opérations de mise à jour pour toutes les cibles spécifiées dans le gestionnaire.  
*Valeurs valides* : `preCreate` \$1 `preUpdate` \$1 `preDelete`  
Au moins une valeur doit être spécifiée pour le gestionnaire.
Les opérations de pile qui se traduisent par le statut de `UpdateCleanup` n'invoquent pas de Hook. Par exemple, dans les deux scénarios suivants, le `preDelete` gestionnaire du Hook n'est pas invoqué :  
+ la pile est mise à jour après la suppression d'une ressource du modèle.
+ une ressource dont le type de mise à jour est [remplacé](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) est supprimée.

`targetNames`  <a name="hooks-properties-targetNames"></a>
Un tableau de chaînes de noms de types que Hook cible. Par exemple, si un `preCreate` gestionnaire a une `AWS::S3::Bucket` cible, le Hook s'exécute pour les compartiments Amazon S3 pendant la phase de préapprovisionnement.  
+ `TargetName`

  Spécifiez au moins un nom de cible pour chaque gestionnaire implémenté.

  *Modèle* : `^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$`

  *Minimum *: `1`

  *Obligatoire* : oui
**Avertissement**  
Les références dynamiques SSM SecureString et Secrets Manager ne sont pas résolues avant d'être transmises à Hooks.

`permissions`  <a name="hooks-properties-permissions"></a>
Un tableau de chaînes qui spécifie les AWS autorisations nécessaires pour appeler le gestionnaire.  
*Obligatoire* : oui

`additionalProperties`  <a name="hooks-additional-properties"></a>
`additionalProperties` doit être défini sur `false`. Toutes les propriétés d'un Hook doivent être exprimées dans le schéma : les entrées arbitraires ne sont pas autorisées.  
*Obligatoire* : oui  
*Valeurs valides* : `false`

## Exemples de schémas Hooks
<a name="example-hooks"></a>

 **Exemple 1** 

Les procédures pas à pas pour Java et Python utilisent l'exemple de code suivant. Voici un exemple de structure pour un Hook appelé`mycompany-testing-mytesthook.json`.

```
{
    "typeName":"MyCompany::Testing::MyTestHook",
    "description":"Verifies S3 bucket and SQS queues properties before create and update",
    "sourceUrl":"https://mycorp.com/my-repo.git",
    "documentationUrl":"https://mycorp.com/documentation",
    "typeConfiguration":{
        "properties":{
            "minBuckets":{
                "description":"Minimum number of compliant buckets",
                "type":"string"
            },
            "minQueues":{
                "description":"Minimum number of compliant queues",
                "type":"string"
            },
            "encryptionAlgorithm":{
                "description":"Encryption algorithm for SSE",
                "default":"AES256",
                "type":"string",
                "pattern": "[a-zA-Z]*[1-9]"
            }
        },
        "required":[
            
        ],
        "additionalProperties":false
    },
    "handlers":{
        "preCreate":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                
            ]
        },
        "preUpdate":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                
            ]
        },
        "preDelete":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:GetEncryptionConfiguration",
                "sqs:ListQueues",
                "sqs:GetQueueAttributes",
                "sqs:GetQueueUrl"
            ]
        }
    },
    "additionalProperties":false
}
```

 **Exemple 2** 

L'exemple suivant est un schéma qui utilise le `STACK` et `CHANGE_SET` pour `targetNames` pour cibler un modèle de pile et une opération d'ensemble de modifications.

```
{
    "typeName":"MyCompany::Testing::MyTestHook",
    "description":"Verifies Stack and Change Set properties before create and update",
    "sourceUrl":"https://mycorp.com/my-repo.git",
    "documentationUrl":"https://mycorp.com/documentation",
    "typeConfiguration":{
        "properties":{
            "minBuckets":{
                "description":"Minimum number of compliant buckets",
                "type":"string"
            },
            "minQueues":{
                "description":"Minimum number of compliant queues",
                "type":"string"
            },
            "encryptionAlgorithm":{
                "description":"Encryption algorithm for SSE",
                "default":"AES256",
                "type":"string",
                "pattern": "[a-zA-Z]*[1-9]"
            }
        },
        "required":[
        ],
        "additionalProperties":false
    },
    "handlers":{
        "preCreate":{
            "targetNames":[
                "STACK",
                "CHANGE_SET"
            ],
            "permissions":[  
            ]
        },
        "preUpdate":{
            "targetNames":[
                "STACK"
            ],
            "permissions":[
            ]
        },
        "preDelete":{
            "targetNames":[
                "STACK"
            ],
            "permissions":[
                
            ]
        }
    },
    "additionalProperties":false
}
```